(* Authors: F. Maric, M. Spasic, R. Thiemann *) section‹Rational Numbers Extended with Infinitesimal Element› theory QDelta imports
Abstract_Linear_Poly
Simplex_Algebra begin
datatype QDelta = QDelta rat rat
primrec qdfst :: "QDelta → rat" where "qdfst (QDelta a b) = a"
primrec qdsnd :: "QDelta → rat" where "qdsnd (QDelta a b) = b"
lemma [simp]: "QDelta (qdfst qd) (qdsnd qd) = qd" by (cases qd) auto
lemma [simp]: "[QDelta.qdsnd x = QDelta.qdsnd y; QDelta.qdfst y = QDelta.qdfst x]==> x = y" by (cases x) auto
instantiation QDelta :: rational_vector begin
definition zero_QDelta :: "QDelta"
where "0 = QDelta 0 0"
lemma valuate_rat_valuate: "lp{(λv. val (vl v) δ)} = val (lp{vl}) δ" unfolding valuate_def val_def using rational_vector.scale_sum_right[of δ "λx. Rep_linear_poly lp x * qdsnd (vl x)""{v :: nat. Rep_linear_poly lp v ≠ (0 :: rat)}"] using Rep_linear_poly by (auto simp add: field_simps sum.distrib qdfst_setsum qdsnd_setsum) (auto simp add: scaleRat_QDelta_def)
lemma delta0: assumes"qd1 ≤ qd2" shows"∀ ε. ε > 0 ∧ ε ≤ (δ0 qd1 qd2) ⟶ val qd1 ε ≤ val qd2 ε" proof- have"∧ e c1 c2 k1 k2 :: rat. [e ≥ 0; c1 < c2; k1 ≤ k2]==> c1 + e*k1 ≤ c2 + e*k2" proof- fix e c1 c2 k1 k2 :: rat show"[e ≥ 0; c1 < c2; k1 ≤ k2]==> c1 + e*k1 ≤ c2 + e*k2" using mult_left_mono[of "k1""k2""e"] using add_less_le_mono[of "c1""c2""e*k1""e*k2"] by simp qed thenshow ?thesis using assms by (auto simp add: δ0_def val_def less_eq_QDelta_def Let_def field_simps mult_left_mono) qed
primrec
δ_min ::"(QDelta × QDelta) list → rat" where "δ_min [] = 1" | "δ_min (h # t) = min (δ_min t) (δ0 (fst h) (snd h))"
lemma delta_gt_zero: "δ_min l > 0" by (induct l) (auto simp add: Let_def field_simps δ0_def)
lemma delta_le_one: "δ_min l ≤ 1" by (induct l, auto)
lemma delta_min_append: "δ_min (as @ bs) = min (δ_min as) (δ_min bs)" by (induct as, insert delta_le_one[of bs], auto)
lemma delta_min_mono: "set as ⊆ set bs ==> δ_min bs ≤ δ_min as" proof (induct as) case Nil thenshow ?caseusing delta_le_one by simp next case (Cons a as) from Cons(2) have"a ∈ set bs"by auto from split_list[OF this] obtain bs1 bs2 where bs: "bs = bs1 @ [a] @ bs2"by auto have bs: "δ_min bs = δ_min ([a] @ bs)"unfolding bs delta_min_append by auto show ?caseunfolding bs using Cons(1-2) by auto qed
lemma delta_min: assumes"∀ qd1 qd2. (qd1, qd2) ∈ set qd ⟶ qd1 ≤ qd2" shows"∀ ε. ε > 0 ∧ ε ≤ δ_min qd ⟶ (∀ qd1 qd2. (qd1, qd2) ∈ set qd ⟶ val qd1 ε ≤ val qd2 ε)" using assms using delta0 by (induct qd, 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.