simp only [Holds]
case cons.def_
D : Type
I : Interpretation D
V' : VarAssignment D
v t : VarName
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (binders : Finset VarName) (F : Formula),
    fastAdmitsAux v t binders F →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) tail✝ F ↔ Holds D I V tail✝ (fastReplaceFree v t F))
a✝¹ : DefName
a✝ : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ a✝ → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) (def_ a✝¹ a✝) ↔
    Holds D I V (head✝ :: tail✝) (def_ a✝¹ (List.map (fun x => if v = x then t else x) a✝))
case cons.def_
D : Type
I : Interpretation D
V' : VarAssignment D
v t : VarName
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V : VarAssignment D) (binders : Finset VarName) (F : Formula),
    fastAdmitsAux v t binders F →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) tail✝ F ↔ Holds D I V tail✝ (fastReplaceFree v t F))
a✝¹ : DefName
a✝ : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ a✝ → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if a✝¹ = head✝.name ∧ a✝.length = head✝.args.length then
      Holds D I
        (Function.updateListITE (Function.updateITE V v (V' t)) head✝.args
          (List.map (Function.updateITE V v (V' t)) a✝))
        tail✝ head✝.q
    else Holds D I (Function.updateITE V v (V' t)) tail✝ (def_ a✝¹ a✝)) ↔
    if a✝¹ = head✝.name ∧ (List.map (fun x => if v = x then t else x) a✝).length = head✝.args.length then
      Holds D I (Function.updateListITE V head✝.args (List.map V (List.map (fun x => if v = x then t else x) a✝))) tail✝
        head✝.q
    else Holds D I V tail✝ (def_ a✝¹ (List.map (fun x => if v = x then t else x) a✝))