PALPHA : term -> term -> thm
------------- 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.
- PALPHA (Term `\(x:'a,y:'a). (x,y)`) (Term`\xy:'a#'a. xy`); > val it = |- (\(x,y). (x,y)) = (\xy. xy) : thm
- 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