simp only [Holds]
D : Type
I : Interpretation D
u v : VarName
a : D
hd : Definition
tl : List Definition
ih :
  ∀ (V : VarAssignment D) (F : Formula),
    ¬isFreeIn v F →
      ¬isBoundIn v F →
        (Holds D I (Function.updateITE V u a) tl F ↔
          Holds D I (Function.updateITE V v a) tl (Sub.Var.One.Rec.fastReplaceFree u v F))
X : DefName
xs : List VarName
V : VarAssignment D
h1 : ¬isFreeIn v (def_ X xs)
h2 : ¬isBoundIn v (def_ X xs)
⊢ Holds D I (Function.updateITE V u a) (hd :: tl) (def_ X xs) ↔
    Holds D I (Function.updateITE V v a) (hd :: tl) (def_ X (List.map (fun x => if u = x then v else x) xs))
D : Type
I : Interpretation D
u v : VarName
a : D
hd : Definition
tl : List Definition
ih :
  ∀ (V : VarAssignment D) (F : Formula),
    ¬isFreeIn v F →
      ¬isBoundIn v F →
        (Holds D I (Function.updateITE V u a) tl F ↔
          Holds D I (Function.updateITE V v a) tl (Sub.Var.One.Rec.fastReplaceFree u v F))
X : DefName
xs : List VarName
V : VarAssignment D
h1 : ¬isFreeIn v (def_ X xs)
h2 : ¬isBoundIn v (def_ X xs)
⊢ (if X = hd.name ∧ xs.length = hd.args.length then
      Holds D I (Function.updateListITE (Function.updateITE V u a) hd.args (List.map (Function.updateITE V u a) xs)) tl
        hd.q
    else Holds D I (Function.updateITE V u a) tl (def_ X xs)) ↔
    if X = hd.name ∧ (List.map (fun x => if u = x then v else x) xs).length = hd.args.length then
      Holds D I
        (Function.updateListITE (Function.updateITE V v a) hd.args
          (List.map (Function.updateITE V v a) (List.map (fun x => if u = x then v else x) xs)))
        tl hd.q
    else Holds D I (Function.updateITE V v a) tl (def_ X (List.map (fun x => if u = x then v else x) xs))