internlm/Lean-Github huggingface dataset:
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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
h : q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'

case neg
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
h : ¬q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'
Tactic:
. subst_vars; simp;
Proof state after:
case neg
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
h : ¬q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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
h : ¬q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'
Tactic:
. simp [(List.remove_singleton_of_ne h)];
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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
h : q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'
Tactic:
subst_vars
Proof state after:
case pos
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
⊢ 𝓢 ⊢! q ⟶ q ⋎ (List.remove q [q]).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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
⊢ 𝓢 ⊢! q ⟶ q ⋎ (List.remove q [q]).disj'
Tactic:
simp
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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
h : ¬q = p
⊢ 𝓢 ⊢! q ⟶ p ⋎ (List.remove p [q]).disj'
Tactic:
simp [(List.remove_singleton_of_ne h)]
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof 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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
⊢ 𝓢 ⊢! (q :: Γ).disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
simp [(List.disj'_cons_nonempty h)]
Proof 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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Theorem: LO.System.forthback_disj'_remove
Proof 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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
by_cases hpq : q = p
Proof state after:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'

case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'

case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
. simp_all only [ne_eq, List.remove_cons_self]; exact disj₃''! disj₁! ih;
Proof state after:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
. simp_all [(List.remove_cons_of_ne Γ hpq)];
  by_cases hqΓ : Γ.remove p = [];
  . simp_all;
    exact disj₃''! disj₂! (imp_trans! ih $ or_replace_right! efq!);
  . simp [(List.disj'_cons_nonempty hqΓ)];
    exact disj₃''! (imp_trans! disj₁! disj₂!) (imp_trans! ih (or_replace_right! disj₂!));
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
simp_all only [ne_eq, List.remove_cons_self]
Proof state after:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : q = p
⊢ 𝓢 ⊢! p ⋎ Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : q = p
⊢ 𝓢 ⊢! p ⋎ Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
Tactic:
exact disj₃''! disj₁! ih
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (List.remove p (q :: Γ)).disj'
Tactic:
simp_all [(List.remove_cons_of_ne Γ hpq)]
Proof state after:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Tactic:
by_cases hqΓ : Γ.remove p = []
Proof state after:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'

case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'

case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Tactic:
. simp_all;
  exact disj₃''! disj₂! (imp_trans! ih $ or_replace_right! efq!);
Proof state after:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Tactic:
. simp [(List.disj'_cons_nonempty hqΓ)];
  exact disj₃''! (imp_trans! disj₁! disj₂!) (imp_trans! ih (or_replace_right! disj₂!));
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Tactic:
simp_all
Proof state after:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ ⊥
hpq : ¬q = p
hqΓ : List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ q
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case pos
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ ⊥
hpq : ¬q = p
hqΓ : List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ q
Tactic:
exact disj₃''! disj₂! (imp_trans! ih $ or_replace_right! efq!)
Proof state after:
no goals
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ (q :: List.remove p Γ).disj'
Tactic:
simp [(List.disj'_cons_nonempty hqΓ)]
Proof state after:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ q ⋎ (List.remove p Γ).disj'
Theorem: LO.System.forthback_disj'_remove
Proof state before:
case neg
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 : 𝓢 ⊢! Γ.disj' ⟶ p ⋎ (List.remove p Γ).disj'
hpq : ¬q = p
hqΓ : ¬List.remove p Γ = []
⊢ 𝓢 ⊢! q ⋎ Γ.disj' ⟶ p ⋎ q ⋎ (List.remove p Γ).disj'
Tactic:
exact disj₃''! (imp_trans! disj₁! disj₂!) (imp_trans! ih (or_replace_right! disj₂!))
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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!
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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!]
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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!]
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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Δ]
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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₁
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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
Proof 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
Theorem: LO.System.disj_allsame!
Proof 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!
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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
Proof state after:
no goals
Theorem: LO.System.disj_allsame!
Proof 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
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.TrivTranslation.degree_zero
Proof state before:
α : Sort ?u.30342
inst✝ : DecidableEq α
α✝ : Type u_1
p : Formula α✝
⊢ pᵀ.degree = 0
Tactic:
induction p <;> simp [TrivTranslation, degree, *]
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.TrivTranslation.back
Proof state before:
α : Sort ?u.34638
inst✝ : DecidableEq α
α✝ : Type u_1
p : Formula α✝
⊢ (pᵀᴾ) ⋯ᴹ = pᵀ
Tactic:
induction p using rec' <;> simp [Superintuitionistic.Formula.toModalFormula, TrivTranslation, *]
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.VerTranslation.degree_zero
Proof state before:
α : Sort ?u.42106
inst✝ : DecidableEq α
α✝ : Type u_1
p : Formula α✝
⊢ pⱽ.degree = 0
Tactic:
induction p <;> simp [degree, *]
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.VerTranslation.back
Proof state before:
α : Sort ?u.44261
inst✝ : DecidableEq α
α✝ : Type u_1
p : Formula α✝
⊢ (pⱽᴾ) ⋯ᴹ = pⱽ
Tactic:
induction p using rec' with
| hbox _ => simp [VerTranslation, toPropFormula, Superintuitionistic.Formula.toModalFormula];
| _ => simp [VerTranslation, toPropFormula, Superintuitionistic.Formula.toModalFormula, *];
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.VerTranslation.back
Proof state before:
case hbox
α : Sort ?u.44261
inst✝ : DecidableEq α
α✝ : Type u_1
p✝ : Formula α✝
a✝ : (p✝ⱽᴾ) ⋯ᴹ = p✝ⱽ
⊢ ((□p✝)ⱽᴾ) ⋯ᴹ = (□p✝)ⱽ
Tactic:
simp [VerTranslation, toPropFormula, Superintuitionistic.Formula.toModalFormula]
Proof state after:
no goals
Theorem: LO.Modal.Standard.Formula.VerTranslation.back
Proof state before:
case hor
α : Sort ?u.44261
inst✝ : DecidableEq α
α✝ : Type u_1
p✝ q✝ : Formula α✝
a✝¹ : (p✝ⱽᴾ) ⋯ᴹ = p✝ⱽ
a✝ : (q✝ⱽᴾ) ⋯ᴹ = q✝ⱽ
⊢ ((p✝ ⋎ q✝)ⱽᴾ) ⋯ᴹ = (p✝ ⋎ q✝)ⱽ
Tactic:
simp [VerTranslation, toPropFormula, Superintuitionistic.Formula.toModalFormula, *]
Proof state after:
no goals