internlm/Lean-Github huggingface dataset:
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
case h.h2
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : v ∈ binders ∪ {x} ∨ (if v = x then x else σ' v) ∉ binders ∪ {x}
⊢ Function.updateITE V x d v = Function.updateITE V' x d (Function.updateITE σ' x x v)
Tactic:
simp at a1
Proof state after:
case h.h2
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ Function.updateITE V x d v = Function.updateITE V' x d (Function.updateITE σ' x x v)
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
case h.h2
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ Function.updateITE V x d v = Function.updateITE V' x d (Function.updateITE σ' x x v)
Tactic:
simp only [Function.updateITE]
Proof state after:
case h.h2
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ (if v = x then d else V v) = if (if v = x then x else σ' v) = x then d else V' (if v = x then x else σ' v)
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : v = x
c2 : x = x
⊢ d = d
Tactic:
case _ c1 c2 =>
  rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : v = x
c2 : ¬x = x
⊢ d = V' x
Tactic:
case _ c1 c2 =>
  contradiction
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : ¬v = x
c2 : σ' v = x
⊢ V v = d
Tactic:
case _ c1 c2 =>
  subst c2
  tauto
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : ¬v = x
c2 : ¬σ' v = x
⊢ V v = V' (σ' v)
Tactic:
case _ c1 c2 =>
  simp only [if_neg c1] at a1
  apply h2
  tauto
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : v = x
c2 : x = x
⊢ d = d
Tactic:
rfl
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : v = x
c2 : ¬x = x
⊢ d = V' x
Tactic:
contradiction
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : ¬v = x
c2 : σ' v = x
⊢ V v = d
Tactic:
subst c2
Proof state after:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
h1 : admitsAux σ (binders ∪ {σ' v}) phi
a1 : (v ∈ binders ∨ v = σ' v) ∨ (if v = σ' v then σ' v else σ' v) ∉ binders ∧ ¬v = σ' v ∧ ¬σ' v = σ' v
c1 : ¬v = σ' v
⊢ V v = d
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
h1 : admitsAux σ (binders ∪ {σ' v}) phi
a1 : (v ∈ binders ∨ v = σ' v) ∨ (if v = σ' v then σ' v else σ' v) ∉ binders ∧ ¬v = σ' v ∧ ¬σ' v = σ' v
c1 : ¬v = σ' v
⊢ V v = d
Tactic:
tauto
Proof state after:
no goals
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
a1 : (v ∈ binders ∨ v = x) ∨ (if v = x then x else σ' v) ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
c1 : ¬v = x
c2 : ¬σ' v = x
⊢ V v = V' (σ' v)
Tactic:
simp only [if_neg c1] at a1
Proof state after:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
c1 : ¬v = x
c2 : ¬σ' v = x
a1 : (v ∈ binders ∨ v = x) ∨ σ' v ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ V v = V' (σ' v)
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
c1 : ¬v = x
c2 : ¬σ' v = x
a1 : (v ∈ binders ∨ v = x) ∨ σ' v ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ V v = V' (σ' v)
Tactic:
apply h2
Proof state after:
case a
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
c1 : ¬v = x
c2 : ¬σ' v = x
a1 : (v ∈ binders ∨ v = x) ∨ σ' v ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ v ∈ binders ∨ σ' v ∉ binders
Theorem: FOL.NV.Sub.Var.All.Rec.substitution_theorem_aux
Proof state before:
case a
D : Type
I : Interpretation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName) (F : Formula),
    admitsAux σ binders F →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) → (Holds D I V tail✝ F ↔ Holds D I V' tail✝ (fastReplaceFree σ' F))
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : VarAssignment D) (σ σ' : VarName → VarName) (binders : Finset VarName),
    admitsAux σ binders phi →
      (∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)) →
        (∀ v ∈ binders, v = σ' v) →
          (∀ v ∉ binders, σ' v = σ v) →
            (Holds D I V (head✝ :: tail✝) phi ↔ Holds D I V' (head✝ :: tail✝) (fastReplaceFree σ' phi))
V V' : VarAssignment D
σ σ' : VarName → VarName
binders : Finset VarName
h1 : admitsAux σ (binders ∪ {x}) phi
h2 : ∀ (v : VarName), v ∈ binders ∨ σ' v ∉ binders → V v = V' (σ' v)
h2' : ∀ v ∈ binders, v = σ' v
h3 : ∀ v ∉ binders, σ' v = σ v
d : D
v : VarName
c1 : ¬v = x
c2 : ¬σ' v = x
a1 : (v ∈ binders ∨ v = x) ∨ σ' v ∉ binders ∧ ¬v = x ∧ ¬σ' v = x
⊢ v ∈ binders ∨ σ' v ∉ binders
Tactic:
tauto
Proof state after:
no goals