Want to take part in these discussions? Sign in if you have an account, or apply for one below
Vanilla 1.1.10 is a product of Lussumo. More Information: Documentation, Community Support.
I am confused about how to deal with -equivalence in the interpretation.
The “exchange” part of the first lemma on this page implies that the partial interpretation of a raw term or type is “equivariant” under renaming of its free variables. But how do we deal with the necessary invariance under renaming of bound variables (-equivalence)? (Streicher elides this point completely, as far as I can tell.)
On the one hand, since the interpretation of a binder like is defined in terms of the interpretation of subterms like in which the bound variable is free, it seems like invariance under renaming of bound variables depends on equivariance under renaming of free variables. But on the other hand, capture-avoiding substitution is only a total function when we are allowed to rename the bound variables of its inputs, so it seems like the opposite dependence also holds. Do we need to prove them in mutual induction?
I suppose we could give up and use de Bruijn indices for the input to the interpretation, with translation from named variable syntax into de Bruijn syntax as a “preprocessing” step to go along with the adding of type annotations, Russell universe coercions and cumulativity, etc. But I want to resist that as long as possible….
One way to build alpha-equivalence classes of terms is to define name swapping , where T is a completely raw term (not considered up to alpha yet, so just a regular datatype with “strings” for variables in it), and where swapping applies the swap to all positions, including bound variables. Then everything is equivariant under swapping, before you define capture-avoiding substitution. Then it’s a lemma after the fact that is (alpha-equivalent to) when x doesn’t occur in T.
1 to 5 of 5