apply Function.updateListITE_mem_eq_len
case h1
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 : v ∉ xs
h2 : ¬isBoundIn v (def_ X xs)
c1 : X = hd.name ∧ (List.map (fun x => if u = x then v else x) xs).length = hd.args.length
v' : VarName
a1 : isFreeIn v' hd.q
s1 :
  List.map ((fun a_1 => if a_1 = v then a else V a_1) ∘ fun x => if u = x then v else x) xs =
    List.map (fun a_1 => if a_1 = u then a else V a_1) xs
⊢ Function.updateListITE (fun c => if c = u then a else V c) hd.args (List.map (fun c => if c = u then a else V c) xs)
      v' =
    Function.updateListITE (fun c => if c = v then a else V c) hd.args (List.map (fun c => if c = u then a else V c) xs)
      v'
case h1.h1
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 : v ∉ xs
h2 : ¬isBoundIn v (def_ X xs)
c1 : X = hd.name ∧ (List.map (fun x => if u = x then v else x) xs).length = hd.args.length
v' : VarName
a1 : isFreeIn v' hd.q
s1 :
  List.map ((fun a_1 => if a_1 = v then a else V a_1) ∘ fun x => if u = x then v else x) xs =
    List.map (fun a_1 => if a_1 = u then a else V a_1) xs
⊢ v' ∈ hd.args

case h1.h2
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 : v ∉ xs
h2 : ¬isBoundIn v (def_ X xs)
c1 : X = hd.name ∧ (List.map (fun x => if u = x then v else x) xs).length = hd.args.length
v' : VarName
a1 : isFreeIn v' hd.q
s1 :
  List.map ((fun a_1 => if a_1 = v then a else V a_1) ∘ fun x => if u = x then v else x) xs =
    List.map (fun a_1 => if a_1 = u then a else V a_1) xs
⊢ hd.args.length = (List.map (fun c => if c = u then a else V c) xs).length