definition less_extended :: "'a extended \ 'a extended \ bool" where "((x::'a extended) < y) = (x \ y \ \ y \ x)"
instance by intro_classes (auto simp: less_extended_def less_eq_extended_case split: extended.splits)
end
instance extended :: (linorder)linorder by intro_classes (auto simp: less_eq_extended_case split:extended.splits)
lemma Minf_le[simp]: "Minf \ y" by(cases y) auto lemma le_Pinf[simp]: "x \ Pinf" by(cases x) auto lemma le_Minf[simp]: "x \ Minf \ x = Minf" by(cases x) auto lemma Pinf_le[simp]: "Pinf \ x \ x = Pinf" by(cases x) auto
lemma less_extended_simps[simp]: "Fin x < Fin y = (x < y)" "Fin x < Pinf = True" "Fin x < Minf = False" "Pinf < h = False" "Minf < Fin x = True" "Minf < Pinf = True" "l < Minf = False" by (auto simp add: less_extended_def)
lemma min_extended_simps[simp]: "min (Fin x) (Fin y) = Fin(min x y)" "min xx Pinf = xx" "min xx Minf = Minf" "min Pinf yy = yy" "min Minf yy = Minf" by (auto simp add: min_def)
lemma max_extended_simps[simp]: "max (Fin x) (Fin y) = Fin(max x y)" "max xx Pinf = Pinf" "max xx Minf = xx" "max Pinf yy = Pinf" "max Minf yy = yy" by (auto simp add: max_def)
instantiation extended :: (zero)zero begin definition"0 = Fin(0::'a)" instance .. end
declare zero_extended_def[symmetric, code_post]
instantiation extended :: (one)one begin definition"1 = Fin(1::'a)" instance .. end
declare one_extended_def[symmetric, code_post]
instantiation extended :: (plus)plus begin
text\<open>The following definition of of addition is totalized to make it asociative and commutative. Normally the sum of plus and minus infinity is undefined.\<close>
fun plus_extended where "Fin x + Fin y = Fin(x+y)" | "Fin x + Pinf = Pinf" | "Pinf + Fin x = Pinf" | "Pinf + Pinf = Pinf" | "Minf + Fin y = Minf" | "Fin x + Minf = Minf" | "Minf + Minf = Minf" | "Minf + Pinf = Pinf" | "Pinf + Minf = Pinf"
instantiation extended :: (lattice)bounded_lattice begin
definition"bot = Minf" definition"top = Pinf"
fun inf_extended :: "'a extended \ 'a extended \ 'a extended" where "inf_extended (Fin i) (Fin j) = Fin (inf i j)" | "inf_extended a Minf = Minf" | "inf_extended Minf a = Minf" | "inf_extended Pinf a = a" | "inf_extended a Pinf = a"
fun sup_extended :: "'a extended \ 'a extended \ 'a extended" where "sup_extended (Fin i) (Fin j) = Fin (sup i j)" | "sup_extended a Pinf = Pinf" | "sup_extended Pinf a = Pinf" | "sup_extended Minf a = a" | "sup_extended a Minf = a"
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 ist noch experimentell.