I'm trying to write an inductive relation that relates equivalent
expressions in a programming language with respect to a context of pairs of
variables assumed equivalent.

I ran into this problem:
Exception raised at IndDefLib.Hol_reln:
at IndDefLib.Hol_mono_reln:
at IndDefRules.derive_strong_induction:
at Thm.EQ_MP

I think what I need is a monotonicity rule for GSPEC, but I can't figure
out what it should look like. Am I thinking in the right direction?

Here is a very cut down example that exhibits the same problem:

Hol_datatype`v = Cl of v list => num`
Hol_reln`(n IN s ==> tt s n n)`

(* fails *)
Hol_reln`
  (tt { n | n < LENGTH v1 /\ n < LENGTH v2 /\ vv (EL n v1) (EL n v2)} n1 n2
   ==> vv (Cl v1 n1) (Cl v2 n2))`

(* sanity check: works *)
Hol_reln`
  n1 < LENGTH v1 /\ n1 < LENGTH v2 /\ vv (EL n1 v1) (EL n1 v2) /\
  (n1 = n2)
  ==> vv (Cl v1 n1) (Cl v2 n2)`

In my real example, vv and tt would be mutually recursive - does that make
it significantly harder?
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire 
the most talented Cisco Certified professionals. Visit the 
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to