Theory Partial_And_Total_Herbrand_Interpretation

theory Partial_And_Total_Herbrand_Interpretation
  imports Partial_Herbrand_Interpretation
    Ordered_Resolution_Prover.Herbrand_Interpretation
begin

section Bridging of total and partial Herbrand interpretation

text This theory has mostly be written as a sanity check between the two entailment notion.
definition partial_model_of :: 'a interp  'a partial_interp where
partial_model_of I = Pos ` I  Neg ` {x. x  I}

definition total_model_of :: 'a partial_interp  'a interp where
total_model_of I = {x. Pos x  I}

lemma total_over_set_partial_model_of:
  total_over_set (partial_model_of I) UNIV
  unfolding total_over_set_def
  by (auto simp: partial_model_of_def)

lemma consistent_interp_partial_model_of:
  consistent_interp (partial_model_of I)
  unfolding consistent_interp_def
  by (auto simp: partial_model_of_def)

lemma consistent_interp_alt_def:
  consistent_interp I  (L. ¬(Pos L  I  Neg L  I))
  unfolding consistent_interp_def
  by (metis literal.exhaust uminus_Neg uminus_of_uminus_id)

context
  fixes I :: 'a partial_interp
  assumes cons: consistent_interp I
begin

lemma partial_implies_total_true_cls_total_model_of:
  assumes Partial_Herbrand_Interpretation.true_cls I C
  shows Herbrand_Interpretation.true_cls (total_model_of I) C
  using assms cons apply -
  unfolding total_model_of_def Partial_Herbrand_Interpretation.true_cls_def
    Herbrand_Interpretation.true_cls_def consistent_interp_alt_def
  by (rule bexE, assumption)
    (case_tac x; auto)


lemma total_implies_partial_true_cls_total_model_of:
  assumes Herbrand_Interpretation.true_cls (total_model_of I) C and
   total_over_set I (atms_of C)
  shows Partial_Herbrand_Interpretation.true_cls I C
  using assms cons
  unfolding total_model_of_def Partial_Herbrand_Interpretation.true_cls_def
    Herbrand_Interpretation.true_cls_def consistent_interp_alt_def
    total_over_m_def total_over_set_def
  by (auto simp: atms_of_def dest: multi_member_split)


lemma partial_implies_total_true_clss_total_model_of:
  assumes Partial_Herbrand_Interpretation.true_clss I C
  shows Herbrand_Interpretation.true_clss (total_model_of I) C
  using assms cons
  unfolding Partial_Herbrand_Interpretation.true_clss_def
    Herbrand_Interpretation.true_clss_def
  by (auto simp: partial_implies_total_true_cls_total_model_of)

lemma total_implies_partial_true_clss_total_model_of:
  assumes Herbrand_Interpretation.true_clss (total_model_of I) C and
    total_over_m I C
  shows Partial_Herbrand_Interpretation.true_clss I C
  using assms cons mk_disjoint_insert
  unfolding Partial_Herbrand_Interpretation.true_clss_def
    Herbrand_Interpretation.true_clss_def
    total_over_set_def
  by (fastforce simp: total_implies_partial_true_cls_total_model_of
      dest: multi_member_split)

end

lemma total_implies_partial_true_cls_partial_model_of:
  assumes Herbrand_Interpretation.true_cls I C
  shows Partial_Herbrand_Interpretation.true_cls (partial_model_of I) C
  using assms apply -
  unfolding partial_model_of_def Partial_Herbrand_Interpretation.true_cls_def
    Herbrand_Interpretation.true_cls_def consistent_interp_alt_def
  by (rule bexE, assumption)
    (case_tac x; auto)


lemma total_implies_partial_true_clss_partial_model_of:
  assumes Herbrand_Interpretation.true_clss I C
  shows Partial_Herbrand_Interpretation.true_clss (partial_model_of I) C
  using assms
  unfolding Partial_Herbrand_Interpretation.true_clss_def
    Herbrand_Interpretation.true_clss_def
  by (auto simp: total_implies_partial_true_cls_partial_model_of)

lemma partial_total_satisfiable_iff:
  Partial_Herbrand_Interpretation.satisfiable N  Herbrand_Interpretation.satisfiable N
  by (meson consistent_interp_partial_model_of partial_implies_total_true_clss_total_model_of
    satisfiable_carac total_implies_partial_true_clss_partial_model_of)

end