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