\DOC PBETA_CONV \TYPE {PBETA_CONV : conv} \SYNOPSIS Performs a general beta-conversion. \KEYWORDS conversion. \DESCRIBE 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. \FAILURE {PBETA_CONV tm} fails if {tm} is not a paired beta-redex. \EXAMPLE {PBETA_CONV} will reduce applications with arbitrary structure. { #PBETA_CONV "((\((a:*,b:*),(c:*,d:*)). f a b c d) ((w,x),(y,z))):*";; |- (\((a,b),c,d). f a b c d)((w,x),y,z) = f w x y z } {PBETA_CONV} does not require the structure of the argument and the bound pair to match. { #PBETA_CONV "((\((a:*,b:*),(c:*,d:*)). f a b c d) ((w,x),yz)):*";; |- (\((a,b),c,d). f a b c d)((w,x),yz) = f w x(FST yz)(SND yz) } {PBETA_CONV} regards component pairs of the bound pair as variables in their own right and preserves structure accordingly: { #PBETA_CONV "((\((a:*,b:*),(c:*,d:*)). f (a,b) (c,d)) (wx,(y,z))):*";; |- (\((a,b),c,d). f(a,b)(c,d))(wx,y,z) = f wx(y,z) } \SEEALSO BETA_CONV, PAIRED_BETA_CONV, PBETA_RULE, PBETA_TAC, LIST_PBETA_CONV, RIGHT_PBETA, RIGHT_LIST_PBETA, LEFT_PBETA, LEFT_LIST_PBETA. \ENDDOC