section ‹ Polymorphic Overriding Operator ›
theory Overriding
imports Main
begin
text ‹ We here use type classes to create the overriding operator and instantiate it for relations,
partial function, and finite functions. ›
class oplus =
fixes oplus :: "'a ==> 'a ==> 'a" (infixl "⊕ " 65 )
class compatible =
fixes compatible :: "'a ==> 'a ==> bool" (infix "##" 60 )
assumes compatible_sym: "x ## y ==> y ## x"
unbundle lattice_syntax
class override = oplus + bot + compatible +
assumes compatible_zero [simp]: "x ## ⊥ "
and override_idem [simp]: "P ⊕ P = P"
and override_assoc: "P ⊕ (Q ⊕ R) = (P ⊕ Q) ⊕ R"
and override_lzero [simp]: "⊥ ⊕ P = P"
and override_comm: "P ## Q ==> P ⊕ Q = Q ⊕ P"
and override_compat: "[ P ## Q; (P ⊕ Q) ## R ] ==> P ## R"
and override_compatI: "[ P ## Q; P ## R; Q ## R ] ==> (P ⊕ Q) ## R"
begin
lemma override_rzero [simp]: "P ⊕ ⊥ = P"
by (metis compatible_zero override_comm override_lzero)
lemma override_compat': "[ P ## Q; (P ⊕ Q) ## R ] ==> Q ## R"
by (metis compatible_sym override_comm override_compat)
lemma override_compat_iff: "P ## Q ==> (P ⊕ Q) ## R ⟷ (P ## R) ∧ (Q ## R)"
by (meson override_compat override_compatI override_compat')
end
end
Messung V0.5 in Prozent C=57 H=93 G=76
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland