Theorem: MM0.no_meta_var_imp_meta_var_set_is_empty (FOL/MM0/MM0.lean)

State before:
F : Formula
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs F
⊢ F.metaVarSet = ∅
Tactic:
induction F generalizing vs
State after:
case meta_var_
a✝ : MetaVarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (meta_var_ a✝)
⊢ (meta_var_ a✝).metaVarSet = ∅

case pred_
a✝¹ : PredName
a✝ vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (pred_ a✝¹ a✝)
⊢ (pred_ a✝¹ a✝).metaVarSet = ∅

case eq_
a✝¹ a✝ : VarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (eq_ a✝¹ a✝)
⊢ (eq_ a✝¹ a✝).metaVarSet = ∅

case true_
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs true_
⊢ true_.metaVarSet = ∅

case not_
a✝ : Formula
a_ih✝ : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs a✝ → a✝.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs a✝.not_
⊢ a✝.not_.metaVarSet = ∅

case imp_
a✝¹ a✝ : Formula
a_ih✝¹ : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs a✝¹ → a✝¹.metaVarSet = ∅
a_ih✝ : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs a✝ → a✝.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (a✝¹.imp_ a✝)
⊢ (a✝¹.imp_ a✝).metaVarSet = ∅

case forall_
a✝¹ : VarName
a✝ : Formula
a_ih✝ : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs a✝ → a✝.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (forall_ a✝¹ a✝)
⊢ (forall_ a✝¹ a✝).metaVarSet = ∅

case def_
a✝¹ : DefName
a✝ vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (def_ a✝¹ a✝)
⊢ (def_ a✝¹ a✝).metaVarSet = ∅

State before:
X : MetaVarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (meta_var_ X)
⊢ (meta_var_ X).metaVarSet = ∅
Tactic:
case meta_var_ X =>
  unfold NoMetaVarAndAllFreeInList at h1
  contradiction
State after:
no goals

State before:
X : PredName
xs vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (pred_ X xs)
⊢ (pred_ X xs).metaVarSet = ∅
Tactic:
case pred_ X xs =>
  rfl
State after:
no goals

State before:
x y : VarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (eq_ x y)
⊢ (eq_ x y).metaVarSet = ∅
Tactic:
case eq_ x y =>
  rfl
State after:
no goals

State before:
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs true_
⊢ true_.metaVarSet = ∅
Tactic:
case true_ =>
  rfl
State after:
no goals

State before:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi.not_
⊢ phi.not_.metaVarSet = ∅
Tactic:
case not_ phi phi_ih =>
  unfold NoMetaVarAndAllFreeInList at h1
  unfold Formula.metaVarSet
  exact phi_ih vs h1
State after:
no goals

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (phi.imp_ psi)
⊢ (phi.imp_ psi).metaVarSet = ∅
Tactic:
case imp_ phi psi phi_ih psi_ih =>
  unfold NoMetaVarAndAllFreeInList at h1
  unfold Formula.metaVarSet
  cases h1
  case intro h1_left h1_right =>
    simp only [phi_ih vs h1_left]
    simp only [psi_ih vs h1_right]
    simp
State after:
no goals

State before:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (forall_ x phi)
⊢ (forall_ x phi).metaVarSet = ∅
Tactic:
case forall_ x phi phi_ih =>
  unfold NoMetaVarAndAllFreeInList at h1
  unfold Formula.metaVarSet
  exact phi_ih (x :: vs) h1
State after:
no goals

State before:
X : DefName
xs vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (def_ X xs)
⊢ (def_ X xs).metaVarSet = ∅
Tactic:
case def_ X xs =>
  rfl
State after:
no goals

State before:
X : MetaVarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (meta_var_ X)
⊢ (meta_var_ X).metaVarSet = ∅
Tactic:
unfold NoMetaVarAndAllFreeInList at h1
State after:
X : MetaVarName
vs : List VarName
h1 : False
⊢ (meta_var_ X).metaVarSet = ∅

State before:
X : MetaVarName
vs : List VarName
h1 : False
⊢ (meta_var_ X).metaVarSet = ∅
Tactic:
contradiction
State after:
no goals

