case pred_const_ X xs | pred_var_ X xs =>
  simp only [isFreeIn] at h1
  simp only [Sub.Var.One.Rec.fastReplaceFree]
  simp only [Holds]
  congr! 1
  simp
  simp only [List.map_eq_map_iff]
  intro x a1
  simp
  simp only [Function.updateITE]
  simp only [eq_comm]
  split_ifs
  case _ c1 c2 =>
    rfl
  case _ c1 c2 =>
    contradiction
  case _ c1 c2 =>
    subst c2
    contradiction
  case _ c1 c2 =>
    rfl
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))
X : PredName
xs : List VarName
V : VarAssignment D
h1 : ¬isFreeIn v (pred_var_ X xs)
h2 : ¬isBoundIn v (pred_var_ X xs)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (pred_var_ X xs) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (pred_var_ X xs))
no goals