Theorem: LO.System.disj_allsame! (Logic/Logic/HilbertStyle/Supplemental.lean)

State before:
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q r : F
Γ Δ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
hd : ∀ q ∈ Γ, q = p
⊢ 𝓢 ⊢! Γ.disj' ⟶ p
Tactic:
induction Γ using List.induction_with_singleton with
| hnil => simp_all [List.disj'_nil, efq!];
| hsingle => simp_all [List.mem_singleton, List.disj'_singleton, imp_id!];
| hcons q Δ hΔ ih =>
  simp [List.disj'_cons_nonempty hΔ];
  simp at hd;
  have ⟨hd₁, hd₂⟩ := hd;
  subst hd₁;
  apply provable_iff_provable.mpr;
  apply deduct_iff.mpr;
  exact disj₃'! (by simp) (weakening! (by simp) $ provable_iff_provable.mp $ ih hd₂) id!
State after:
no goals

State before:
case hnil
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q r : F
Γ Δ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
hd : ∀ q ∈ [], q = p
⊢ 𝓢 ⊢! [].disj' ⟶ p
Tactic:
simp_all [List.disj'_nil, efq!]
State after:
no goals

State before:
case hsingle
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q r : F
Γ Δ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
a✝ : F
hd : ∀ q ∈ [a✝], q = p
⊢ 𝓢 ⊢! [a✝].disj' ⟶ p
Tactic:
simp_all [List.mem_singleton, List.disj'_singleton, imp_id!]
State after:
no goals

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : ∀ q_1 ∈ q :: Δ, q_1 = p
⊢ 𝓢 ⊢! (q :: Δ).disj' ⟶ p
Tactic:
simp [List.disj'_cons_nonempty hΔ]
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : ∀ q_1 ∈ q :: Δ, q_1 = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : ∀ q_1 ∈ q :: Δ, q_1 = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p
Tactic:
simp at hd
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : q = p ∧ ∀ a ∈ Δ, a = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : q = p ∧ ∀ a ∈ Δ, a = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p
Tactic:
have ⟨hd₁, hd₂⟩ := hd
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : q = p ∧ ∀ a ∈ Δ, a = p
hd₁ : q = p
hd₂ : ∀ a ∈ Δ, a = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
p q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q ∈ Δ, q = p) → 𝓢 ⊢! Δ.disj' ⟶ p
hd : q = p ∧ ∀ a ∈ Δ, a = p
hd₁ : q = p
hd₂ : ∀ a ∈ Δ, a = p
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ p
Tactic:
subst hd₁
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ q

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ 𝓢 ⊢! q ⋎ Δ.disj' ⟶ q
Tactic:
apply provable_iff_provable.mpr
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ [] ⊢[𝓢]! q ⋎ Δ.disj' ⟶ q

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ [] ⊢[𝓢]! q ⋎ Δ.disj' ⟶ q
Tactic:
apply deduct_iff.mpr
State after:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ [q ⋎ Δ.disj'] ⊢[𝓢]! q

State before:
case hcons
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ [q ⋎ Δ.disj'] ⊢[𝓢]! q
Tactic:
exact disj₃'! (by simp) (weakening! (by simp) $ provable_iff_provable.mp $ ih hd₂) id!
State after:
no goals

State before:
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ { ctx := [q ⋎ Δ.disj'] } ⊢! q ⟶ q
Tactic:
simp
State after:
no goals

State before:
F : Type u_1
inst✝⁵ : LogicalConnective F
inst✝⁴ : DecidableEq F
S : Type u_2
inst✝³ : System F S
𝓢 : S
inst✝² : Minimal 𝓢
q✝ r : F
Γ Δ✝ : List F
inst✝¹ : System.NegationEquiv 𝓢
inst✝ : HasEFQ 𝓢
q : F
Δ : List F
hΔ : Δ ≠ []
ih : (∀ q_1 ∈ Δ, q_1 = q) → 𝓢 ⊢! Δ.disj' ⟶ q
hd : q = q ∧ ∀ a ∈ Δ, a = q
hd₂ : ∀ a ∈ Δ, a = q
⊢ [] ⊆ [q ⋎ Δ.disj']
Tactic:
simp
State after:
no goals