Skip to content
Documentation out of dateLearn more

Congruence relation

A congruence relation on a language is an equivalence relation that is compatible with the term constructors of that language.

Consider the untyped lambda-calculus:

e::=xλx.ee1 e2e ::= x \mid \lambda x.\, e \mid e_1\ e_2

A congruence relation e1=e2\texttt{}e_1 = e_2 must be closed under the equivalence rules,

  e=e\mboxrefle1=e2e2=e1\mboxsymme1=e2e2=e3e1=e3\mboxtrans, {\; \over e = e} \mbox{refl} \qquad { e_1 = e_2 \over e_2 = e_1 } \mbox{symm} \qquad { e_1 = e_2 \qquad e_2 = e_3 \over e_1 = e_3 } \mbox{trans},

and the compatibility rules,

  x=xe1=e2λx.e1=λx.e2e1=e1e2=e2e1 e2=e1 e2. {\; \over x = x} \qquad { e_1 = e_2 \over \lambda x.\, e_1 = \lambda x.\, e_2 } \qquad { e_1 = e_1' \qquad e_2 = e_2' \over e_1\ e_2 = e_1'\ e_2' }.