Theory ND_Compl_SC

subsection‹An alternate proof of ND completeness›
theory ND_Compl_SC
imports SC_Sema ND_Sound SCND Compactness
begin

lemma ND_sound_complete_countable:
  fixes Γ :: "'a :: countable formula set"
  shows "Γ ⊢ F ⟷ Γ ⊫ F" (is "?n ⟷ ?s")
proof
  assume ?n thus ?s by (fact ND_sound)
next
  assume s: ?s
  with compact_entailment obtain Γ' where 0: "finite Γ'" "Γ' ⊫ F" "Γ' ⊆ Γ" 
    unfolding entailment_def by metis
  then obtain Γ'' where Γ'': "Γ' = set_mset Γ''" using finite_set_mset_mset_set by blast
  have su: "set_mset Γ'' ⊆ Γ" using 0  Γ'' by fast
  from 0 have "⊨ Γ'' ⇒ {#F#}" unfolding sequent_semantics_def entailment_def Γ'' by simp
  with SC_sound_complete have "Γ'' ⇒ {#F#}" by blast
  with SCND have "set_mset Γ'' ∪ ¬ ` set_mset {#F#} ⊢ ⊥" .
  thus ?n using ND.CC Weaken[OF _ su[THEN insert_mono]] by force
qed
  
text‹If you do not like the requirement that our atoms are countable,
you can also restrict yourself to a finite set of assumptions.›
  
lemma ND_sound_complete_finite:
  assumes "finite Γ"
  shows "Γ ⊢ F ⟷ Γ ⊫ F" (is "?n ⟷ ?s")
proof
  assume ?n thus ?s by (fact ND_sound)
next
  assume s: ?s
  then obtain Γ'' where Γ'': "Γ = set_mset Γ''" using finite_set_mset_mset_set assms by blast
  have su: "set_mset Γ'' ⊆ Γ" using Γ'' by fast
  have "⊨ Γ'' ⇒ {#F#}" using s unfolding sequent_semantics_def entailment_def Γ'' by auto
  with SC_sound_complete have "Γ'' ⇒ {#F#}" by blast
  with SCND have "set_mset Γ'' ∪ ¬ ` set_mset {#F#} ⊢ ⊥" .
  thus ?n using ND.CC Weaken[OF _ su[THEN insert_mono]] by force
qed

end