(* Title: Range and Antirange Semirings Author:VictorB.F.Gomes,WalterGuttmann,PeterHöfner,GeorgStruth,TjarkWeber Maintainer:WalterGuttmann<walter.guttmanatcanterbury.ac.nz> GeorgStruth<g.struthatsheffield.ac.uk> TjarkWeber<tjark.weberatit.uu.se>
*)
section‹Range and Antirange Semirings›
theory Range_Semiring imports Antidomain_Semiring begin
subsection‹Range Semirings›
text‹We set up the duality between domain and antidomain semirings on the one hand and range and antirange semirings on the other hand.›
class range_op = fixes range_op :: "'a ==> 'a" (‹r›)
class range_semiring = semiring_one_zero + plus_ord + range_op + assumes rsr1 [simp]: "x + (x ⋅ r x) = x ⋅ r x" and rsr2 [simp]: "r (r x ⋅ y) = r(x ⋅ y)" and rsr3 [simp]: "r x + 1 = 1" and rsr4 [simp]: "r 0 = 0" and rsr5 [simp]: "r (x + y) = r x + r y"
begin
definition bd :: "'a ==> 'a ==> 'a" (‹⟨_| _› [61,81] 82) where "⟨x| y = r (y ⋅ x)"
no_notation range_op (‹r›)
end
sublocale range_semiring ⊆ rdual: domain_semiring "(+)""λx y. y ⋅ x"10 range_op "(≤)""(<)"
rewrites "rdual.fd x y = ⟨x| y" proof - show"class.domain_semiring (+) (λx y. y ⋅ x) 1 0 range_op (≤) (<)" by (standard, auto simp: mult_assoc distrib_left) theninterpret rdual: domain_semiring "(+)""λx y. y ⋅ x"10 range_op "(≤)""(<)" . show"rdual.fd x y = ⟨x| y" unfolding rdual.fd_def bd_def by auto qed
sublocale domain_semiring ⊆ ddual: range_semiring "(+)""λx y. y ⋅ x"10 domain_op "(≤)""(<)"
rewrites "ddual.bd x y = domain_semiringl_class.fd x y" proof - show"class.range_semiring (+) (λx y. y ⋅ x) 1 0 domain_op (≤) (<)" by (standard, auto simp: mult_assoc distrib_left) theninterpret ddual: range_semiring "(+)""λx y. y ⋅ x"10 domain_op "(≤)""(<)" . show"ddual.bd x y = domain_semiringl_class.fd x y" unfolding ddual.bd_def fd_def by auto qed
class antirange_semiring = semiring_one_zero + plus_ord + antirange_op + assumes ars1 [simp]: "x ⋅ ar x = 0" and ars2 [simp]: "ar (x ⋅ y) + ar (ar ar x ⋅ y) = ar (ar ar x ⋅ y)" and ars3 [simp]: "ar ar x + ar x = 1"
begin
no_notation bd (‹⟨_| _› [61,81] 82)
definition ars_r :: "'a ==> 'a" (‹r›) where "r x = ar (ar x)"
definition bdia :: "'a ==> 'a ==> 'a" (‹⟨_| _› [61,81] 82) where "⟨x| y = ar ar (y ⋅ x)"
definition bbox :: "'a ==> 'a ==> 'a" (‹[_| _› [61,81] 82) where "[x| y = ar (ar y ⋅ x)"
end
sublocale antirange_semiring ⊆ ardual: antidomain_semiring antirange_op "(+)""λx y. y ⋅ x"10"(≤)""(<)"
rewrites "ardual.ads_d x = r x" and"ardual.fdia x y = ⟨x| y" and"ardual.fbox x y = [x| y" proof - show"class.antidomain_semiring antirange_op (+) (λx y. y ⋅ x) 1 0 (≤) (<)" by (standard, auto simp: mult_assoc distrib_left) theninterpret ardual: antidomain_semiring antirange_op "(+)""λx y. y ⋅ x"10"(≤)""(<)" . show"ardual.ads_d x = r x" by (simp add: ardual.ads_d_def local.ars_r_def) show"ardual.fdia x y = ⟨x| y" unfolding ardual.fdia_def bdia_def by auto show"ardual.fbox x y = [x| y" unfolding ardual.fbox_def bbox_def by auto qed
context antirange_semiring
begin
sublocale rs: range_semiring "(+)""(⋅)"10"λx. ar ar x""(≤)""(<)" by unfold_locales
end
sublocale antidomain_semiring ⊆ addual: antirange_semiring "(+)""λx y. y ⋅ x"10 antidomain_op "(≤)""(<)"
rewrites "addual.ars_r x = d x" and"addual.bdia x y = |x⟩ y" and"addual.bbox x y = |x] y" proof - show"class.antirange_semiring (+) (λx y. y ⋅ x) 1 0 antidomain_op (≤) (<)" by (standard, auto simp: mult_assoc distrib_left) theninterpret addual: antirange_semiring "(+)""λx y. y ⋅ x"10 antidomain_op "(≤)""(<)" . show"addual.ars_r x = d x" by (simp add: addual.ars_r_def local.ads_d_def) show"addual.bdia x y = |x⟩ y" unfolding addual.bdia_def fdia_def by auto show"addual.bbox x y = |x] y" unfolding addual.bbox_def fbox_def by auto qed
subsection‹Antirange Kleene Algebras›
class antirange_kleene_algebra = antirange_semiring + kleene_algebra
sublocale antirange_kleene_algebra ⊆ dual: antidomain_kleene_algebra antirange_op "(+)""λx y. y ⋅ x"10"(≤)""(<)""star" by (standard, auto simp: local.star_inductr' local.star_inductl)
sublocale antidomain_kleene_algebra ⊆ dual: antirange_kleene_algebra "(+)""λx y. y ⋅ x"10"(≤)""(<)""star" antidomain_op by (standard, simp_all add: star_inductr star_inductl)
text‹Hence all range theorems have been derived by duality in a generic way.›
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.