induction E generalizing F V
D : Type
I : Interpretation D
V : VarAssignment D
E : Env
u v : VarName
F : Formula
a : D
h1 : ¬isFreeIn v F
h2 : ¬isBoundIn v F
⊢ Holds D I (Function.updateITE V u a) E F ↔
    Holds D I (Function.updateITE V v a) E (Sub.Var.One.Rec.fastReplaceFree u v F)
case nil
D : Type
I : Interpretation D
u v : VarName
a : D
V : VarAssignment D
F : Formula
h1 : ¬isFreeIn v F
h2 : ¬isBoundIn v F
⊢ Holds D I (Function.updateITE V u a) [] F ↔
    Holds D I (Function.updateITE V v a) [] (Sub.Var.One.Rec.fastReplaceFree u v F)

case cons
D : Type
I : Interpretation D
u v : VarName
a : D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (F : Formula),
    ¬isFreeIn v F →
      ¬isBoundIn v F →
        (Holds D I (Function.updateITE V u a) tail✝ F ↔
          Holds D I (Function.updateITE V v a) tail✝ (Sub.Var.One.Rec.fastReplaceFree u v F))
V : VarAssignment D
F : Formula
h1 : ¬isFreeIn v F
h2 : ¬isBoundIn v F
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) F ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v F)