internlm/Lean-Github huggingface dataset:
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs psi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ Holds D I V M (head✝ :: tail✝) phi → Holds D I V M (head✝ :: tail✝) psi ↔
    Holds D I V' M (head✝ :: tail✝) phi → Holds D I V' M (head✝ :: tail✝) psi
Tactic:
congr! 1
Proof state after:
case a.h.a
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs psi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi

case a.h'.a
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs psi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
a✝ : Holds D I V' M (head✝ :: tail✝) phi
⊢ Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi
Theorem: MM0.holds_coincide_var
Proof state before:
case a.h.a
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs psi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi
Tactic:
exact phi_ih V V' vs h1_left h2
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
case a.h'.a
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
phi psi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
psi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs psi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
a✝ : Holds D I V' M (head✝ :: tail✝) phi
⊢ Holds D I V M (head✝ :: tail✝) psi ↔ Holds D I V' M (head✝ :: tail✝) psi
Tactic:
exact psi_ih V V' vs h1_right h2
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (forall_ x phi)
h2 : ∀ v ∈ vs, V v = V' v
⊢ Holds D I V M (head✝ :: tail✝) (forall_ x phi) ↔ Holds D I V' M (head✝ :: tail✝) (forall_ x phi)
Tactic:
unfold NoMetaVarAndAllFreeInList at h1
Proof state after:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ Holds D I V M (head✝ :: tail✝) (forall_ x phi) ↔ Holds D I V' M (head✝ :: tail✝) (forall_ x phi)
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ Holds D I V M (head✝ :: tail✝) (forall_ x phi) ↔ Holds D I V' M (head✝ :: tail✝) (forall_ x phi)
Tactic:
simp only [Holds]
Proof state after:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ (∀ (d : D), Holds D I (Function.updateITE V x d) M (head✝ :: tail✝) phi) ↔
    ∀ (d : D), Holds D I (Function.updateITE V' x d) M (head✝ :: tail✝) phi
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ (∀ (d : D), Holds D I (Function.updateITE V x d) M (head✝ :: tail✝) phi) ↔
    ∀ (d : D), Holds D I (Function.updateITE V' x d) M (head✝ :: tail✝) phi
Tactic:
apply forall_congr'
Proof state after:
case h
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ ∀ (a : D),
    Holds D I (Function.updateITE V x a) M (head✝ :: tail✝) phi ↔
      Holds D I (Function.updateITE V' x a) M (head✝ :: tail✝) phi
Theorem: MM0.holds_coincide_var
Proof state before:
case h
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ ∀ (a : D),
    Holds D I (Function.updateITE V x a) M (head✝ :: tail✝) phi ↔
      Holds D I (Function.updateITE V' x a) M (head✝ :: tail✝) phi
Tactic:
intro a
Proof state after:
case h
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ Holds D I (Function.updateITE V x a) M (head✝ :: tail✝) phi ↔
    Holds D I (Function.updateITE V' x a) M (head✝ :: tail✝) phi
Theorem: MM0.holds_coincide_var
Proof state before:
case h
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ Holds D I (Function.updateITE V x a) M (head✝ :: tail✝) phi ↔
    Holds D I (Function.updateITE V' x a) M (head✝ :: tail✝) phi
Tactic:
apply phi_ih
Proof state after:
case h.h1
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ NoMetaVarAndAllFreeInList ?h.vs phi

case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ ∀ v ∈ ?h.vs, Function.updateITE V x a v = Function.updateITE V' x a v

case h.vs
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ List VarName
Theorem: MM0.holds_coincide_var
Proof state before:
case h.h1
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ NoMetaVarAndAllFreeInList ?h.vs phi
Tactic:
exact h1
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
⊢ ∀ v ∈ x :: vs, Function.updateITE V x a v = Function.updateITE V' x a v
Tactic:
intro v a1
Proof state after:
case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
⊢ Function.updateITE V x a v = Function.updateITE V' x a v
Theorem: MM0.holds_coincide_var
Proof state before:
case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
⊢ Function.updateITE V x a v = Function.updateITE V' x a v
Tactic:
unfold Function.updateITE
Proof state after:
case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
⊢ (if v = x then a else V v) = if v = x then a else V' v
Theorem: MM0.holds_coincide_var
Proof state before:
case h.h2
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
⊢ (if v = x then a else V v) = if v = x then a else V' v
Tactic:
split_ifs
Proof state after:
case pos
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
h✝ : v = x
⊢ a = a

case neg
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
h✝ : ¬v = x
⊢ V v = V' v
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
c1 : v = x
⊢ a = a
Tactic:
case _ c1 =>
  rfl
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
c1 : ¬v = x
⊢ V v = V' v
Tactic:
case _ c1 =>
  simp at a1
  tauto
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
c1 : v = x
⊢ a = a
Tactic:
rfl
Proof state after:
no goals
Theorem: MM0.holds_coincide_var
Proof state before:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
a1 : v ∈ x :: vs
c1 : ¬v = x
⊢ V v = V' v
Tactic:
simp at a1
Proof state after:
D : Type
I : Interpretation D
M : MetaValuation D
head✝ : Definition
tail✝ : List Definition
tail_ih✝ :
  ∀ (V V' : Valuation D) (F : Formula) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs F → (∀ v ∈ vs, V v = V' v) → (Holds D I V M tail✝ F ↔ Holds D I V' M tail✝ F)
x : VarName
phi : Formula
phi_ih :
  ∀ (V V' : Valuation D) (vs : List VarName),
    NoMetaVarAndAllFreeInList vs phi →
      (∀ v ∈ vs, V v = V' v) → (Holds D I V M (head✝ :: tail✝) phi ↔ Holds D I V' M (head✝ :: tail✝) phi)
V V' : Valuation D
vs : List VarName
h2 : ∀ v ∈ vs, V v = V' v
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
a : D
v : VarName
c1 : ¬v = x
a1 : v = x ∨ v ∈ vs
⊢ V v = V' v