Theory SC_Compl_Consistency
theory SC_Compl_Consistency
imports Consistency SC_Cut SC_Sema
begin
context begin
private lemma reasonable:
"∀Γ'. F ▹ set_mset Γ = set_mset Γ' ⟶ P Γ' ⟹ P (F, Γ)"
"∀Γ'. F ▹ G ▹ set_mset Γ = set_mset Γ' ⟶ P Γ' ⟹ P (F, G, Γ)" by simp_all
lemma SC_consistent: "pcp {set_mset Γ| Γ. ¬(Γ ⇒ {#})}"
unfolding pcp_def
apply(intro ballI conjI; erule contrapos_pp; clarsimp; ((drule reasonable)+)?)
apply(auto dest!: NotL_inv AndL_inv OrL_inv ImpL_inv NotR_inv AndR_inv OrR_inv ImpR_inv multi_member_split contractL contractR intro!: SCp.intros(3-) intro: contractR contractL)
apply (metis add_mset_commute contract)
done
end
lemma
fixes Γ Δ :: "'a :: countable formula multiset"
shows "⊨ Γ ⇒ Δ ⟹ Γ ⇒ Δ"
proof(erule contrapos_pp)
have NotInv: "Γ + image_mset Not Δ ⇒ {#} ⟹ Γ ⇒ Δ"
by (induction Δ arbitrary: Γ; simp add: NotL_inv)
assume ‹¬ Γ ⇒ Δ›
hence ‹¬ Γ + image_mset Not Δ ⇒ {#}› using NotInv by blast
with pcp_sat[OF SC_consistent]
have "sat (set_mset (Γ + image_mset ❙¬ Δ))" by blast
thus ‹¬ (⊨ Γ ⇒ Δ)› unfolding sat_def sequent_semantics_def not_all by (force elim!: ex_forward)
qed
end