PBETA_CONVPairRules.PBETA_CONV : conv
Performs a general beta-conversion.
The conversion PBETA_CONV maps a paired beta-redex
"(\p.t)q" to the theorem
|- (\p.t)q = t[q/p]
where u[q/p] denotes the result of substituting
q for all free occurrences of p in
t, after renaming sufficient bound variables to avoid
variable capture. Unlike PAIRED_BETA_CONV,
PBETA_CONV does not require that the structure of the
argument match the structure of the pair bound by the abstraction.
However, if the structure of the argument does match the structure of
the pair bound by the abstraction, then PAIRED_BETA_CONV
will do the job much faster.
PBETA_CONV tm fails if tm is not a paired
beta-redex.
PBETA_CONV will reduce applications with arbitrary
structure.
- PBETA_CONV
(Term `((\((a:'a,b:'a),(c:'a,d:'a)). f a b c d) ((w,x),(y,z))):'a`);
> val it = |- (\((a,b),c,d). f a b c d) ((w,x),y,z) = f w x y z : thm
PBETA_CONV does not require the structure of the
argument and the bound pair to match.
- PBETA_CONV
(Term `((\((a:'a,b:'a),(c:'a,d:'a)). f a b c d) ((w,x),yz)):'a`);
> val it = |- (\((a,b),c,d). f a b c d) ((w,x),yz) =
f w x (FST yz) (SND yz) : thm
PBETA_CONV regards component pairs of the bound pair as
variables in their own right and preserves structure accordingly:
- PBETA_CONV
(Term `((\((a:'a,b:'a),(c:'a,d:'a)). f (a,b) (c,d)) (wx,(y,z))):'a`);
> val it = |- (\((a,b),c,d). f (a,b) (c,d)) (wx,y,z) = f wx (y,z) : thm
Thm.BETA_CONV, PairedLambda.PAIRED_BETA_CONV,
PairRules.PBETA_RULE,
PairRules.PBETA_TAC,
PairRules.LIST_PBETA_CONV,
PairRules.RIGHT_PBETA,
PairRules.RIGHT_LIST_PBETA,
PairRules.LEFT_PBETA,
PairRules.LEFT_LIST_PBETA