internlm/Lean-Github huggingface dataset:
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1 : ¬isFreeIn v (phi.iff_ psi)
h2 : ¬isBoundIn v (phi.iff_ psi)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
simp only [isFreeIn] at h1
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1 : ¬(isFreeIn v phi ∨ isFreeIn v psi)
h2 : ¬isBoundIn v (phi.iff_ psi)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1 : ¬(isFreeIn v phi ∨ isFreeIn v psi)
h2 : ¬isBoundIn v (phi.iff_ psi)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
push_neg at h1
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬isBoundIn v (phi.iff_ psi)
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬isBoundIn v (phi.iff_ psi)
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
simp only [isBoundIn] at h2
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬(isBoundIn v phi ∨ isBoundIn v psi)
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬(isBoundIn v phi ∨ isBoundIn v psi)
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
push_neg at h2
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
h2 : ¬isBoundIn v phi ∧ ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1 : ¬isFreeIn v phi ∧ ¬isFreeIn v psi
h2 : ¬isBoundIn v phi ∧ ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
cases h1
Proof state after:
case intro
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬isBoundIn v phi ∧ ¬isBoundIn v psi
left✝ : ¬isFreeIn v phi
right✝ : ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h2 : ¬isBoundIn v phi ∧ ¬isBoundIn v psi
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
cases h2
Proof state after:
case intro
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
left✝ : ¬isBoundIn v phi
right✝ : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (phi.iff_ psi))
Tactic:
simp only [Sub.Var.One.Rec.fastReplaceFree]
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝)
      ((Sub.Var.One.Rec.fastReplaceFree u v phi).iff_ (Sub.Var.One.Rec.fastReplaceFree u v psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (phi.iff_ psi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝)
      ((Sub.Var.One.Rec.fastReplaceFree u v phi).iff_ (Sub.Var.One.Rec.fastReplaceFree u v psi))
Tactic:
simp only [Holds]
Proof state after:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
      Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi) ↔
    (Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi) ↔
      Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
case a.h.e'_1.a
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi)
Tactic:
exact phi_ih V h1_left h2_left
Proof state after:
no goals
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
case a.h.e'_2.a
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
psi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v psi →
      ¬isBoundIn v psi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi))
V : VarAssignment D
h1_left : ¬isFreeIn v phi
h1_right : ¬isFreeIn v psi
h2_left : ¬isBoundIn v phi
h2_right : ¬isBoundIn v psi
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) psi ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v psi)
Tactic:
exact psi_ih V h1_right h2_right
Proof state after:
no goals
Theorem: FOL.NV.replace_empty_Holds
Proof state before:
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 : VarName
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
V : VarAssignment D
h1 : ¬isFreeIn v (exists_ x phi)
h2 : ¬isBoundIn v (exists_ x phi)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (exists_ x phi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (exists_ x phi))
Tactic:
simp only [isFreeIn] at h1
Proof state after:
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 : VarName
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D),
    ¬isFreeIn v phi →
      ¬isBoundIn v phi →
        (Holds D I (Function.updateITE V u a) (head✝ :: tail✝) phi ↔
          Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v phi))
V : VarAssignment D
h1 : ¬(¬v = x ∧ isFreeIn v phi)
h2 : ¬isBoundIn v (exists_ x phi)
⊢ Holds D I (Function.updateITE V u a) (head✝ :: tail✝) (exists_ x phi) ↔
    Holds D I (Function.updateITE V v a) (head✝ :: tail✝) (Sub.Var.One.Rec.fastReplaceFree u v (exists_ x phi))