Theory MiniSC_HC
subsubsection‹SC to HC›
theory MiniSC_HC
imports MiniSC HC
begin
inductive_set AX1 where
"F ∈ AX0 ⟹ F ∈ AX1" |
"((F ❙→ ⊥) ❙→ ⊥) ❙→ F ∈ AX1"
lemma AX01: "AX0 ⊆ AX1" by (simp add: AX1.intros(1) subsetI)
lemma AX1_away: "AX1 ∪ Γ = AX0 ∪ (Γ ∪ AX1)" using AX01 by blast
lemma Deduction1: "F ▹ (AX1 ∪ Γ ) ⊢⇩H ⊥ ⟷ (AX1 ∪ Γ) ⊢⇩H (F ❙→ ⊥)" unfolding AX1_away by (metis Deduction_theorem HC.simps HC_mono Un_commute Un_insert_left insertI1 subset_insertI)
lemma Deduction2: "(F ❙→ ⊥) ▹ (AX1 ∪ Γ) ⊢⇩H ⊥ ⟷ (AX1 ∪ Γ) ⊢⇩H F" (is "?l ⟷ ?r")
proof
assume l: ?l
with Deduction_theorem[where Γ="AX1 ∪ Γ" and F="F ❙→ ⊥" and G=⊥]
have "AX1 ∪ Γ ⊢⇩H (F ❙→ ⊥) ❙→ ⊥" unfolding AX1_away by(simp add: Un_commute)
moreover have "AX1 ∪ Γ ⊢⇩H ((F ❙→ ⊥) ❙→ ⊥) ❙→ F" using AX1.intros(2) HC.Ax by blast
ultimately show ?r using HC.MP by blast
next
assume r: ?r thus ?l by (meson HC.simps HC_mono insertI1 subset_insertI)
qed
lemma
"Γ ⇒ Δ ⟹ is_mini_mset Γ ⟹ is_mini_mset Δ ⟹
(set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1) ⊢⇩H ⊥"
proof(induction "Γ" "Δ" rule: SCp.induct)
case (ImpL Γ F Δ G)
from ImpL.prems have "is_mini_mset Γ" "is_mini_mset (F, Δ)" by simp_all
with ImpL.IH(1) have IH1: "set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset (F, Δ) ∪ AX1 ⊢⇩H ⊥" .
hence IH1: "F ❙→ ⊥ ▹ set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1 ⊢⇩H ⊥" by simp
from ImpL.prems have "is_mini_mset (G, Γ)" "is_mini_mset Δ" by simp_all
with ImpL.IH(2) have IH2: "set_mset (G, Γ) ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1 ⊢⇩H ⊥" .
hence IH2: "G ▹ (set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1) ⊢⇩H ⊥" by simp
have R: "F ❙→ G ▹ AX1 ∪ Γ ⊢⇩H ⊥" if "G ▹ AX1 ∪ Γ ⊢⇩H ⊥" "F ❙→ ⊥ ▹ AX1 ∪ Γ ⊢⇩H ⊥" for Γ
using that by (metis Ax Deduction1 Deduction2 HC_mono MP insertI1 subset_insertI)
from R[where Γ="set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ"]
have "F ❙→ G ▹ (set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1) ⊢⇩H ⊥" using IH2 IH1 by(simp add: Un_commute)
thus ?case by simp
next
case (ImpR F Γ G Δ)
hence "is_mini_mset (F, Γ)" "is_mini_mset (G, Δ)" by simp_all
with ImpR.IH have IH: "F ▹ G ❙→ ⊥ ▹ set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ ∪ AX1 ⊢⇩H ⊥" by(simp add: insert_commute)
have R: "(F ❙→ G) ❙→ ⊥ ▹ Γ ∪ AX1 ⊢⇩H ⊥" if "F ▹ G ❙→ ⊥ ▹ Γ ∪ AX1 ⊢⇩H ⊥" for Γ using that
by (metis AX1_away Deduction2 Deduction_theorem Un_commute Un_insert_right)
thus ?case using IH by simp
next
case (Ax k Γ Δ)
have R: "F ▹ F ❙→ ⊥ ▹ Γ ∪ AX1 ⊢⇩H ⊥" for F :: "'a formula" and Γ by (meson HC.simps insert_iff)
from R[where F="Atom k" and Γ="set_mset Γ ∪ (λF. F ❙→ ⊥) ` set_mset Δ"] show ?case using Ax.hyps
by (simp add: insert_absorb)
next
case BotL thus ?case by (simp add: HC.Ax)
qed simp_all
end