Differences
This shows you the differences between two versions of the page.
| — |
note_on_substitutions [2007/03/21 14:57] (current) 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) | ||