lemma IO_code_cong: "out = out' ==> IO out c = IO out' c"by simp setup‹Code_Simp.map_ss (Simplifier.add_cong @{thm IO_code_cong})›
lemma is_Pure_map_generat [simp]: "is_Pure (map_generat f g h x) = is_Pure x" by(cases x) simp_all
lemma result_map_generat [simp]: "is_Pure x ==> result (map_generat f g h x) = f (result x)" by(cases x) simp_all
lemma output_map_generat [simp]: "¬ is_Pure x ==> output (map_generat f g h x) = g (output x)" by(cases x) simp_all
lemma continuation_map_generat [simp]: "¬ is_Pure x ==> continuation (map_generat f g h x) = h (continuation x)" by(cases x) simp_all
lemma [simp]: shows map_generat_eq_Pure: "map_generat f g h generat = Pure x ⟷ (∃x'. generat = Pure x' ∧ x = f x')" and Pure_eq_map_generat: "Pure x = map_generat f g h generat ⟷ (∃x'. generat = Pure x' ∧ x = f x')" by(cases generat; auto; fail)+
lemma [simp]: shows map_generat_eq_IO: "map_generat f g h generat = IO out c ⟷ (∃out' c'. generat = IO out' c' ∧ out = g out' ∧ c = h c')" and IO_eq_map_generat: "IO out c = map_generat f g h generat ⟷ (∃out' c'. generat = IO out' c' ∧ out = g out' ∧ c = h c')" by(cases generat; auto; fail)+
lemma is_PureE [cases pred]: assumes"is_Pure generat" obtains (Pure) x where"generat = Pure x" using assms by(auto simp add: is_Pure_def)
lemma not_is_PureE: assumes"¬ is_Pure generat" obtains (IO) out c where"generat = IO out c" using assms by(cases generat) auto
lemma rel_generatI: "[ is_Pure x ⟷ is_Pure y; [ is_Pure x; is_Pure y ]==> A (result x) (result y); [¬ is_Pure x; ¬ is_Pure y ]==> Out (output x) (output y) ∧ R (continuation x) (continuation y) ] ==> rel_generat A Out R x y" by(cases x y rule: generat.exhaust[case_product generat.exhaust]) simp_all
lemma rel_generatD': "rel_generat A Out R x y ==> (is_Pure x ⟷ is_Pure y) ∧ (is_Pure x ⟶ is_Pure y ⟶ A (result x) (result y)) ∧ (¬ is_Pure x ⟶¬ is_Pure y ⟶ Out (output x) (output y) ∧ R (continuation x) (continuation y))" by(cases x y rule: generat.exhaust[case_product generat.exhaust]) simp_all
lemma rel_generatD: assumes"rel_generat A Out R x y" shows rel_generat_is_PureD: "is_Pure x ⟷ is_Pure y" and rel_generat_resultD: "is_Pure x ∨ is_Pure y ==> A (result x) (result y)" and rel_generat_outputD: "¬ is_Pure x ∨¬ is_Pure y ==> Out (output x) (output y)" and rel_generat_continuationD: "¬ is_Pure x ∨¬ is_Pure y ==> R (continuation x) (continuation y)" using rel_generatD'[OF assms] by simp_all
lemma rel_generat_mono: "[ rel_generat A B C x y; ∧x y. A x y ==> A' x y; ∧x y. B x y ==> B' x y; ∧x y. C x y ==> C' x y ] ==> rel_generat A' B' C' x y" using generat.rel_mono[of A A' B B' C C'] by(auto simp add: le_fun_def)
lemma rel_generat_mono' [mono]: "[∧x y. A x y ⟶ A' x y; ∧x y. B x y ⟶ B' x y; ∧x y. C x y ⟶ C' x y ] ==> rel_generat A B C x y ⟶ rel_generat A' B' C' x y" by(blast intro: rel_generat_mono)
lemma rel_generat_same: "rel_generat A B C r r ⟷ (∀x ∈ generat_pures r. A x x) ∧ (∀out ∈ generat_outs r. B out out) ∧ (∀c ∈generat_conts r. C c c)" by(cases r)(auto simp add: rel_fun_def)
lemma rel_generat_reflI: "[∧y. y ∈ generat_pures x ==> A y y; ∧out. out ∈ generat_outs x ==> B out out; ∧cont. cont ∈ generat_conts x ==> C cont cont ] ==> rel_generat A B C x x" by(cases x) auto
lemma reflp_rel_generat [simp]: "reflp (rel_generat A B C) ⟷ reflp A ∧ reflp B ∧ reflp C" by(auto 43 intro!: reflpI rel_generatI dest: reflpD reflpD[where x="Pure _"] reflpD[wherex="IO _ _"])
lemma rel_generat_inf: "inf (rel_generat A B C) (rel_generat A' B' C') = rel_generat (inf A A') (inf B B') (inf C C')"
(is"?lhs = ?rhs") proof(rule antisym) show"?lhs ≤ ?rhs" by(auto elim!: generat.rel_cases simp add: rel_fun_def) qed(auto elim: rel_generat_mono)
lemma rel_generat_Pure1: "rel_generat A B C (Pure x) = (λr. ∃y. r = Pure y ∧ A x y)" by(rule ext)(case_tac r, simp_all)
lemma rel_generat_IO1: "rel_generat A B C (IO out c) = (λr. ∃out' c'. r = IO out' c' ∧ B out out' ∧ C c c')" by(rule ext)(case_tac r, simp_all)
lemma not_is_Pure_conv: "¬ is_Pure r ⟷ (∃out c. r = IO out c)" by(cases r) auto
lemma finite_generat_outs [simp]: "finite (generat_outs generat)" by(cases generat) auto
lemma map_generat_lub [simp]: "map_generat f g h (generat_lub lub1 lub2 lub3 A) = generat_lub (f ∘ lub1) (g ∘lub2) (h ∘ lub3) A" by(simp add: generat_lub_def o_def)
abbreviation generat_lub' :: "('cont set ==> 'cont') ==> ('a, 'out, 'cont) generat set ==> ('a, 'out, 'cont') generat" where"generat_lub' ≡ generat_lub (λA. THE x. x ∈ A) (λA. THE x. x ∈ A)"
fun rel_witness_generat :: "('a, 'c, 'e) generat × ('b, 'd, 'f) generat ==> ('a × 'b, 'c × 'd, 'e × 'f) generat"where "rel_witness_generat (Pure x, Pure y) = Pure (x, y)"
| "rel_witness_generat (IO out c, IO out' c') = IO (out, out') (c, c')"
lemma rel_witness_generat: assumes"rel_generat A C R x y" shows pures_rel_witness_generat: "generat_pures (rel_witness_generat (x, y)) ⊆ {(a, b). A a b}" and outs_rel_witness_generat: "generat_outs (rel_witness_generat (x, y)) ⊆ {(c, d). C c d}" and conts_rel_witness_generat: "generat_conts (rel_witness_generat (x, y)) ⊆ {(e, f). R e f}" and map1_rel_witness_generat: "map_generat fst fst fst (rel_witness_generat (x, y)) = x" and map2_rel_witness_generat: "map_generat snd snd snd (rel_witness_generat (x, y)) = y" using assms by(cases; simp; fail)+
lemma rel_witness_generat1: assumes"rel_generat A C R x y" shows"rel_generat (λa (a', b). a = a' ∧ A a' b) (λc (c', d). c = c' ∧ C c' d) (λr (r', s). r = r' ∧ R r' s) x (rel_witness_generat (x, y))" using map1_rel_witness_generat[OF assms, symmetric] unfolding generat.rel_eq[symmetric] generat.rel_map by(rule generat.rel_mono_strong)(auto dest: set_rel_witness_generat[OF assms, THEN subsetD])
lemma rel_witness_generat2: assumes"rel_generat A C R x y" shows"rel_generat (λ(a, b') b. b = b' ∧ A a b') (λ(c, d') d. d = d' ∧ C c d') (λ(r, s') s. s = s' ∧ R r s') (rel_witness_generat (x, y)) y" using map2_rel_witness_generat[OF assms] unfolding generat.rel_eq[symmetric] generat.rel_map by(rule generat.rel_mono_strong)(auto dest: set_rel_witness_generat[OF assms, THEN subsetD])
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 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.