Theory Reduced_MLSS_Formula_Singleton_Model_Property
theory Reduced_MLSS_Formula_Singleton_Model_Property
imports Syntactic_Description Place_Realisation MLSSmf_to_MLSS
begin
locale satisfiable_normalized_MLSS_clause_with_vars_for_proper_Venn_regions =
satisfiable_normalized_MLSS_clause π π for π π +
fixes U :: "'a set"
assumes U_subset_V: "U β V"
and no_overlap_within_U: "β¦uβ©1 β U; uβ©2 β U; uβ©1 β uβ©2β§ βΉ π uβ©1 β π uβ©2 = 0"
and U_collect_places_neq: "AF (Var x =β©s Var y) β π βΉ
βL M. L β U β§ M β U β§ π x = β¨HF (π ` L) β§ π y = β¨HF (π ` M)"
and U_collect_places_single: "AT (Var x =β©s Single (Var y)) β π βΉ
βL M. L β U β§ M β U β§ π x = β¨HF (π ` L) β§ π y = β¨HF (π ` M)"
begin
interpretation π
: adequate_place_framework π PI atβ©p
using syntactic_description_is_adequate by blast
lemma fact_1:
assumes "uβ©1 β U"
and "uβ©2 β U"
and "uβ©1 β uβ©2"
and "Ο β PI"
shows "Β¬ (Ο uβ©1 β§ Ο uβ©2)"
proof (rule ccontr)
assume "Β¬ Β¬ (Ο uβ©1 β§ Ο uβ©2)"
then have "Ο uβ©1" "Ο uβ©2" by blast+
from βΉΟ β PIβΊ obtain Ο where "Ο β Ξ£" "Ο = ΟβΟβ" by auto
then have "Ο β 0" by fastforce
from βΉΟ = ΟβΟββΊ βΉΟ uβ©1βΊ βΉΟ uβ©2βΊ have "Ο β€ π uβ©1" "Ο β€ π uβ©2" by simp+
with βΉΟ β 0βΊ have "π uβ©1 β π uβ©2 β 0" by blast
with no_overlap_within_U show False
using βΉuβ©1 β UβΊ βΉuβ©2 β UβΊ βΉuβ©1 β uβ©2βΊ by blast
qed
fun place_eq :: "('a β bool) β ('a β bool) β bool" where
"place_eq Οβ©1 Οβ©2 β· (βx β V. Οβ©1 x = Οβ©2 x)"
fun place_sim :: "('a β bool) β ('a β bool) β bool" (infixl "βΌ" 50) where
"place_sim Οβ©1 Οβ©2 β· place_eq Οβ©1 Οβ©2 β¨ (βu β U. Οβ©1 u β§ Οβ©2 u)"
abbreviation "rel_place_sim β‘ {(Οβ©1, Οβ©2) β PI Γ PI. Οβ©1 βΌ Οβ©2}"
lemma place_sim_rel_equiv_on_PI: "equiv PI rel_place_sim"
proof (rule equivI)
have "rel_place_sim β PI Γ PI" by blast
moreover
have "(Ο, Ο) β rel_place_sim" if "Ο β PI" for Ο
using that by fastforce
ultimately
show "refl_on PI rel_place_sim" using refl_onI by blast
show "sym rel_place_sim"
proof (rule symI)
fix Οβ©1 Οβ©2 assume "(Οβ©1, Οβ©2) β rel_place_sim"
then have "Οβ©1 β PI" "Οβ©2 β PI" "Οβ©1 βΌ Οβ©2" by blast+
then show "(Οβ©2, Οβ©1) β rel_place_sim" by auto
qed
show "trans rel_place_sim"
proof (rule transI)
fix Οβ©1 Οβ©2 Οβ©3
assume "(Οβ©1, Οβ©2) β rel_place_sim" "(Οβ©2, Οβ©3) β rel_place_sim"
then have "Οβ©1 β PI" "Οβ©2 β PI" "Οβ©3 β PI" "Οβ©1 βΌ Οβ©2" "Οβ©2 βΌ Οβ©3" by blast+
then consider "place_eq Οβ©1 Οβ©2 β§ place_eq Οβ©2 Οβ©3" | "place_eq Οβ©1 Οβ©2 β§ (βu β U. Οβ©2 u β§ Οβ©3 u)"
| "(βu β U. Οβ©1 u β§ Οβ©2 u) β§ place_eq Οβ©2 Οβ©3" | "(βu β U. Οβ©1 u β§ Οβ©2 u) β§ (βu β U. Οβ©2 u β§ Οβ©3 u)"
by auto
then have "Οβ©1 βΌ Οβ©3"
proof (cases)
case 1
then have "place_eq Οβ©1 Οβ©3" by auto
then show ?thesis by auto
next
case 2
then obtain u where "u β U" "Οβ©2 u" "Οβ©3 u" by blast
with U_subset_V have "u β V" by blast
with 2 have "Οβ©1 u β· Οβ©2 u" by force
with βΉΟβ©2 uβΊ have "Οβ©1 u" by blast
with βΉu β UβΊ βΉΟβ©3 uβΊ
show ?thesis by auto
next
case 3
then obtain u where "u β U" "Οβ©1 u" "Οβ©2 u" by blast
with U_subset_V have "u β V" by blast
with 3 have "Οβ©2 u β· Οβ©3 u" by force
with βΉΟβ©2 uβΊ have "Οβ©3 u" by blast
with βΉu β UβΊ βΉΟβ©1 uβΊ
show ?thesis by auto
next
case 4
then obtain uβ©1 uβ©2 where "uβ©1 β U" "Οβ©1 uβ©1" "Οβ©2 uβ©1" and "uβ©2 β U" "Οβ©2 uβ©2" "Οβ©3 uβ©2"
by blast
with fact_1 have "uβ©1 = uβ©2"
using βΉΟβ©2 β PIβΊ by blast
with βΉΟβ©3 uβ©2βΊ have "Οβ©3 uβ©1" by blast
with βΉΟβ©1 uβ©1βΊ βΉuβ©1 β UβΊ show ?thesis
by auto
qed
with βΉΟβ©1 β PIβΊ βΉΟβ©2 β PIβΊ βΉΟβ©3 β PIβΊ
show "(Οβ©1, Οβ©3) β rel_place_sim" by blast
qed
qed
lemma refl_sim:
assumes "a β PI"
and "b β PI"
and "a βΌ b"
shows "b βΌ a"
using assms by auto
lemma trans_sim:
assumes "a β PI"
and "b β PI"
and "c β PI"
and "a βΌ b"
and "b βΌ c"
shows "a βΌ c"
proof -
from assms have "(a, b) β rel_place_sim" "(b, c) β rel_place_sim"
by blast+
with place_sim_rel_equiv_on_PI have "(a, c) β rel_place_sim"
using equivE transE
by (smt (verit, ccfv_SIG))
then show "a βΌ c" by blast
qed
lemma fact_2:
assumes "x β V"
and exL: "βL β U. π x = β¨HF (π ` L)"
and "Οβ©1 β PI"
and "Οβ©2 β PI"
and "Οβ©1 βΌ Οβ©2"
shows "Οβ©1 x β· Οβ©2 x"
proof (cases "place_eq Οβ©1 Οβ©2")
case True
with βΉx β VβΊ show ?thesis by force
next
case False
with βΉΟβ©1 βΌ Οβ©2βΊ obtain u where "u β U" "Οβ©1 u" "Οβ©2 u" by auto
from exL obtain L where "L β U" "π x = β¨HF (π ` L)" by blast
from βΉL β UβΊ U_subset_V finite_V have "finite L"
by (simp add: finite_subset)
have "Ο x β· u β L" if "Ο u" "Ο β PI" for Ο
proof -
from βΉΟ β PIβΊ obtain Ο where "Ο = ΟβΟβ" "Ο β Ξ£" by auto
with βΉΟ uβΊ have "Ο β€ π u"
using βΉu β UβΊ U_subset_V by auto
have "Ο β€ π x β· u β L"
proof (standard)
assume "Ο β€ π x"
{assume "u β L"
then have "βv β L. v β u" by blast
with no_overlap_within_U have "βv β L. π v β π u = 0"
using βΉL β UβΊ βΉu β UβΊ by auto
with βΉΟ β€ π uβΊ have "βv β L. π v β Ο = 0" by blast
then have "β¨HF (π ` L) β Ο = 0"
using finite_V U_subset_V βΉL β UβΊ by auto
with βΉπ x = β¨HF (π ` L)βΊ have "π x β Ο = 0" by argo
with βΉΟ β€ π xβΊ have False
using βΉΟ β Ξ£βΊ mem_Ξ£_not_empty by blast
}
then show "u β L" by blast
next
assume "u β L"
with βΉΟ β€ π uβΊ have "Ο β€ β¨HF (π ` L)"
using βΉfinite LβΊ by force
with βΉπ x = β¨HF (π ` L)βΊ show "Ο β€ π x" by simp
qed
with βΉΟ = ΟβΟββΊ show "Ο x β· u β L"
using βΉx β VβΊ associated_place.simps by blast
qed
with βΉΟβ©1 β PIβΊ βΉΟβ©1 uβΊ βΉΟβ©2 β PIβΊ βΉΟβ©2 uβΊ
have "Οβ©1 x β· u β L" "Οβ©2 x β· u β L" by blast+
then show ?thesis by blast
qed
lemma U_collect_places_single': "y β W βΉ βL. L β U β§ π y = β¨HF (π ` L)"
using U_collect_places_single
by (meson memW_E)
definition PI' :: "('a β bool) set" where
"PI' β‘ (Ξ»Οs. SOME Ο. Ο β Οs) ` (PI // rel_place_sim)"
definition rep :: "('a β bool) β ('a β bool)" where
"rep Ο = (SOME Ο'. Ο' β rel_place_sim `` {Ο})"
lemma range_rep:
assumes "Ο β PI"
shows "rep Ο β PI'"
using assms
unfolding PI'_def rep_def
using quotientI[where ?x = Ο and ?A = PI and ?r = rel_place_sim]
by blast
lemma PI'_eq_image_of_rep_on_PI: "PI' = rep ` PI"
proof (standard; standard)
fix Ο assume "Ο β PI'"
then obtain Οs where "Οs β PI // rel_place_sim" "Ο = (SOME Ο. Ο β Οs)"
unfolding PI'_def by blast
then obtain Οβ©0 where "Οs = rel_place_sim `` {Οβ©0}" "Οβ©0 β PI"
using quotientE[where ?A = PI and ?r = rel_place_sim and ?X = Οs]
by blast
with βΉΟ = (SOME Ο. Ο β Οs)βΊ have "Ο = rep Οβ©0"
unfolding rep_def by blast
with βΉΟβ©0 β PIβΊ show "Ο β rep ` PI" by blast
next
fix Ο assume "Ο β rep ` PI"
then obtain Οβ©0 where "Οβ©0 β PI" "Ο = rep Οβ©0" by blast
then show "Ο β PI'" using range_rep by blast
qed
lemma rep_sim:
assumes "Ο β PI"
shows "Ο βΌ rep Ο"
and "rep Ο βΌ Ο"
proof -
from βΉΟ β PIβΊ have "Ο β rel_place_sim `` {Ο}" by fastforce
then obtain Ο' where "Ο' = rep Ο" by blast
with someI[of "Ξ»x. x β rel_place_sim `` {Ο}"] have "Ο' β rel_place_sim `` {Ο}"
using βΉΟ β rel_place_sim `` {Ο}βΊ
unfolding rep_def by fast
with βΉΟ' = rep ΟβΊ show "Ο βΌ rep Ο" by fast
with place_sim_rel_equiv_on_PI show "rep Ο βΌ Ο"
by (metis (full_types) place_eq.simps place_sim.elims(1))
qed
lemma PI'_subset_PI: "PI' β PI"
unfolding PI'_def
using equiv_Eps_preserves place_sim_rel_equiv_on_PI by blast
lemma sim_self:
assumes "Ο β PI'"
and "Ο' β PI'"
and "Ο βΌ Ο'"
shows "Ο' = Ο"
proof -
from βΉΟ βΌ Ο'βΊ have "(Ο, Ο') β rel_place_sim"
using βΉΟ β PI'βΊ βΉΟ' β PI'βΊ PI'_subset_PI by blast
from βΉΟ β PI'βΊ obtain Οs where "Οs β PI // rel_place_sim" "Ο = (SOME Ο. Ο β Οs)"
unfolding PI'_def by blast
then have "Ο β Οs"
using equiv_Eps_in place_sim_rel_equiv_on_PI by blast
from βΉΟ' β PI'βΊ obtain Οs' where "Οs' β PI // rel_place_sim" "Ο' = (SOME Ο. Ο β Οs')"
unfolding PI'_def by blast
then have "Ο' β Οs'"
using equiv_Eps_in place_sim_rel_equiv_on_PI by blast
from place_sim_rel_equiv_on_PI βΉΟs β PI // rel_place_simβΊ βΉΟs' β PI // rel_place_simβΊ
βΉΟ β ΟsβΊ βΉΟ' β Οs'βΊ βΉ(Ο, Ο') β rel_place_simβΊ
have "Οs = Οs'"
using quotient_eqI[where ?A = PI and ?r = rel_place_sim and ?x = Ο and ?X = Οs and ?y = Ο' and ?Y = Οs']
by fast
with βΉΟ = (SOME Ο. Ο β Οs)βΊ βΉΟ' = (SOME Ο. Ο β Οs')βΊ show "Ο' = Ο"
by auto
qed
fun atβ©p_f' :: "'a β ('a β bool)" where
"atβ©p_f' w = rep (atβ©p_f w)"
definition "atβ©p' = {(y, atβ©p_f' y)|y. y β W}"
declare atβ©p'_def [simp]
lemma range_atβ©p_f':
assumes "w β W"
shows "atβ©p_f' w β PI'"
proof -
from βΉw β WβΊ range_atβ©p_f have "atβ©p_f w β PI" by blast
then have "rel_place_sim `` {atβ©p_f w} β PI // rel_place_sim"
using quotientI by fast
then show ?thesis unfolding PI'_def
apply (simp only: atβ©p_f'.simps rep_def)
by (smt (verit, best) Eps_cong atβ©p_f'.elims image_insert insert_iff mk_disjoint_insert)
qed
lemma rep_at:
assumes "Ο β PI"
and "(y, Ο) β atβ©p"
shows "(y, rep Ο) β atβ©p'"
proof -
from βΉ(y, Ο) β atβ©pβΊ have "atβ©p_f y = Ο" by auto
from βΉ(y, Ο) β atβ©pβΊ have "y β W" by auto
with W_subset_V have "y β V" by fast
from βΉ(y, Ο) β atβ©pβΊ obtain x where "AT (Var x =β©s Single (Var y)) β π" "x β V"
using memW_E by fastforce
with U_collect_places_single have "βL. L β U β§ π x = β¨HF (π ` L)" by meson
with fact_2 have "Οβ©1 x β· Οβ©2 x" if "Οβ©1 βΌ Οβ©2" "Οβ©1 β PI" "Οβ©2 β PI" for Οβ©1 Οβ©2
using βΉx β VβΊ that by blast
with rep_sim have "(rep Ο) x β· Ο x"
using PI'_subset_PI βΉΟ β PIβΊ range_rep by blast
from π
.C5_1[where ?x = x and ?y = y] have "Ο x" "βΟ'βPI. Ο' β Ο βΆ Β¬ Ο' x"
using βΉAT (Var x =β©s Single (Var y)) β πβΊ βΉ(y, Ο) β atβ©pβΊ by fastforce+
from βΉΟ xβΊ βΉ(rep Ο) x β· Ο xβΊ have "(rep Ο) x" by blast
with βΉβΟ'βPI. Ο' β Ο βΆ Β¬ Ο' xβΊ have "rep Ο = Ο"
using range_rep PI'_subset_PI βΉΟ β PIβΊ by blast
then have "atβ©p_f' y = rep Ο"
using βΉatβ©p_f y = ΟβΊ by (simp only: atβ©p_f'.simps)
then show "(y, rep Ο) β atβ©p'"
using βΉy β WβΊ
by (metis (mono_tags, lifting) atβ©p'_def mem_Collect_eq)
qed
interpretation π
': adequate_place_framework π PI' atβ©p'
proof -
from PI'_subset_PI π
.PI_subset_places_V
have PI'_subset_places_V: "PI' β places V" by blast
have dom_atβ©p': "Domain atβ©p' = W" by auto
have range_atβ©p': "Range atβ©p' β PI'"
proof -
{fix y lt assume "lt β π" "y β singleton_vars lt"
then have "rep (atβ©p_f y) β PI'"
using range_atβ©p_f[of y] range_rep[of "atβ©p_f y"]
by blast
}
then show ?thesis by auto
qed
from π
.single_valued_atβ©p
have single_valued_atβ©p': "single_valued atβ©p'"
unfolding single_valued_def atβ©p'_def
apply (simp only: atβ©p_f'.simps)
by blast
from PI'_subset_PI have "place_membership π PI' β place_membership π PI" by auto
with π
.membership_irreflexive have membership_irreflexive:
"(Ο, Ο) β place_membership π PI'" for Ο
by blast
from PI'_subset_PI have subgraph: "subgraph (place_mem_graph π PI') (place_mem_graph π PI)"
proof -
have "verts (place_mem_graph π PI') = PI'" by simp
moreover
have "verts (place_mem_graph π PI) = PI" by simp
ultimately
have verts: "verts (place_mem_graph π PI') β verts (place_mem_graph π PI)"
using PI'_subset_PI by presburger
have "arcs (place_mem_graph π PI') = place_membership π PI'" by simp
moreover
have "arcs (place_mem_graph π PI) = place_membership π PI" by simp
moreover
have "place_membership π PI' β place_membership π PI"
using PI'_subset_PI by auto
ultimately
have arcs: "arcs (place_mem_graph π PI') β arcs (place_mem_graph π PI)" by blast
have "compatible (place_mem_graph π PI) (place_mem_graph π PI')"
unfolding compatible_def by simp
with verts arcs show "subgraph (place_mem_graph π PI') (place_mem_graph π PI)"
unfolding subgraph_def
using place_mem_graph_wf_digraph
by blast
qed
from π
.C6 have "βc. pre_digraph.cycle (place_mem_graph π PI) c"
using dag.acyclic by blast
then have "βc. pre_digraph.cycle (place_mem_graph π PI') c"
using subgraph wf_digraph.subgraph_cycle by blast
then have C6: "dag (place_mem_graph π PI')"
using βΉdag (place_mem_graph π PI)βΊ dag_axioms_def dag_def digraph.digraph_subgraph subgraph
by blast
from π
.C1_1 PI'_subset_PI
have C1_1: "βn. AT (Var x =β©s β
n) β π βΉ βΟ β PI'. Β¬ Ο x" for x
by fast
from π
.C1_2 PI'_subset_PI
have C1_2: "AT (Var x =β©s Var y) β π βΉ βΟ β PI'. Ο x β· Ο y" for x y
by fast
from π
.C2 PI'_subset_PI
have C2: "AT (Var x =β©s Var y ββ©s Var z) β π βΉ βΟ β PI'. Ο x β· Ο y β¨ Ο z" for x y z
by fast
from π
.C3 PI'_subset_PI
have C3: "AT (Var x =β©s Var y -β©s Var z) β π βΉ βΟ β PI'. Ο x β· Ο y β§ Β¬ Ο z" for x y z
by fast
have C4: "AF (Var x =β©s Var y) β π βΉ βΟ β PI'. Ο x β· Β¬ Ο y" for x y
proof -
assume neq: "AF (Var x =β©s Var y) β π"
with π
.C4 obtain Ο where "Ο β PI" "Ο x β· Β¬ Ο y" by blast
from neq have "x β V" "y β V" by fastforce+
from neq U_collect_places_neq[where ?x = x and ?y = y] fact_2[of x]
have sim_Ο_x: "Οβ©1 x = Οβ©2 x" if "Οβ©1 β PI" "Οβ©2 β PI" "Οβ©1 βΌ Οβ©2" for Οβ©1 Οβ©2
using that βΉx β VβΊ by blast
from neq U_collect_places_neq[where ?x = x and ?y = y] fact_2[of y]
have sim_Ο_y: "Οβ©1 y = Οβ©2 y" if "Οβ©1 β PI" "Οβ©2 β PI" "Οβ©1 βΌ Οβ©2" for Οβ©1 Οβ©2
using that βΉy β VβΊ by blast
from βΉΟ β PIβΊ have "rep Ο β PI'" using range_rep by blast
then have "rep Ο β PI" using PI'_subset_PI by blast
from rep_sim sim_Ο_x have "(rep Ο) x β· Ο x"
using βΉrep Ο β PIβΊ βΉΟ β PIβΊ by blast
moreover
from rep_sim sim_Ο_y have "Ο y β· (rep Ο) y"
using βΉrep Ο β PIβΊ βΉΟ β PIβΊ by blast
ultimately
have "(rep Ο) x β· Β¬ (rep Ο) y"
using βΉΟ x β· Β¬ Ο yβΊ by blast
with βΉrep Ο β PI'βΊ show ?thesis by blast
qed
have C5_1: "βΟ. (y, Ο) β atβ©p' β§ Ο x β§ (βΟ' β PI'. Ο' β Ο βΆ Β¬ Ο' x)"
if "AT (Var x =β©s Single (Var y)) β π" for x y
proof -
from that have "y β W" "x β V" "y β V" by fastforce+
from that π
.C5_1[where ?y = y and ?x = x]
obtain Ο where Ο: "(y, Ο) β atβ©p" "Ο x" "βΟ' β PI. Ο' β Ο βΆ Β¬ Ο' x"
by blast
with π
.range_atβ©p have "Ο β PI" by fast
then have "rep Ο β PI'" using range_rep by blast
from rep_sim have "rep Ο βΌ Ο" using βΉΟ β PIβΊ by fast
with U_collect_places_single βΉΟ xβΊ fact_2 have "(rep Ο) x"
using βΉx β VβΊ βΉΟ β PIβΊ βΉrep Ο β PI'βΊ PI'_subset_PI that
by blast
with Ο have "rep Ο = Ο"
using βΉrep Ο β PI'βΊ PI'_subset_PI by blast
with Ο show ?thesis
using βΉrep Ο β PI'βΊ PI'_subset_PI
by (metis rep_at subset_iff)
qed
have C5_2: "βΟ β PI'. Ο y β· Ο z" if "y β W" "z β W" and at'_eq: "βΟ. (y, Ο) β atβ©p' β§ (z, Ο) β atβ©p'" for y z
proof
fix Ο assume "Ο β PI'"
from at'_eq obtain Ο' where Ο': "atβ©p_f' y = Ο'" "atβ©p_f' z = Ο'"
by (simp only: atβ©p'_def) fast
with range_atβ©p_f' βΉy β WβΊ have "Ο' β PI'" by blast
from Ο' have "atβ©p_f' y βΌ atβ©p_f' z"
apply (simp only: atβ©p_f'.simps place_sim.simps place_eq.simps)
by blast
moreover
from rep_sim have "atβ©p_f' y βΌ atβ©p_f y"
using atβ©p_f'.simps range_atβ©p_f that(1) by presburger
moreover
from rep_sim have "atβ©p_f' z βΌ atβ©p_f z"
using atβ©p_f'.simps range_atβ©p_f that(2) by presburger
ultimately
have "atβ©p_f y βΌ atβ©p_f z"
using trans_sim[of "atβ©p_f y" "atβ©p_f' y" "atβ©p_f' z"]
using trans_sim[of "atβ©p_f y" "atβ©p_f' z" "atβ©p_f z"]
using refl_sim[of "atβ©p_f' y" "atβ©p_f y"]
using range_atβ©p_f[of y] range_atβ©p_f[of z] range_atβ©p_f' PI'_subset_PI that(1-2)
by (meson subset_iff)
then consider "atβ©p_f y = atβ©p_f z" | "βu β U. atβ©p_f y u β§ atβ©p_f z u"
by force
then show "Ο y β· Ο z"
proof (cases)
case 1
then have "βΟ. (y, Ο) β atβ©p β§ (z, Ο) β atβ©p"
using atβ©p_def βΉy β WβΊ βΉz β WβΊ by blast
with π
.C5_2 have "βΟ β PI. Ο y β· Ο z"
using βΉy β WβΊ βΉz β WβΊ by presburger
with βΉΟ β PI'βΊ PI'_subset_PI show "Ο y β· Ο z"
by fast
next
case 2
then obtain u where "u β U" "atβ©p_f y u" "atβ©p_f z u" by blast
then have "π y ββ π u" "π z ββ π u"
by (simp add: less_eq_hf_def)+
from βΉy β WβΊ obtain xβ©1 where xβ©1_single_y: "AT (Var xβ©1 =β©s Single (Var y)) β π"
using memW_E by blast
with π_sat_π have "π xβ©1 = HF {π y}" by fastforce
then have "π y ββ π xβ©1" by simp
from xβ©1_single_y U_collect_places_single obtain L where "L β U" "π xβ©1 = β¨HF (π ` L)"
by meson
with βΉπ y ββ π xβ©1βΊ obtain u' where "u' β L" "π y ββ π u'" by auto
from βΉπ xβ©1 = β¨HF (π ` L)βΊ βΉu' β LβΊ have "π u' β€ π xβ©1"
using βΉπ y ββ π xβ©1βΊ by auto
with βΉπ xβ©1 = HF {π y}βΊ βΉπ y ββ π u'βΊ have "π u' = HF {π y}" by auto
with βΉπ y ββ π uβΊ βΉu β UβΊ βΉu' β LβΊ βΉL β UβΊ no_overlap_within_U
have "u' = u" by fastforce
with βΉπ u' = HF {π y}βΊ βΉπ z ββ π uβΊ have "π y = π z" by simp
with realise_same_implies_eq_under_all_Ο[of y z Ο] show ?thesis
using βΉy β WβΊ βΉz β WβΊ W_subset_V βΉΟ β PI'βΊ PI'_subset_PI by blast
qed
qed
have C5_3: "βΟ. (y, Ο) β atβ©p' β§ (y', Ο) β atβ©p'"
if "y β W" "y' β W" "βΟ' β PI'. Ο' y' β· Ο' y" for y' y
proof -
from βΉβΟ' β PI'. Ο' y' β· Ο' yβΊ have "βΟ β PI. rep Ο y' β· rep Ο y"
by (metis range_rep)
{fix Ο assume "Ο β PI"
with βΉβΟ' β PI'. Ο' y' β· Ο' yβΊ have "rep Ο y' β· rep Ο y"
using range_rep by fast
from βΉΟ β PIβΊ PI'_subset_PI range_rep have "rep Ο β PI" by blast
from U_collect_places_single'[of y'] fact_2[of y' "rep Ο" Ο] rep_sim[of Ο]
have "rep Ο y' β· Ο y'"
using βΉy' β WβΊ W_subset_V βΉΟ β PIβΊ βΉrep Ο β PIβΊ
by blast
from U_collect_places_single'[of y] fact_2[of y "rep Ο" Ο] rep_sim[of Ο]
have "rep Ο y β· Ο y"
using βΉy β WβΊ W_subset_V βΉΟ β PIβΊ βΉrep Ο β PIβΊ
by blast
from βΉrep Ο y' β· rep Ο yβΊ βΉrep Ο y' β· Ο y'βΊ βΉrep Ο y β· Ο yβΊ
have "Ο y β· Ο y'" by blast
}
with π
.C5_3 obtain Ο where "(y, Ο) β atβ©p" "(y', Ο) β atβ©p"
using βΉy β WβΊ βΉy' β WβΊ by blast
then have "(y, rep Ο) β atβ©p'" "(y', rep Ο) β atβ©p'"
by (meson Range_iff π
.range_atβ©p rep_at subset_iff)+
then show ?thesis by fast
qed
have "Ο = ΟβHF {0}β" if "Ο β Range atβ©p' - Range (place_membership π PI')" for Ο
proof -
from that obtain y where "(y, Ο) β atβ©p'" by blast
then have "y β W" "Ο β PI'"
using dom_atβ©p' range_atβ©p' by blast+
from βΉ(y, Ο) β atβ©p'βΊ have "Ο = rep (atβ©p_f y)" by simp
from βΉy β WβΊ obtain x where lt_in_π: "AT (Var x =β©s Single (Var y)) β π"
using memW_E by blast
with π_sat_π have "π x = HF {π y}" by fastforce
then have "Οβyβ β€ π x" by simp
with lt_in_π have "atβ©p_f y x" by force
with βΉΟ = rep (atβ©p_f y)βΊ fact_2[of x] rep_sim[of "atβ©p_f y"] U_collect_places_single[of x y]
have "Ο x"
using lt_in_π βΉΟ β PI'βΊ PI'_subset_PI βΉy β WβΊ
by (smt (verit, best) π
.PI_subset_places_V places_domain range_atβ©p_f rev_contra_hsubsetD)
have "βΟ β PI. Β¬ Ο y"
proof (rule ccontr)
assume "Β¬ (βΟβPI. Β¬ Ο y)"
then obtain Ο' where "Ο' β PI" "Ο' y" by blast
with U_collect_places_single'[of y] fact_2[of y "rep Ο'" Ο'] rep_sim[of Ο']
have "rep Ο' y"
using βΉy β WβΊ PI'_subset_PI W_subset_V range_rep by blast
with βΉAT (Var x =β©s Single (Var y)) β πβΊ βΉΟ xβΊ
have "(rep Ο', Ο) β place_membership π PI'"
using βΉΟ β PI'βΊ βΉΟ' β PIβΊ range_rep
by (simp only: place_membership.simps) blast
then have "Ο β Range (place_membership π PI')" by blast
with that show False by blast
qed
have "βΞ± β β V y. proper_Venn_region Ξ± = 0"
proof (rule ccontr)
assume "Β¬ (βΞ± β β V y. proper_Venn_region Ξ± = 0)"
then obtain Ξ± where Ξ±: "Ξ± β β V y" "proper_Venn_region Ξ± β 0" by blast
then have "y β Ξ±" "Ξ± β Pβ§+ V" by auto
with βΉproper_Venn_region Ξ± β 0βΊ have "proper_Venn_region Ξ± β€ π y"
using proper_Venn_region_subset_variable_iff
by (meson mem_P_plus_subset subset_iff)
then have "Οβproper_Venn_region Ξ±β y"
using W_subset_V βΉy β WβΊ by auto
with βΉβΟ β PI. Β¬ Ο yβΊ show False
using Ξ± by auto
qed
then have "β¨HF (proper_Venn_region ` β V y) = 0"
by fastforce
with variable_as_composition_of_proper_Venn_regions[of y]
have "π y = 0"
using βΉy β WβΊ W_subset_V by auto
with βΉπ x = HF {π y}βΊ have "π x = HF {0}" by argo
from βΉΟ β PI'βΊ PI'_subset_PI obtain Ο where "Ο β Ξ£" "Ο = ΟβΟβ"
by (metis PI_def image_iff in_mono)
with βΉΟ xβΊ have "Ο β 0" "Ο β€ π x" by simp+
with βΉπ x = HF {0}βΊ have "Ο = HF {0}" by fastforce
with βΉΟ = ΟβΟββΊ show "Ο = ΟβHF {0}β" by blast
qed
then have C7:
"β¦Οβ©1 β Range atβ©p' - Range (place_membership π PI');
Οβ©2 β Range atβ©p' - Range (place_membership π PI')β§ βΉ Οβ©1 = Οβ©2" for Οβ©1 Οβ©2
by blast
from PI'_subset_places_V dom_atβ©p' range_atβ©p' single_valued_atβ©p'
membership_irreflexive C6
C1_1 C1_2 C2 C3 C4 C5_1 C5_2 C5_3 C7
show "adequate_place_framework π PI' atβ©p'"
apply intro_locales
unfolding adequate_place_framework_axioms_def
by blast
qed
lemma singleton_model_for_normalized_reduced_literals:
"ββ³. βlt β π. interp Iβ©sβ©a β³ lt β§ (βu β U. hcard (β³ u) β€ 1)"
proof -
from π
'.finite_PI have "finite (PI' - Range atβ©p')" by blast
with u_exists[of "PI' - Range atβ©p'" "card PI'"] obtain u where
"β¦Οβ©1 β PI' - Range atβ©p'; Οβ©2 β PI' - Range atβ©p'; Οβ©1 β Οβ©2β§ βΉ u Οβ©1 β u Οβ©2"
"Ο β PI' - Range atβ©p' βΉ hcard (u Ο) β₯ card PI'"
for Οβ©1 Οβ©2 Ο
by blast
then have "place_realization π PI' atβ©p' u"
by unfold_locales blast+
{fix x assume "x β U"
then have "Οβ©1 = Οβ©2" if "Οβ©1 x" "Οβ©2 x" "Οβ©1 β PI'" "Οβ©2 β PI'" for Οβ©1 Οβ©2
using sim_self that by auto
then consider "{Ο β PI'. Ο x} = {}" | "(βΟ. {Ο β PI'. Ο x} = {Ο})"
by blast
then have "hcard (place_realization.β³ π PI' atβ©p' u x) β€ 1"
proof (cases)
case 1
then have "place_realization.β³ π PI' atβ©p' u x = 0"
using βΉplace_realization π PI' atβ©p' uβΊ "place_realization.β³.simps"
by fastforce
then show ?thesis by simp
next
case 2
then obtain Ο where "{Ο β PI'. Ο x} = {Ο}" "Ο β PI'" by auto
then have "place_realization.β³ π PI' atβ©p' u x = β¨HF (place_realization.place_realise π PI' atβ©p' u ` {Ο})"
using βΉplace_realization π PI' atβ©p' uβΊ "place_realization.β³.simps"
by fastforce
also have "... = β¨HF {place_realization.place_realise π PI' atβ©p' u Ο}"
by simp
finally have "place_realization.β³ π PI' atβ©p' u x = β¨HF {place_realization.place_realise π PI' atβ©p' u Ο}" .
moreover
from place_realization.place_realise_singleton[of π PI' atβ©p' u]
have "hcard (place_realization.place_realise π PI' atβ©p' u Ο) = 1"
using βΉplace_realization π PI' atβ©p' uβΊ βΉΟ β PI'βΊ by blast
then obtain c where "place_realization.place_realise π PI' atβ©p' u Ο = HF {c}"
using hcard_1E[of "place_realization.place_realise π PI' atβ©p' u Ο"]
by fastforce
ultimately
have "place_realization.β³ π PI' atβ©p' u x = β¨HF {HF {c}}"
by presburger
also have "... = HF {c}" by fastforce
also have "hcard ... = 1"
by (simp add: hcard_def)
finally show ?thesis by linarith
qed
}
moreover
from place_realization.β³_sat_π
have "βlt β π. interp Iβ©sβ©a (place_realization.β³ π PI' atβ©p' u) lt"
using βΉplace_realization π PI' atβ©p' uβΊ by fastforce
ultimately
show ?thesis by blast
qed
end
theorem singleton_model_for_reduced_MLSS_clause:
assumes norm_π: "normalized_MLSSmf_clause π"
and V: "V = varsβ©m π"
and π_model: "normalized_MLSSmf_clause.is_model_for_reduced_dnf π π"
shows "ββ³. normalized_MLSSmf_clause.is_model_for_reduced_dnf π β³ β§
(βΞ± β Pβ§+ V. hcard (β³ vβΞ±β) β€ 1)"
proof -
from norm_π interpret normalized_MLSSmf_clause π by blast
interpret proper_Venn_regions V "π β Solo"
using V by unfold_locales blast
from π_model have "βfmβintroduce_v. interp Iβ©sβ©a π fm"
unfolding is_model_for_reduced_dnf_def reduced_dnf_def
by blast
with eval_v have π_v: "βΞ± β Pβ§+ V. π vβΞ±β = proper_Venn_region Ξ±"
using V V_def proper_Venn_region.simps by auto
from π_model have "βlt β introduce_UnionOfVennRegions. interp Iβ©sβ©a π lt"
unfolding is_model_for_reduced_dnf_def reduced_dnf_def by blast
then have "βa β restriction_on_UnionOfVennRegions Ξ±s. Iβ©sβ©a π a"
if "Ξ±s β set all_V_set_lists" for Ξ±s
unfolding introduce_UnionOfVennRegions_def
using that by simp
with eval_UnionOfVennRegions have π_UnionOfVennRegions:
"π (UnionOfVennRegions Ξ±s) = β¨HF (π ` VennRegion ` set Ξ±s)"
if "Ξ±s β set all_V_set_lists" for Ξ±s
using that by (simp add: Sup.SUP_image)
have Solo_variable_as_composition_of_v:
"βL β {vβΞ±β |Ξ±. Ξ± β Pβ§+ V}. π z = β¨HF (π ` L)" if "βz' β V. z = Solo z'" for z
proof -
from that obtain z' where "z' β V" "z = Solo z'" by blast
then have "VennRegion ` β V z' β {vβΞ±β |Ξ±. Ξ± β Pβ§+ V}" by fastforce
moreover
from π_v have "βΞ± β β V z'. π vβΞ±β = proper_Venn_region Ξ±"
using β_subset_P_plus finite_V by fast
then have "β¨HF (π ` (VennRegion ` β V z')) = β¨HF (proper_Venn_region ` β V z')"
using HUnion_eq[where ?S = "β V z'" and ?f = "π β VennRegion" and ?g = proper_Venn_region]
by (simp add: image_comp)
moreover
from variable_as_composition_of_proper_Venn_regions
have "(π β Solo) z' = β¨HF (proper_Venn_region ` β V z')"
using βΉz' β VβΊ by presburger
with βΉz = Solo z'βΊ have "π z = β¨HF (proper_Venn_region ` β V z')" by simp
ultimately
have "VennRegion ` β V z' β {vβΞ±β |Ξ±. Ξ± β Pβ§+ V} β§ π z = β¨HF (π ` VennRegion ` β V z')"
by simp
then show ?thesis by blast
qed
from π_model obtain clause where clause:
"clause β reduced_dnf" "βlt β clause. interp Iβ©sβ©a π lt"
unfolding is_model_for_reduced_dnf_def by blast
with reduced_dnf_normalized have "normalized_MLSS_clause clause" by blast
with clause
have "satisfiable_normalized_MLSS_clause_with_vars_for_proper_Venn_regions clause π {vβΞ±β |Ξ±. Ξ± β Pβ§+ V}"
proof (unfold_locales, goal_cases)
case 1
then show ?case
using normalized_MLSS_clause.norm_π by blast
next
case 2
then show ?case
by (simp add: normalized_MLSS_clause.finite_π)
next
case 3
then show ?case
by (simp add: finite_vars_fm normalized_MLSS_clause.finite_π)
next
case 4
then show ?case by simp
next
case 5
from βΉclause β reduced_dnfβΊ normalized_clause_contains_all_v_Ξ±
have "βΞ±βPβ§+ V. vβΞ±β β β (vars ` clause)"
using V V_def by simp
then show ?case by blast
next
case (6 x y)
then obtain Ξ± Ξ² where Ξ±Ξ²: "Ξ± β Pβ§+ V" "Ξ² β Pβ§+ V" "x = vβΞ±β" "y = vβΞ²β"
by blast
with βΉx β yβΊ have "Ξ± β Ξ²" by blast
from Ξ±Ξ² have "Ξ± β V" "Ξ² β V" by auto
from π_model have "βfmβintroduce_v. interp Iβ©sβ©a π fm"
unfolding is_model_for_reduced_dnf_def reduced_dnf_def by blast
with Ξ±Ξ² eval_v have "π x = proper_Venn_region Ξ±" "π y = proper_Venn_region Ξ²"
using V V_def proper_Venn_region.simps by auto
with proper_Venn_region_disjoint βΉΞ± β Ξ²βΊ
show ?case
using βΉΞ± β VβΊ βΉΞ² β VβΊ by presburger
next
case (7 x y)
from βΉAF (Var x =β©s Var y) β clauseβΊ βΉclause β reduced_dnfβΊ
consider "AF (Var x =β©s Var y) β reduce_clause" | "βclause β introduce_w. AF (Var x =β©s Var y) β clause"
unfolding reduced_dnf_def introduce_v_def introduce_UnionOfVennRegions_def by blast
then show ?case
proof (cases)
case 1
then obtain lt where lt: "lt β set π" "AF (Var x =β©s Var y) β reduce_literal lt"
unfolding reduce_clause_def by blast
then obtain a where "lt = AFβ©m a"
by (cases lt rule: reduce_literal.cases) auto
from βΉlt β set πβΊ norm_π have "norm_literal lt" by blast
with βΉlt = AFβ©m aβΊ norm_literal_neq
obtain x' y' where lt: "lt = AFβ©m (Varβ©m x' =β©m Varβ©m y')" by blast
then have "reduce_literal lt = {AF (Var (Solo x') =β©s Var (Solo y'))}"
by simp
with βΉAF (Var x =β©s Var y) β reduce_literal ltβΊ have "x = Solo x'" "y = Solo y'"
by simp+
from lt βΉlt β set πβΊ have "x' β V" "y' β V"
using V by fastforce+
from Solo_variable_as_composition_of_v show ?thesis
using βΉx = Solo x'βΊ βΉy = Solo y'βΊ βΉx' β VβΊ βΉy' β VβΊ
by (smt (verit, best))
next
case 2
with lt_in_clause_in_introduce_w_E obtain l' m' f
where l': "l' β set all_V_set_lists"
and m': "m' β set all_V_set_lists"
and f: "f β set F_list"
and "AF (Var x =β©s Var y) β set (restriction_on_FunOfUnionOfVennRegions l' m' f)"
by blast
then have "AF (Var x =β©s Var y) = AF (Var (UnionOfVennRegions l') =β©s Var (UnionOfVennRegions m'))"
by auto
then have "x = UnionOfVennRegions l'" "y = UnionOfVennRegions m'" by blast+
with π_UnionOfVennRegions l' m'
have "π x = β¨HF (π ` VennRegion ` set l')" "π y = β¨HF (π ` VennRegion ` set m')"
by blast+
moreover
from l' set_all_V_set_lists have "set l' β Pβ§+ V"
using V V_def by auto
then have "VennRegion ` set l' β {vβΞ±β |Ξ±. Ξ± β Pβ§+ V}"
by blast
moreover
from m' set_all_V_set_lists have "set m' β Pβ§+ V"
using V V_def by auto
then have "VennRegion ` set m' β {vβΞ±β |Ξ±. Ξ± β Pβ§+ V}"
by blast
ultimately
show ?thesis by blast
qed
next
case (8 x y)
then consider "AT (Var x =β©s Single (Var y)) β introduce_v"
| "βclause β introduce_w. AT (Var x =β©s Single (Var y)) β clause"
| "AT (Var x =β©s Single (Var y)) β introduce_UnionOfVennRegions"
| "AT (Var x =β©s Single (Var y)) β reduce_clause"
unfolding reduced_dnf_def by blast
then show ?case
proof (cases)
case 1
have "Var x =β©s Single (Var y) β restriction_on_v Ξ±" for Ξ±
by simp
moreover
have "Var x =β©s Single (Var y) β restriction_on_InterOfVars xs" for xs
by (induction xs rule: restriction_on_InterOfVars.induct) auto
then have "Var x =β©s Single (Var y) β (restriction_on_InterOfVars β var_set_to_list) Ξ±" for Ξ±
by simp
moreover
have "Var x =β©s Single (Var y) β restriction_on_UnionOfVars xs" for xs
by (induction xs rule: restriction_on_UnionOfVars.induct) auto
then have "Var x =β©s Single (Var y) β (restriction_on_UnionOfVars β var_set_to_list) Ξ±" for Ξ±
by simp
ultimately
have "AT (Var x =β©s Single (Var y)) β introduce_v"
unfolding introduce_v_def by blast
with 1 show ?thesis by blast
next
case 2
with lt_in_clause_in_introduce_w_E obtain l' m' f
where "AT (Var x =β©s Single (Var y)) β set (restriction_on_FunOfUnionOfVennRegions l' m' f)"
by blast
moreover
have "AT (Var x =β©s Single (Var y)) β set (restriction_on_FunOfUnionOfVennRegions l' m' f)"
by simp
ultimately
show ?thesis by blast
next
case 3
have "Var x =β©s Single (Var y) β restriction_on_UnionOfVennRegions Ξ±s" for Ξ±s
by (induction Ξ±s rule: restriction_on_UnionOfVennRegions.induct) auto
then have "AT (Var x =β©s Single (Var y)) β introduce_UnionOfVennRegions"
unfolding introduce_UnionOfVennRegions_def by blast
with 3 show ?thesis by blast
next
case 4
then obtain lt where "lt β set π" and reduce_lt: "AT (Var x =β©s Single (Var y)) β reduce_literal lt"
unfolding reduce_clause_def by blast
with norm_π have "norm_literal lt" by blast
then have "βx' y'. lt = ATβ©m (Varβ©m x' =β©m Singleβ©m (Varβ©m y'))"
apply (cases lt rule: norm_literal.cases)
using reduce_lt by auto
then obtain x' y' where lt: "lt = ATβ©m (Varβ©m x' =β©m Singleβ©m (Varβ©m y'))" by blast
with reduce_lt have "x = Solo x'" "y = Solo y'" by simp+
from βΉlt β set πβΊ lt have "x' β V" "y' β V"
using V by fastforce+
from Solo_variable_as_composition_of_v show ?thesis
using βΉx = Solo x'βΊ βΉy = Solo y'βΊ βΉx' β VβΊ βΉy' β VβΊ
by (smt (verit, best))
qed
qed
then show ?thesis
using satisfiable_normalized_MLSS_clause_with_vars_for_proper_Venn_regions.singleton_model_for_normalized_reduced_literals
unfolding is_model_for_reduced_dnf_def
by (smt (verit) V V_def clause(1) introduce_v_subset_reduced_fms mem_Collect_eq subset_iff v_Ξ±_in_vars_introduce_v)
qed
end