Fresh variable

In formal reasoning, in particular in mathematical logic, computer algebra, and automated theorem proving, a fresh variable is a variable that did not occur in the context considered so far. The concept is often used without explanation.

Fresh variables may be used to replace other variables, to eliminate variable shadowing or capture. For instance, in alpha-conversion, the processing of terms in the lambda calculus into equivalent terms with renamed variables, replacing variables with fresh variables can be helpful as a way to avoid accidentally capturing variables that should be free. Another use for fresh variables involves the development of loop invariants in formal program verification, where it is sometimes useful to replace constants by newly introduced fresh variables.

Example
For example, in term rewriting, before applying a rule $$l \to r$$ to a given term $$t$$, each variable in $$l \to r$$ should be replaced by a fresh one to avoid clashes with variables occurring in $$t$$. Given the rule
 * $$append(cons(x,y),z) \to cons(x,append(y,z))$$

and the term
 * $$append(cons(x,cons(y,nil)),cons(3,nil))$$,

attempting to find a matching substitution of the rule's left-hand side, $$append(cons(x,y),z)$$, within $$append(cons(x,cons(y,nil)),cons(3,nil))$$ will fail, since $$y$$ cannot match $$cons(y,nil)$$. However, if the rule is replaced by a fresh copy
 * $$append(cons(v_1,v_2),v_3) \to cons(v_1,append(v_2,v_3))$$

before, matching will succeed with the answer substitution $$\{ v_2 \mapsto x, \; v_2 \mapsto cons(y,nil), \; v_3 \mapsto cons(3,nil) \}$$.