State before:
X : PredName
xs vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (pred_ X xs)
⊢ (pred_ X xs).metaVarSet = ∅
Tactic:
rfl
State after:
no goals

State before:
x y : VarName
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (eq_ x y)
⊢ (eq_ x y).metaVarSet = ∅
Tactic:
rfl
State after:
no goals

State before:
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs true_
⊢ true_.metaVarSet = ∅
Tactic:
rfl
State after:
no goals

State before:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi.not_
⊢ phi.not_.metaVarSet = ∅
Tactic:
unfold NoMetaVarAndAllFreeInList at h1
State after:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi
⊢ phi.not_.metaVarSet = ∅

State before:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi
⊢ phi.not_.metaVarSet = ∅
Tactic:
unfold Formula.metaVarSet
State after:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi
⊢ phi.metaVarSet = ∅

State before:
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi
⊢ phi.metaVarSet = ∅
Tactic:
exact phi_ih vs h1
State after:
no goals

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (phi.imp_ psi)
⊢ (phi.imp_ psi).metaVarSet = ∅
Tactic:
unfold NoMetaVarAndAllFreeInList at h1
State after:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi ∧ NoMetaVarAndAllFreeInList vs psi
⊢ (phi.imp_ psi).metaVarSet = ∅

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi ∧ NoMetaVarAndAllFreeInList vs psi
⊢ (phi.imp_ psi).metaVarSet = ∅
Tactic:
unfold Formula.metaVarSet
State after:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi ∧ NoMetaVarAndAllFreeInList vs psi
⊢ phi.metaVarSet ∪ psi.metaVarSet = ∅

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs phi ∧ NoMetaVarAndAllFreeInList vs psi
⊢ phi.metaVarSet ∪ psi.metaVarSet = ∅
Tactic:
cases h1
State after:
case intro
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
left✝ : NoMetaVarAndAllFreeInList vs phi
right✝ : NoMetaVarAndAllFreeInList vs psi
⊢ phi.metaVarSet ∪ psi.metaVarSet = ∅

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ phi.metaVarSet ∪ psi.metaVarSet = ∅
Tactic:
case intro h1_left h1_right =>
  simp only [phi_ih vs h1_left]
  simp only [psi_ih vs h1_right]
  simp
State after:
no goals

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ phi.metaVarSet ∪ psi.metaVarSet = ∅
Tactic:
simp only [phi_ih vs h1_left]
State after:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ ∅ ∪ psi.metaVarSet = ∅

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ ∅ ∪ psi.metaVarSet = ∅
Tactic:
simp only [psi_ih vs h1_right]
State after:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ ∅ ∪ ∅ = ∅

State before:
phi psi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
psi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs psi → psi.metaVarSet = ∅
vs : List VarName
h1_left : NoMetaVarAndAllFreeInList vs phi
h1_right : NoMetaVarAndAllFreeInList vs psi
⊢ ∅ ∪ ∅ = ∅
Tactic:
simp
State after:
no goals

State before:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (forall_ x phi)
⊢ (forall_ x phi).metaVarSet = ∅
Tactic:
unfold NoMetaVarAndAllFreeInList at h1
State after:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ (forall_ x phi).metaVarSet = ∅

State before:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ (forall_ x phi).metaVarSet = ∅
Tactic:
unfold Formula.metaVarSet
State after:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ phi.metaVarSet = ∅

State before:
x : VarName
phi : Formula
phi_ih : ∀ (vs : List VarName), NoMetaVarAndAllFreeInList vs phi → phi.metaVarSet = ∅
vs : List VarName
h1 : NoMetaVarAndAllFreeInList (x :: vs) phi
⊢ phi.metaVarSet = ∅
Tactic:
exact phi_ih (x :: vs) h1
State after:
no goals

State before:
X : DefName
xs vs : List VarName
h1 : NoMetaVarAndAllFreeInList vs (def_ X xs)
⊢ (def_ X xs).metaVarSet = ∅
Tactic:
rfl
State after:
no goals