PALPHAPairRules.PALPHA : term -> term -> thm
Proves equality of paired alpha-equivalent terms.
When applied to a pair of terms t1 and t1'
which are alpha-equivalent, ALPHA returns the theorem
|- t1 = t1'.
------------- PALPHA "t1" "t1'"
|- t1 = t1'
The difference between PALPHA and ALPHA is
that PALPHA is prepared to consider pair structures of
different structure to be alpha-equivalent. In its most trivial case
this means that PALPHA can consider a variable and a pair
to alpha-equivalent.
Fails unless the terms provided are alpha-equivalent.
- PALPHA (Term `\(x:'a,y:'a). (x,y)`) (Term`\xy:'a#'a. xy`);
> val it = |- (\(x,y). (x,y)) = (\xy. xy) : thm
Alpha-converting a paired abstraction to a nonpaired abstraction can
introduce instances of the terms FST and SND.
A paired abstraction and a nonpaired abstraction will be considered
equivalent by PALPHA if the nonpaired abstraction contains
all those instances of FST and SND present in
the paired abstraction, plus the minimum additional instances of
FST and SND. For example:
- PALPHA
(Term `\(x:'a,y:'b). (f x y (x,y)):'c`)
(Term `\xy:'a#'b. (f (FST xy) (SND xy) xy):'c`);
> val it = |- (\(x,y). f x y (x,y)) = (\xy. f (FST xy) (SND xy) xy) : thm
- PALPHA
(Term `\(x:'a,y:'b). (f x y (x,y)):'c`)
(Term `\xy:'a#'b. (f (FST xy) (SND xy) (FST xy, SND xy)):'c`)
handle e => Raise e;
Exception raised at ??.failwith:
PALPHA
! Uncaught exception:
! HOL_ERR
Thm.ALPHA, Term.aconv, PairRules.PALPHA_CONV,
PairRules.GEN_PALPHA_CONV