Theory MLSS_Extras
theory MLSS_Extras
imports MLSS_Decision_Proc.MLSS_Semantics
begin
:: "'a pset_fm ⇒ bool" where
:
"normalized_MLSS_literal (AT (Var x =⇩s ∅ n))"
| :
"normalized_MLSS_literal (AT (Var x =⇩s Var y))"
| :
"normalized_MLSS_literal (AF (Var x =⇩s Var y))"
| :
"normalized_MLSS_literal (AT (Var x =⇩s Var y ⊔⇩s Var z))"
| :
"normalized_MLSS_literal (AT (Var x =⇩s Var y -⇩s Var z))"
| :
"normalized_MLSS_literal (AT (Var x =⇩s Single (Var y)))"
=
fixes 𝒞 :: "'a pset_fm set"
assumes : "∀lt ∈ 𝒞. normalized_MLSS_literal lt"
and : "finite 𝒞"
begin
:: "'a pset_fm ⇒ 'a set" where
"singleton_vars (AT (Var x =⇩s Single (Var y))) = {y}"
| "singleton_vars _ = {}"
lemma : "singleton_vars φ ⊆ vars φ"
apply (cases φ)
apply simp_all
by (smt (z3) Un_iff subset_iff empty_iff
fm.inject(1) pset_atom.simps(16) pset_term.simps(92) pset_term.simps(96) singleton_vars.elims)
abbreviation " ≡ ⋃ (vars ` 𝒞)"
abbreviation " ≡ ⋃ (singleton_vars ` 𝒞)"
lemma : "W ⊆ V"
using singleton_vars_subset_vars by fast
lemma [elim]:
assumes "w ∈ W"
shows "∃x. AT (Var x =⇩s Single (Var w)) ∈ 𝒞"
proof -
from ‹w ∈ W› obtain lt where lt: "lt ∈ 𝒞" "w ∈ singleton_vars lt" by blast
then obtain x where "lt = AT (Var x =⇩s Single (Var w))"
by (cases lt rule: singleton_vars.cases) auto
with lt show ?thesis by blast
qed
end
lemma : "inj AT"
by (standard; rule ccontr) auto
end