Theory PhiSem_Generic_Boolean
chapter โนGeneric Booleanโบ
theory PhiSem_Generic_Boolean
imports PhiSem_Base
abbrevs "<bool>" = "๐ป๐๐๐
"
begin
section โนSemanticsโบ
debt_axiomatization ๐ป๐๐๐
:: TY
and sem_mk_bool :: โนbool โ VALโบ
and sem_dest_bool :: โนVAL โ boolโบ
where sem_mk_dest_bool[simp]: โนsem_dest_bool (sem_mk_bool b) = bโบ
and ๐ป๐๐๐
_neq_๐๐๐๐๐๐[simp]: โน๐ป๐๐๐
โ ๐๐๐๐๐๐โบ
and can_eq_bool: โนCan_EqCompare res (sem_mk_bool x1) (sem_mk_bool x2)โบ
and eq_bool: โนEqCompare (sem_mk_bool x1) (sem_mk_bool x2) = (x1 = x2)โบ
and zero_bool[simp]: โนZero ๐ป๐๐๐
= Some (sem_mk_bool False)โบ
and WT_bool[simp]: โนWell_Type ๐ป๐๐๐
= { sem_mk_bool x |x. True }โบ
lemma sem_mk_bool_inj[simp]:
โนsem_mk_bool x = sem_mk_bool y โก x = yโบ
by (smt (verit, del_insts) sem_mk_dest_bool)
lemma ๐๐๐๐๐๐_neq_๐ป๐๐๐
[simp]:
โน๐๐๐๐๐๐ โ ๐ป๐๐๐
โบ
using ๐ป๐๐๐
_neq_๐๐๐๐๐๐ by fastforce
lemma [ฯreason add]:
โน Is_Type_Literal ๐ป๐๐๐
โบ
unfolding Is_Type_Literal_def ..
section โนInstructionsโบ
definition op_const_bool :: "bool โ VAL proc"
where "op_const_bool b = Return (ฯarg (sem_mk_bool b))"
definition op_not :: "(VAL, VAL) proc'"
where "op_not v =
ฯM_getV ๐ป๐๐๐
sem_dest_bool v (ฮปv.
Return (ฯarg (sem_mk_bool (ยฌ v)))
)"
definition op_and :: "(VAL ร VAL, VAL) proc'"
where "op_and =
ฯM_caseV (ฮปva vb.
ฯM_getV ๐ป๐๐๐
sem_dest_bool va (ฮปv.
ฯM_getV ๐ป๐๐๐
sem_dest_bool vb (ฮปu.
Return (ฯarg (sem_mk_bool (v โง u)))
)))"
definition op_or :: "(VAL ร VAL, VAL) proc'"
where "op_or =
ฯM_caseV (ฮปva vb.
ฯM_getV ๐ป๐๐๐
sem_dest_bool va (ฮปv.
ฯM_getV ๐ป๐๐๐
sem_dest_bool vb (ฮปu.
Return (ฯarg (sem_mk_bool (v โจ u)))
)))"
definition op_xor :: "(VAL ร VAL, VAL) proc'"
where "op_xor =
ฯM_caseV (ฮปva vb.
ฯM_getV ๐ป๐๐๐
sem_dest_bool va (ฮปv.
ฯM_getV ๐ป๐๐๐
sem_dest_bool vb (ฮปu.
Return (ฯarg (sem_mk_bool (v โง ยฌ u โจ ยฌ v โง u)))
)))"
definition op_equal :: "TY โ (VAL ร VAL, VAL) proc'"
where "op_equal TY =
ฯM_caseV (ฮปva vb.
ฯM_getV TY id va (ฮปv.
ฯM_getV TY id vb (ฮปu.
(ฮปres. ฯM_assert (Can_EqCompare res v u) res) โชข
Return (ฯarg (sem_mk_bool (EqCompare v u)))
)))"
section โนฯ-Typeโบ
ฯtype_def ฯBool :: "(VAL, bool) ฯ" ("๐น")
where โนx โฆ ๐น โก sem_mk_bool x โฆ Itselfโบ
deriving Basic
and Abstract_DomainโฉL
and Functionality
and โนSemantic_Zero_Val ๐ป๐๐๐
๐น Falseโบ
and Inhabited
and โน๐๐๐๐พ๐๐ฟ ๐น = ๐ป๐๐๐
โบ
and Equiv_Class
lemma ฯBool_eqcmp[ฯreason 2000]:
"ฯEqual ๐น (ฮปx y. True) (=)"
unfolding ฯEqual_def
by (simp add: can_eq_bool eq_bool)
section โนAbstractions of Boolean Arithmeticโบ
declare_ฯlang_operator
infix 50 "="
infix 35 "โง"
infix 30 "โจ"
infix 30 โ
prefix 40 "ยฌ"
subsection โนConstantโบ
lemma op_const_bool_ฯapp[ฯsynthesis for โนฮปv. True โฆ ?T vโบ (1200) and โนฮปv. False โฆ ?T vโบ (1200)]:
โน Is_Literal b
โน ๐๐๐๐ผ op_const_bool b โฆ Void โผ ๐๐บ๐
b โฆ ๐น โฆโบ
unfolding op_const_bool_def
by (rule, simp)
lemma True_ฯapp:
โน๐๐๐๐ผ op_const_bool True โฆ Void โผ ๐๐บ๐
True โฆ ๐น โฆโบ
โด โนTrueโบ โต.
lemma False_ฯapp:
โน๐๐๐๐ผ op_const_bool False โฆ Void โผ ๐๐บ๐
False โฆ ๐น โฆโบ
โด โนFalseโบ โต.
subsection โนNotโบ
lemma op_not[ฯoverload ยฌ, ฯsynthesis 100]:
โน๐๐๐๐ผ op_not raw โฆ x โฆ ๐๐บ๐
[raw] ๐น โผ ๐๐บ๐
ยฌ x โฆ ๐น โฆโบ
unfolding op_not_def
by (cases raw, simp, rule, simp, rule, simp)
subsection โนAndโบ
lemma op_and[ฯoverload โง, ฯsynthesis add]:
โน๐๐๐๐ผ op_and (vaโ, vb) โฆ a โฆ ๐๐บ๐
[va] ๐นโ b โฆ ๐๐บ๐
[vb] ๐น โผ ๐๐บ๐
(a โง b) โฆ ๐น โฆโบ
unfolding op_and_def
by (cases va; cases vb; simp, rule, rule, simp, rule, simp, rule, simp)
subsection โนOrโบ
lemma op_or[ฯoverload โจ, ฯsynthesis 100]:
โน๐๐๐๐ผ op_or (vaโ, vb) โฆ a โฆ ๐๐บ๐
[va] ๐นโ b โฆ ๐๐บ๐
[vb] ๐น โผ ๐๐บ๐
(a โจ b) โฆ ๐น โฆโบ
unfolding op_or_def
by (cases va; cases vb, simp, rule, rule, simp, rule, simp, rule, simp)
subsection โนXorโบ
lemma op_xor[ฯoverload โ, ฯsynthesis 100]:
โน๐๐๐๐ผ op_xor (vaโ, vb) โฆ a โฆ ๐๐บ๐
[va] ๐นโ b โฆ ๐๐บ๐
[vb] ๐น โผ ๐๐บ๐
(a โง ยฌ b โจ ยฌ a โง b) โฆ ๐น โฆโบ
unfolding op_xor_def
by (cases va; cases vb, simp, rule, rule, simp, rule, simp, rule, simp)
subsection โนEqualโบ
declare [[
overloaded_operator_in_synthesis โนฮปv. x โฆ T vโบ โนฮปv. y โฆ U vโบ โ โนฮปv. x = y โฆ ๐๐บ๐
[v] ๐นโบ,
overloaded_operator_in_synthesis
โนฮปv. x mod N โฆ T vโบ โนฮปv. y mod N โฆ U vโบ โ โนฮปv. x mod N = y mod N โฆ ๐๐บ๐
[v] ๐นโบ
]]
lemma op_equal_ฯapp[ฯoverload =]:
โน ฯEqual T can_eq eq
โน Semantic_Type' (a โฆ T) TY
โน Semantic_Type' (b โฆ T) TY
โน ๐๐๐พ๐๐๐๐พ can_eq a b
โน ๐๐๐๐ผ op_equal TY (ฯV_pair rawa rawb) โฆ a โฆ ๐๐บ๐
[rawa] Tโ b โฆ ๐๐บ๐
[rawb] T โผ eq a b โฆ ๐๐บ๐
๐น โฆโบ
unfolding op_equal_def
by ((cases rawa; cases rawb; simp, rule, rule),
simp add: Semantic_Type'_def subset_iff Premise_def,
simp add: Semantic_Type'_def subset_iff Premise_def, rule,
unfold ฯEqual_def Premise_def, simp, simp,
rule, simp)
declare op_equal_ฯapp[where eq=โน(=)โบ, ฯsynthesis 100]
declare op_equal_ฯapp[where eq=โน(ฮปx y. x mod N = y mod N)โบ for N, ฯsynthesis 100]
end