Theorem: bigCon_sat (Bml/bigConDis.lean)

State before:
W : Type
l : List Formula
M : KripkeModel W
w : W
⊢ Evaluate (M, w) (bigCon l) ↔ ∀ φ ∈ l, Evaluate (M, w) φ
Tactic:
constructor
State after:
case mp
W : Type
l : List Formula
M : KripkeModel W
w : W
⊢ Evaluate (M, w) (bigCon l) → ∀ φ ∈ l, Evaluate (M, w) φ

case mpr
W : Type
l : List Formula
M : KripkeModel W
w : W
⊢ (∀ φ ∈ l, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon l)

State before:
case mp
W : Type
l : List Formula
M : KripkeModel W
w : W
⊢ Evaluate (M, w) (bigCon l) → ∀ φ ∈ l, Evaluate (M, w) φ
Tactic:
intro satCon
State after:
case mp
W : Type
l : List Formula
M : KripkeModel W
w : W
satCon : Evaluate (M, w) (bigCon l)
⊢ ∀ φ ∈ l, Evaluate (M, w) φ

State before:
case mp
W : Type
l : List Formula
M : KripkeModel W
w : W
satCon : Evaluate (M, w) (bigCon l)
⊢ ∀ φ ∈ l, Evaluate (M, w) φ
Tactic:
induction l
State after:
case mp.nil
W : Type
M : KripkeModel W
w : W
satCon : Evaluate (M, w) (bigCon [])
⊢ ∀ φ ∈ [], Evaluate (M, w) φ

case mp.cons
W : Type
M : KripkeModel W
w : W
head✝ : Formula
tail✝ : List Formula
tail_ih✝ : Evaluate (M, w) (bigCon tail✝) → ∀ φ ∈ tail✝, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head✝ :: tail✝))
⊢ ∀ φ ∈ head✝ :: tail✝, Evaluate (M, w) φ

State before:
W : Type
M : KripkeModel W
w : W
satCon : Evaluate (M, w) (bigCon [])
⊢ ∀ φ ∈ [], Evaluate (M, w) φ
Tactic:
case nil => tauto
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
⊢ ∀ φ ∈ head :: tail, Evaluate (M, w) φ
Tactic:
case cons head tail ih =>
  have : ((Evaluate (M, w) head) ∧ Evaluate (M, w) (bigCon tail)) :=
    by unfold bigCon; aesop
  aesop
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
satCon : Evaluate (M, w) (bigCon [])
⊢ ∀ φ ∈ [], Evaluate (M, w) φ
Tactic:
tauto
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
⊢ ∀ φ ∈ head :: tail, Evaluate (M, w) φ
Tactic:
have : ((Evaluate (M, w) head) ∧ Evaluate (M, w) (bigCon tail)) :=
  by unfold bigCon; aesop
State after:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
this : Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
⊢ ∀ φ ∈ head :: tail, Evaluate (M, w) φ

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
this : Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
⊢ ∀ φ ∈ head :: tail, Evaluate (M, w) φ
Tactic:
aesop
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
⊢ Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
Tactic:
unfold bigCon
State after:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
⊢ Evaluate (M, w) head ∧
    Evaluate (M, w)
      (match tail with
      | [] => ⊤
      | [f] => f
      | f :: rest => f⋀bigCon rest)

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : Evaluate (M, w) (bigCon tail) → ∀ φ ∈ tail, Evaluate (M, w) φ
satCon : Evaluate (M, w) (bigCon (head :: tail))
⊢ Evaluate (M, w) head ∧
    Evaluate (M, w)
      (match tail with
      | [] => ⊤
      | [f] => f
      | f :: rest => f⋀bigCon rest)
Tactic:
aesop
State after:
no goals

State before:
case mpr
W : Type
l : List Formula
M : KripkeModel W
w : W
⊢ (∀ φ ∈ l, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon l)
Tactic:
intro satAll
State after:
case mpr
W : Type
l : List Formula
M : KripkeModel W
w : W
satAll : ∀ φ ∈ l, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon l)

State before:
case mpr
W : Type
l : List Formula
M : KripkeModel W
w : W
satAll : ∀ φ ∈ l, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon l)
Tactic:
induction l
State after:
case mpr.nil
W : Type
M : KripkeModel W
w : W
satAll : ∀ φ ∈ [], Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon [])

case mpr.cons
W : Type
M : KripkeModel W
w : W
head✝ : Formula
tail✝ : List Formula
tail_ih✝ : (∀ φ ∈ tail✝, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail✝)
satAll : ∀ φ ∈ head✝ :: tail✝, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon (head✝ :: tail✝))

State before:
W : Type
M : KripkeModel W
w : W
satAll : ∀ φ ∈ [], Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon [])
Tactic:
case nil => tauto
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon (head :: tail))
Tactic:
case cons head tail ih =>
  have : Evaluate (M, w) (bigCon (head :: tail)) ↔
    ((Evaluate (M, w) head) ∧ Evaluate (M, w) (bigCon tail)) :=
    by unfold bigCon; aesop
  aesop
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
satAll : ∀ φ ∈ [], Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon [])
Tactic:
tauto
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon (head :: tail))
Tactic:
have : Evaluate (M, w) (bigCon (head :: tail)) ↔
  ((Evaluate (M, w) head) ∧ Evaluate (M, w) (bigCon tail)) :=
  by unfold bigCon; aesop
State after:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
this : Evaluate (M, w) (bigCon (head :: tail)) ↔ Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
⊢ Evaluate (M, w) (bigCon (head :: tail))

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
this : Evaluate (M, w) (bigCon (head :: tail)) ↔ Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
⊢ Evaluate (M, w) (bigCon (head :: tail))
Tactic:
aesop
State after:
no goals

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
⊢ Evaluate (M, w) (bigCon (head :: tail)) ↔ Evaluate (M, w) head ∧ Evaluate (M, w) (bigCon tail)
Tactic:
unfold bigCon
State after:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
⊢ Evaluate (M, w)
      (match head :: tail with
      | [] => ⊤
      | [f] => f
      | f :: rest => f⋀bigCon rest) ↔
    Evaluate (M, w) head ∧
      Evaluate (M, w)
        (match tail with
        | [] => ⊤
        | [f] => f
        | f :: rest => f⋀bigCon rest)

State before:
W : Type
M : KripkeModel W
w : W
head : Formula
tail : List Formula
ih : (∀ φ ∈ tail, Evaluate (M, w) φ) → Evaluate (M, w) (bigCon tail)
satAll : ∀ φ ∈ head :: tail, Evaluate (M, w) φ
⊢ Evaluate (M, w)
      (match head :: tail with
      | [] => ⊤
      | [f] => f
      | f :: rest => f⋀bigCon rest) ↔
    Evaluate (M, w) head ∧
      Evaluate (M, w)
        (match tail with
        | [] => ⊤
        | [f] => f
        | f :: rest => f⋀bigCon rest)
Tactic:
aesop
State after:
no goals