From foss  Fri May  4 10:40:18 1990
Received: by iris.ucdavis.edu (5.57/UCD.EECS.2.0)
        id AA00340; Fri, 4 May 90 10:40:18 PDT
Date: Fri, 4 May 90 10:40:18 PDT
From: foss (Jim Alves-Foss)
Message-Id: <9005041740.AA00340@iris.ucdavis.edu>
To: info-hol
Subject: SPECing simple polymorphic types
Cc: foss


Hello, I have been working extensively in HOL for several months now. (I just
completed one proof generating 78800 intermediate theorems). In my proofs I
find they have to be longer because I am having a problem specializing
theorems of polymorphic types.

For example:
Recall EL |- (!l. EL 0 l = HD l) /\ (!l. EL (SUC n) l = EL n (TL l))

#SPEC "(L:(*)list)" (CONJUNCT1 EL);;
|- EL 0 L = HD L

but when I try:

#SPEC "(L:(num)list)" (CONJUNCT1 EL);;
evaluation failed   SPEC

or:

#SPEC "(L:((*)list)list)" (CONJUNCT1 EL);;
evaluation failed   SPEC

Is there a way around this in proofs? I am tired of assuming
"(EL 0 (L:((*)list)list)) = (HD L)"
and then using REWRITE_TAC[EL] to prove one subgoal, and using my assumption
as another. This makes my proofs very deep.

Does anyone have a solution I am missing.

Thanks

-Jim Alves-Foss (foss@iris.ucdavis.edu)  /* Of course these are MY opinions */
                (foss@[127.120.57.20])   /* and may change without warning. */


