# Differences

This shows you the differences between two versions of the page.

 — note_on_substitutions [2007/03/21 14:57] (current)test created 2007/03/21 14:57 test created 2007/03/21 14:57 test created Line 1: Line 1: + ====== On substitutions ====== + + Let t1[x:=t0] denote the result of substituting all occurrences of variable x in term t1 with the term t0.  These rules define substitution recursively:​ + + x[x:=t0] = t2 + y[x:=t0] = y   (for any variable y distinct from x) + c[x:=t0] = c   (for any constant symbol c) + f(t1,​...,​tn)[x:​=t0] = f(t1[x:​=t0],​...,​tn[x:​=t0]) + + The first cases are base cases and the last case is recursive case. + + For quantifier-free formulas, we similarly substitute recursively. ​ We rename quantified variables along the way to make them distinct from other variables (this avoides accidental "​variable capture"​):​ + + R(t1,​...,​tn)[x:​=t0] = R(t1[x:​=t0],​...,​tn[x:​=t0]) + (t1=t2)[x:​=t0] = (t1[x:=t0] = t2[x:=t0]) + (F1 & F2)[x:=t0] = (F1[x:=t0] & F2[x:=t0]) + (~F)[x:=t0] = ~(F[x:=t0]) + (forall y. F) [x:​=t0] ​ =  forall y. (F[x:​=t0]), ​  if y does not occur in t (otherwise, rename y as a bound variable) + (exists y. F) [x:​=t0] ​ =  exists y. (F[x:​=t0]), ​  if y does not occur in t (otherwise, rename y as a bound variable)