internlm/Lean-Github huggingface dataset:
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ xs → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
x : VarName
a1 : x ∈ xs
c1 : x = v
c2 : ¬v = x
⊢ V' t = V x
Tactic:
subst c1
Proof state after:
D : Type
I : Interpretation D
V' : VarAssignment D
t : VarName
head✝ : Definition
tail✝ : List Definition
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
x : VarName
a1 : x ∈ xs
tail_ih✝ :
  ∀ (V : VarAssignment D) (binders : Finset VarName) (F : Formula),
    fastAdmitsAux x t binders F →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V x (V' t)) tail✝ F ↔ Holds D I V tail✝ (fastReplaceFree x t F))
h1 : x ∈ xs → t ∉ binders
c2 : ¬x = x
⊢ V' t = V x
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
V' : VarAssignment D
t : VarName
head✝ : Definition
tail✝ : List Definition
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
x : VarName
a1 : x ∈ xs
tail_ih✝ :
  ∀ (V : VarAssignment D) (binders : Finset VarName) (F : Formula),
    fastAdmitsAux x t binders F →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V x (V' t)) tail✝ F ↔ Holds D I V tail✝ (fastReplaceFree x t F))
h1 : x ∈ xs → t ∉ binders
c2 : ¬x = x
⊢ V' t = V x
Tactic:
contradiction
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ xs → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
x : VarName
a1 : x ∈ xs
c1 : ¬x = v
c2 : v = x
⊢ V x = V t
Tactic:
subst c2
Proof state after:
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))
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ xs → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
a1 : v ∈ xs
c1 : ¬v = v
⊢ V v = V t
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ xs → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
a1 : v ∈ xs
c1 : ¬v = v
⊢ V v = V t
Tactic:
contradiction
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
X : PredName
xs : List VarName
V : VarAssignment D
binders : Finset VarName
h1 : v ∈ xs → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
x : VarName
a1 : x ∈ xs
c1 : ¬x = v
c2 : ¬v = x
⊢ V x = V x
Tactic:
rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ Function.updateITE V v (V' t) x = Function.updateITE V v (V' t) y ↔
    V (if v = x then t else x) = V (if v = y then t else y)
Tactic:
simp only [Function.updateITE]
Proof state after:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ ((if x = v then V' t else V x) = if y = v then V' t else V y) ↔
    V (if v = x then t else x) = V (if v = y then t else y)
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ ((if x = v then V' t else V x) = if y = v then V' t else V y) ↔
    V (if v = x then t else x) = V (if v = y then t else y)
Tactic:
simp only [eq_comm]
Proof state after:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ ((if v = x then V' t else V x) = if v = y then V' t else V y) ↔
    V (if v = x then t else x) = V (if v = y then t else y)
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ ((if v = x then V' t else V x) = if v = y then V' t else V y) ↔
    V (if v = x then t else x) = V (if v = y then t else y)
Tactic:
congr! 1
Proof state after:
case a.h.e'_2
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if v = x then V' t else V x) = V (if v = x then t else x)

case a.h.e'_3
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if v = y then V' t else V y) = V (if v = y then t else y)
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
case a.h.e'_2
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if v = x then V' t else V x) = V (if v = x then t else x)

case a.h.e'_3
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if v = y then V' t else V y) = V (if v = y then t else y)
Tactic:
all_goals
  split_ifs
  case _ c1 =>
    subst c1
    tauto
  case _ c1 =>
    rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
case a.h.e'_3
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
⊢ (if v = y then V' t else V y) = V (if v = y then t else y)
Tactic:
split_ifs
Proof state after:
case pos
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
h✝ : v = y
⊢ V' t = V t

case neg
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
h✝ : ¬v = y
⊢ V y = V y
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
c1 : v = y
⊢ V' t = V t
Tactic:
case _ c1 =>
  subst c1
  tauto
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
c1 : ¬v = y
⊢ V y = V y
Tactic:
case _ c1 =>
  rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
c1 : v = y
⊢ V' t = V t
Tactic:
subst c1
Proof state after:
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))
x : VarName
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
h1 : v = x ∨ v = v → t ∉ binders
⊢ V' t = V t
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x : VarName
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
h1 : v = x ∨ v = v → t ∉ binders
⊢ V' t = V t
Tactic:
tauto
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
x y : VarName
V : VarAssignment D
binders : Finset VarName
h1 : v = x ∨ v = y → t ∉ binders
h2 : ∀ v ∉ binders, V' v = V v
c1 : ¬v = y
⊢ V y = V y
Tactic:
rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
V : VarAssignment D
binders : Finset VarName
h1 : fastAdmitsAux v t binders phi
h2 : ∀ v ∉ binders, V' v = V v
⊢ ¬Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
    ¬Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi)
Tactic:
congr! 1
Proof state after:
case a.h.e'_1.a
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))
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
V : VarAssignment D
binders : Finset VarName
h1 : fastAdmitsAux v t binders phi
h2 : ∀ v ∉ binders, V' v = V v
⊢ Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
    Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi)
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
case a.h.e'_1.a
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))
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
V : VarAssignment D
binders : Finset VarName
h1 : fastAdmitsAux v t binders phi
h2 : ∀ v ∉ binders, V' v = V v
⊢ Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
    Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi)
Tactic:
exact phi_ih V binders h1 h2
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
psi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders psi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
V : VarAssignment D
binders : Finset VarName
h1 : fastAdmitsAux v t binders phi ∧ fastAdmitsAux v t binders psi
h2 : ∀ v ∉ binders, V' v = V v
⊢ (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
      Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi) ↔
    (Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi) ↔ Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
Tactic:
cases h1
Proof state after:
case intro
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
psi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders psi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
left✝ : fastAdmitsAux v t binders phi
right✝ : fastAdmitsAux v t binders psi
⊢ (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
      Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi) ↔
    (Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi) ↔ Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
case a.h.e'_1.a
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
psi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders psi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
h1_left : fastAdmitsAux v t binders phi
h1_right : fastAdmitsAux v t binders psi
⊢ Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
    Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi)
Tactic:
exact phi_ih V binders h1_left h2
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.One.Rec.substitution_theorem_aux
Proof state before:
case a.h.e'_2.a
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))
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders phi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) phi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t phi))
psi_ih :
  ∀ (V : VarAssignment D) (binders : Finset VarName),
    fastAdmitsAux v t binders psi →
      (∀ v ∉ binders, V' v = V v) →
        (Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi ↔
          Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi))
V : VarAssignment D
binders : Finset VarName
h2 : ∀ v ∉ binders, V' v = V v
h1_left : fastAdmitsAux v t binders phi
h1_right : fastAdmitsAux v t binders psi
⊢ Holds D I (Function.updateITE V v (V' t)) (head✝ :: tail✝) psi ↔
    Holds D I V (head✝ :: tail✝) (fastReplaceFree v t psi)
Tactic:
exact psi_ih V binders h1_right h2
Proof state after:
no goals