lemma If_distr: "[f ⊥ = ⊥; cont f]==> f (If b then t else e) = (If b then f t else f e)" "[cont t'; cont e']==> (If b then t' else e') x = (If b then t' x else e' x)" "(If b then t''' else e''')⋅x = (If b then t'''⋅x else e'''⋅x)" "[g ⊥ = ⊥; cont g]==> g (If b then t'' else e'') y = (If b then g t'' y else g e'' y)" by (case_tac [!] b) simp_all
lemma If2_split_asm: "P (If2 Q x y) ⟷¬(Q = ⊥∧¬P ⊥∨ Q = TT ∧¬P x ∨ Q = FF ∧¬P y)" by (cases Q) (simp_all add: If2_def)
lemmas If2_splits = split_If2 If2_split_asm
lemma If2_cont[simp, cont2cont]: assumes"cont i" assumes"cont t" assumes"cont e" shows"cont (λx. If2 (i x) (t x) (e x))" using assms unfolding If2_def by simp
lemma If_else_FF[simp]: "(If b then t else FF) = (b andalso t)" by (cases b) simp_all
lemma If_then_TT[simp]: "(If b then TT else e) = (b orelse e)" by (cases b) simp_all
lemma If_cong: assumes"b = b'" assumes"b = TT ==> t = t'" assumes"b = FF ==> e = e'" shows"(If b then t else e) = (If b' then t' else e')" using assms by (cases b) simp_all
lemma If_tr: "(If b then t else e) = ((b andalso t) orelse (neg⋅b andalso e))" by (cases b) simp_all
lemma If_andalso: shows"If p andalso q then t else e = If p then If q then t else e else e" by (cases p) simp_all
lemma If_else_absorb: assumes"c = ⊥==> e = ⊥" assumes"c = TT ==> e = t" shows"If c then t else e = e" using assms by (cases c; clarsimp)
lemma wf_Integer_ge_less_than: "wf (Integer_ge_less_than d)" proof(rule wf_subset) show"Integer_ge_less_than d ⊆ measure (λz. nat (if z = ⊥ then d else (THE z'. z = MkI⋅z') - d))" unfolding Integer_ge_less_than_def by clarsimp qed simp
subsection‹ Element equality \label{sec:equality} ›
text‹
avoid many extraneous headaches that take us far away from the
parts of our derivation, we assume that the elements of
pattern and text are drawn from a @{class ‹pcpo›}
, if the @{const ‹eq›} function on this type is
defined arguments, then its result is defined and coincides with
{term ‹(=)›}.
this effectively restricts us to @{class ‹flat›}
types; see 🍋‹‹\S4.12› in
Paulson:1987"› for a discussion.
›
class Eq_def = Eq_eq + assumes eq_defined: "[x ≠⊥; y ≠⊥]==> eq⋅x⋅y ≠⊥" begin
lemma eq_bottom_iff[simp]: "(eq⋅x⋅y = ⊥) ⟷ (x = ⊥∨ y = ⊥)" using eq_defined by auto
lemma eq_defined_reflD[simp]: "(eq⋅a⋅a = TT) ⟷ a ≠⊥" "(TT = eq⋅a⋅a) ⟷ a ≠⊥" "a ≠⊥==> eq⋅a⋅a = TT" using eq_refl by auto
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.