lemma PDUnit_convex_mono: "x ⊑ y ==> PDUnit x ≤♮ PDUnit y" unfolding convex_le_def by (fast intro: PDUnit_upper_mono PDUnit_lower_mono)
lemma PDPlus_convex_mono: "[s ≤♮ t; u ≤♮ v]==> PDPlus s u ≤♮ PDPlus t v" unfolding convex_le_def by (fast intro: PDPlus_upper_mono PDPlus_lower_mono)
lemma convex_le_PDUnit_PDUnit_iff [simp]: "(PDUnit a ≤♮ PDUnit b) = (a ⊑ b)" unfolding convex_le_def upper_le_def lower_le_def Rep_PDUnit by fast
lemma convex_le_PDUnit_lemma1: "(PDUnit a ≤♮ t) = (∀b∈Rep_pd_basis t. a ⊑ b)" unfolding convex_le_def upper_le_def lower_le_def Rep_PDUnit using Rep_pd_basis_nonempty [of t, folded ex_in_conv] by fast
lemma convex_le_PDUnit_PDPlus_iff [simp]: "(PDUnit a ≤♮ PDPlus t u) = (PDUnit a ≤♮ t ∧ PDUnit a ≤♮ u)" unfolding convex_le_PDUnit_lemma1 Rep_PDPlus by fast
lemma convex_le_PDUnit_lemma2: "(t ≤♮ PDUnit b) = (∀a∈Rep_pd_basis t. a ⊑ b)" unfolding convex_le_def upper_le_def lower_le_def Rep_PDUnit using Rep_pd_basis_nonempty [of t, folded ex_in_conv] by fast
lemma convex_le_PDPlus_PDUnit_iff [simp]: "(PDPlus t u ≤♮ PDUnit a) = (t ≤♮ PDUnit a ∧ u ≤♮ PDUnit a)" unfolding convex_le_PDUnit_lemma2 Rep_PDPlus by fast
lemma convex_le_PDPlus_lemma: assumes z: "PDPlus t u ≤♮ z" shows"∃v w. z = PDPlus v w ∧ t ≤♮ v ∧ u ≤♮ w" proof (intro exI conjI) let ?A = "{b∈Rep_pd_basis z. ∃a∈Rep_pd_basis t. a ⊑ b}" let ?B = "{b∈Rep_pd_basis z. ∃a∈Rep_pd_basis u. a ⊑ b}" let ?v = "Abs_pd_basis ?A" let ?w = "Abs_pd_basis ?B" have Rep_v: "Rep_pd_basis ?v = ?A" apply (rule Abs_pd_basis_inverse) apply (rule Rep_pd_basis_nonempty [of t, folded ex_in_conv, THEN exE]) apply (cut_tac z, simp only: convex_le_def lower_le_def, clarify) apply (drule_tac x=x in bspec, simp add: Rep_PDPlus, erule bexE) apply (simp add: pd_basis_def) apply fast done have Rep_w: "Rep_pd_basis ?w = ?B" apply (rule Abs_pd_basis_inverse) apply (rule Rep_pd_basis_nonempty [of u, folded ex_in_conv, THEN exE]) apply (cut_tac z, simp only: convex_le_def lower_le_def, clarify) apply (drule_tac x=x in bspec, simp add: Rep_PDPlus, erule bexE) apply (simp add: pd_basis_def) apply fast done show"z = PDPlus ?v ?w" apply (insert z) apply (simp add: convex_le_def, erule conjE) apply (simp add: Rep_pd_basis_inject [symmetric] Rep_PDPlus) apply (simp add: Rep_v Rep_w) apply (rule equalityI) apply (rule subsetI) apply (simp only: upper_le_def) apply (drule (1) bspec, erule bexE) apply (simp add: Rep_PDPlus) apply fast apply fast done show"t ≤♮ ?v""u ≤♮ ?w" using z by (simp_all add: convex_le_def upper_le_def lower_le_def Rep_PDPlus Rep_v Rep_w) fast+ qed
lemma convex_le_induct [induct set: convex_le]: assumes le: "t ≤♮ u" assumes 2: "∧t u v. [P t u; P u v]==> P t v" assumes 3: "∧a b. a ⊑ b ==> P (PDUnit a) (PDUnit b)" assumes 4: "∧t u v w. [P t v; P u w]==> P (PDPlus t u) (PDPlus v w)" shows"P t u" using le proof (induct t arbitrary: u rule: pd_basis_induct) case (PDUnit a) thenshow ?case proof (induct u rule: pd_basis_induct1) case (PDUnit b) thenshow ?caseby (simp add: 3) next case (PDPlus b t) have"P (PDPlus (PDUnit a) (PDUnit a)) (PDPlus (PDUnit b) t)" by (rule 4 [OF 3]) (use PDPlus in simp_all) thenshow ?caseby (simp add: PDPlus_absorb) qed next case PDPlus from PDPlus(1,2) show ?case using convex_le_PDPlus_lemma [OF PDPlus(3)] by (auto simp add: 4) qed
definition "x ⊑ y ⟷ Rep_convex_pd x ⊆ Rep_convex_pd y"
instance .. end
instance convex_pd :: (bifinite) po using type_definition_convex_pd below_convex_pd_def by (rule convex_le.typedef_ideal_po)
instance convex_pd :: (bifinite) cpo using type_definition_convex_pd below_convex_pd_def by (rule convex_le.typedef_ideal_cpo)
definition
convex_principal :: "'a::bifinite pd_basis ==> 'a convex_pd"where "convex_principal t = Abs_convex_pd {u. u ≤♮ t}"
interpretation convex_pd:
ideal_completion convex_le convex_principal Rep_convex_pd using type_definition_convex_pd below_convex_pd_def using convex_principal_def pd_basis_countable by (rule convex_le.typedef_ideal_completion)
lemma convex_pd_induct1: assumes P: "adm P" assumes unit: "∧x. P {x}♮" assumes insert: "∧x ys. [P {x}♮; P ys]==> P ({x}♮∪♮ ys)" shows"P (xs::'a::bifinite convex_pd)" proof (induct xs rule: convex_pd.principal_induct) show"P (convex_principal a)"for a proof (induct a rule: pd_basis_induct1) case PDUnit show ?caseby (simp only: convex_unit_Rep_compact_basis [symmetric]) (rule unit) next case PDPlus show ?case by (simp only: convex_unit_Rep_compact_basis [symmetric] convex_plus_principal [symmetric])
(rule insert [OF unit PDPlus]) qed qed (rule P)
lemma convex_pd_induct [case_names adm convex_unit convex_plus, induct type: convex_pd]: assumes P: "adm P" assumes unit: "∧x. P {x}♮" assumes plus: "∧xs ys. [P xs; P ys]==> P (xs ∪♮ ys)" shows"P (xs::'a::bifinite convex_pd)" proof (induct xs rule: convex_pd.principal_induct) show"P (convex_principal a)"for a proof (induct a rule: pd_basis_induct) case PDUnit thenshow ?caseby (simp only: convex_unit_Rep_compact_basis [symmetric] unit) next case PDPlus thenshow ?caseby (simp only: convex_plus_principal [symmetric] plus) qed qed (rule P)
subsection‹Monadic bind›
definition
convex_bind_basis :: "'a::bifinite pd_basis ==> ('a → 'b convex_pd) → 'b::bifinite convex_pd"where "convex_bind_basis = fold_pd (λa. Λ f. f⋅(Rep_compact_basis a)) (λx y. Λ f. x⋅f ∪♮ y⋅f)"
lemma approx_chain_convex_map: assumes"approx_chain a" shows"approx_chain (λi. convex_map⋅(a i))" using assms unfolding approx_chain_def by (simp add: lub_APP convex_map_ID finite_deflation_convex_map)
instance convex_pd :: (bifinite) bifinite proof show"∃(a::nat ==> 'a convex_pd → 'a convex_pd). approx_chain a" using bifinite [where 'a='a] by (fast intro!: approx_chain_convex_map) qed
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.