Conv.RENAME_VARS_CONV : string list -> term -> thm
More than one variable can be renamed at once. If variables occur past the first, then the renaming continues on the appropriate sub-term of the first. (That is, if the term is an abstraction, then renaming will continue on the body of the abstraction. If it is one of the supported quantifiers, then renaming will continue on the body of the abstraction that is the argument of the “binder constant”.)
If RENAME_VARS_CONV is passed the empty list, it is equivalent to ALL_CONV. The binders do not need to be of the same type all the way into the term.
- RENAME_VARS_CONV ["a", "b"] ``\x y. x /\ y``; > val it = |- (\x y. x /\ y) = (\a b. a /\ b) : thm - RENAME_VARS_CONV ["a", "b"] ``!x:'a y. P x /\ P y``; > val it = |- (!x y. P x /\ P y) = !a b. P a /\ P b : thm - RENAME_VARS_CONV ["a", "b"] ``!x:'a. ?y. P x /\ P y``; > val it = |- (!x. ?y. P x /\ P y) = !a. ?b. P a /\ P b : thm