Hi,

I'm having a problem in matching pairs when using inductive relation for 
proof. It can be demonstrated by the following example.

Suppose I define a relation:

val (PEQ_rules, PEQ_ind, PEW_cases) = Hol_reln `
   (!l1:num a1:num l2:num a2:num. (l1 = l2) ==> PEQ (l1,a1) (l2,a2))`

val [PEQ_INS] = CONJUNCTS PEQ_rules

Then, I'd like to prove the following goal:

g`!p1 p2 p3. PEQ p1 p2 ==> PEQ p2 p3 ==> PEQ p1 p3`

Everything is fine, after these two tactics:

NTAC 3 STRIP_TAC THEN
RULE_INDUCT_THEN PEQ_ind ASSUME_TAC ASSUME_TAC

However, problem begins to show up. I need to change the tuple of 
(l2,a2) into a single variable in order to use RULE_INDUCT_THEN one more 
time. However, this obscures the relation of "l2 = FST p3." 
RULE_INDUCT_THEN introduces a free variable for (FST p3), which is not 
related to l2, resulting in the failure of proof.

`?p2. (l2,a2) = p2` by METIS_TAC [] \\ ASM_REWRITE_TAC []
RULE_INDUCT_THEN PEQ_ind ASSUME_TAC ASSUME_TAC

RULE_TAC PEQ_INS

This example may be resolved by using Define for PEQ, but I'm deal with 
sets and other customized operations which do not have a constructor. 
Using inductive relation is the only option in my mind. Any method to 
solve this or an alternative way is very welcomed.

Thank you very much.
Lu

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to