Theorem: LO.System.id_conj'! (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 𝓢
he : ∀ g ∈ Γ, g = p
⊢ 𝓢 ⊢! p ⟶ Γ.conj'
Tactic:
induction Γ using List.induction_with_singleton with
| hnil => simp_all only [List.conj'_nil, IsEmpty.forall_iff, forall_const]; exact dhyp! $ verum!;
| hsingle => simp_all only [List.mem_singleton, forall_eq, List.conj'_singleton, imp_id!];
| hcons r Γ h ih =>
  simp [List.conj'_cons_nonempty h];
  simp at he;
  have ⟨he₁, he₂⟩ := he;
  subst he₁;
  exact implyRightAnd! imp_id! (ih he₂);
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 𝓢
he : ∀ g ∈ [], g = p
⊢ 𝓢 ⊢! p ⟶ [].conj'
Tactic:
simp_all only [List.conj'_nil, IsEmpty.forall_iff, forall_const]
State after:
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 𝓢
he : ∀ g ∈ [], g = p
⊢ 𝓢 ⊢! p ⟶ ⊤

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 𝓢
he : ∀ g ∈ [], g = p
⊢ 𝓢 ⊢! p ⟶ ⊤
Tactic:
exact dhyp! $ verum!
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 𝓢
a✝ : F
he : ∀ g ∈ [a✝], g = p
⊢ 𝓢 ⊢! p ⟶ [a✝].conj'
Tactic:
simp_all only [List.mem_singleton, forall_eq, List.conj'_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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : ∀ g ∈ r :: Γ, g = p
⊢ 𝓢 ⊢! p ⟶ (r :: Γ).conj'
Tactic:
simp [List.conj'_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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : ∀ g ∈ r :: Γ, g = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'

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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : ∀ g ∈ r :: Γ, g = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'
Tactic:
simp at he
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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : r = p ∧ ∀ a ∈ Γ, a = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'

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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : r = p ∧ ∀ a ∈ Γ, a = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'
Tactic:
have ⟨he₁, he₂⟩ := he
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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : r = p ∧ ∀ a ∈ Γ, a = p
he₁ : r = p
he₂ : ∀ a ∈ Γ, a = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'

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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = p) → 𝓢 ⊢! p ⟶ Γ.conj'
he : r = p ∧ ∀ a ∈ Γ, a = p
he₁ : r = p
he₂ : ∀ a ∈ Γ, a = p
⊢ 𝓢 ⊢! p ⟶ r ⋏ Γ.conj'
Tactic:
subst he₁
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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = r) → 𝓢 ⊢! r ⟶ Γ.conj'
he : r = r ∧ ∀ a ∈ Γ, a = r
he₂ : ∀ a ∈ Γ, a = r
⊢ 𝓢 ⊢! r ⟶ r ⋏ Γ.conj'

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 𝓢
r : F
Γ : List F
h : Γ ≠ []
ih : (∀ g ∈ Γ, g = r) → 𝓢 ⊢! r ⟶ Γ.conj'
he : r = r ∧ ∀ a ∈ Γ, a = r
he₂ : ∀ a ∈ Γ, a = r
⊢ 𝓢 ⊢! r ⟶ r ⋏ Γ.conj'
Tactic:
exact implyRightAnd! imp_id! (ih he₂)
State after:
no goals