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