What variant of higher order matching is “ho_match_term” supposed to
perform?. This function is undocumented, despite being at the core of
the simplifier, and there are many variants of higher order unification
described in the literature (unlike first order unification), so it is
unclear what it is supposed to do. The general case is undecidable and
there are no most general solutions[1].

At first I thought that it was second order matching, but it does not
solve a simple second order matching problem:

> ho_match_term [] empty_tmset “(f :'a -> 'a) x” “y :'a”;
     {message = "at Term.dest_comb:\nnot a comb", origin_function =
      "ho_match_term", origin_structure = "HolKernel"} raised

A second order solution is f := «λz. y». Another one is x := «y». f :=
«λx. x». Next is a case where “ho_match_term” gives an anomalous answer;
the substitution returned is not a solution in the sense of [1] (because
alpha-renaming would occur to avoid capture of “x”):

> ho_match_term [] empty_tmset “(λx :'a. t :'a)” “(λx :'a. x)”;
val it =
   ([{redex = “t”, residue = “x”}], []):
   {redex: term, residue: term} list * (hol_type, hol_type) Lib.subst

I am asking this because:

* I would find useful to use some notion of “higher order rewriting” in
custom tactics and while “ho_match_term” empirically seems to work, it
does not seem a good idea to use it if I do not really know what it is

* Since “ho_match_term” is used by several tacticals, I am concerned
that the informal specification that “ho_match_term” was written for
does not matches the expectation of the authors of those tacticals
(e.g.: the simplifier of simpLib, metis). This is a possible source of
errors (“bugs”).


[1] “Handbook of Automated Reasoning, vol. II”, A. Robinson, A.
Voronkov, 2001, Chapter 16 “Higher-Order Unification and Matching”.

Attachment: signature.asc
Description: OpenPGP digital signature

Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
hol-info mailing list

Reply via email to