From melham@cpsc.ucalgary.ca  Thu Aug 23 11:32:14 1990
Received: by iris.ucdavis.edu (5.57/UCD.EECS.2.0)
        id AA12682; Thu, 23 Aug 90 11:32:14 PDT
Received: from [136.159.2.1] by clover.ucdavis.edu (5.59/UCD.EECS.1.11)
        id AA27641; Thu, 23 Aug 90 11:35:50 PDT
Received: from cs-sun-gc.cpsc.ucalgary.ca by cs-sun-fsa.cpsc.ucalgary.ca (4.1/CS1.0)
        id AA08337; Thu, 23 Aug 90 12:30:23 MDT
Date: Thu, 23 Aug 90 12:30:23 MDT
From: melham@cpsc.ucalgary.ca (Thomas Melham)
Message-Id: <9008231830.AA08337@cs-sun-fsa.cpsc.ucalgary.ca>
To: info-hol@clover.ucdavis.edu
Subject: RE: problem with new_recursive_definition.

RE: problem with new_recursive_definition

The problem is a spelling error; the variable "Acomb" in the last clause of
the proposed definition:

   let Aip = new_recursive_definition false Aterm_Axiom `Aip`
      "(!n.    Aip (AVar n) ^DP ^v   = v n) /\
       (!x.    Aip (AConst x) DP v   = x) /\
       (!t t'. Aip (Acomb t t') DP v =
            (SND DP) (Aip t DP v) (Aip t' DP v))";;

should instead be the constant "AComb" (to match the type definition).

You can usually find this sort of problem pretty quickly by having a look at
the free variables in your definition.  In this case, frees of the term
supplied to new_recursive_definition is:

      ["Aip"; "DP"; "v"; "Acomb"] : term list

which immediately informs us that "Acomb" is wrong.

In the next rewrite of new_recursive_definition, I hope to supply more
informative failure strings---including messages about unbound variables
in the proposed definition.

Tom




