definition✐‹tag important› Triangle_area :: "'a::real_inner ==> 'a ==> 'a ==> real" where"Triangle_area x y z = abs(sin (angle x y z)) * dist x y * dist y z"
lemma Triangle_area_per1 : "Triangle_area a b c = Triangle_area b c a" proof - have H : "abs(sin (angle a b c)) * dist b c = abs(sin (angle b a c)) * dist a c" using sine_law_triangle by (metis (mono_tags, opaque_lifting) abs_mult real_abs_dist) show ?thesis apply(simp add: Triangle_area_def) using H by (metis abs_of_nonneg angle_commute dist_commute sin_angle_nonneg sine_law_triangle) qed
lemma Triangle_area_per2 : "Triangle_area a b c = Triangle_area b a c" proof - have H : "abs(sin (angle a b c)) * dist b c = abs(sin (angle b a c)) * dist a c" using sine_law_triangle by (metis (mono_tags, opaque_lifting) abs_mult real_abs_dist) show ?thesis using H by (simp add: Triangle_area_def dist_commute[of a b]) qed
lemma collinear_angle: fixes a b c :: "'a::euclidean_space" shows"collinear {a, b, c} ==> a ≠ b ==> b ≠ c ==> angle a b c ∈ {0, pi}" proof (cases "a = c") case True assume Col : "collinear {a, b, c}" assume H1 : "a ≠ b" assume H2 : "b ≠ c" assume H3 : "a = c" show ?thesis using H1 H3 angle_refl_mid by auto next case False assume Col : "collinear {a, b, c}" assume H1 : "a ≠ b" assume H2 : "b ≠ c" assume H3 : "a ≠ c"
consider (bet1) "between (b, c) a" | (bet2) "between (c, a) b" | (bet3) "between (a, b) c" using Col collinear_between_cases by auto thenshow ?thesis proof cases case bet1 assume B1: "between (b, c) a" have H: "angle c a b = pi" apply(rule strictly_between_implies_angle_eq_pi) using B1 H3 H1 by (auto simp: between_commute) show ?thesis by (smt (verit) H angle_nonneg angle_sum_triangle insert_iff) next case bet2 assume B1: "between (c, a) b" show ?thesis by (metis H1 H2 bet2 between_commute sin_angle_zero_iff sin_pi strictly_between_implies_angle_eq_pi) next case bet3 assume B1: "between (a, b) c" have H: "angle b c a = pi" apply(rule strictly_between_implies_angle_eq_pi) using B1 H3 H2 H1 by (auto simp: between_commute) show ?thesis by (smt (verit) H angle_nonneg angle_sum_triangle insert_iff) qed qed
lemma Triangle_area_0 : fixes c :: "'a::euclidean_space" shows"Triangle_area a b c = 0 ⟷ collinear {a,b,c}" proof - show ?thesis apply(simp add: Triangle_area_def) using collinear_angle by (metis (no_types, lifting) Angles.angle_collinear collinear_2 insertCI insert_absorb sin_angle_zero_iff) qed
lemma Angle_longer_side : fixes a :: "'a :: euclidean_space" assumes Col : "between (b,d) c" assumes NeqBC : "b ≠ c" shows"angle a b c = angle a b d" proof (cases "a = b ∨ b = d ∨ c = d") case True thenshow ?thesis using Col by auto next case False assume H : "¬ (a = b ∨ b = d ∨ c = d)" have NeqAB : "a ≠ b" using H by auto have NeqBD : "b ≠ d" using H by auto have NeqCD : "c ≠ d" using H by auto have Goal1 : "norm (d - b) *R (c - b) = norm (c - b) *R (d - b)" apply(rule vangle_eq_0D) using Col by (metis Groups.add_ac(2) NeqBC NeqCD add_le_same_cancel1 angle_def angle_nonneg angle_sum_triangle eq_add_iff order.eq_iff strictly_between_implies_angle_eq_pi) have Goal2 : "(a - b) ∙ (c - b) * norm (d - b) ≠ (a - b) ∙ (d - b) * norm (c - b) ==> a = b" apply(simp only: mult.commute[where b="norm (d - b)"]) apply(simp only: mult.commute[where b="norm (c - b)"]) apply(simp only: real_inner_class.inner_scaleR_right[THEN sym]) using Goal1 by auto have Goal : "(a - b) ∙ (c - b) * (norm (a - b) * norm (d - b)) = (a - b) ∙ (d - b) * (norm (a - b) * norm (c - b))" using Goal2 by auto show ?thesis apply(simp add: angle_def) using NeqAB NeqBD NeqCD NeqBC apply(simp only: vangle_def) using Goal by (smt (verit, best) eq_iff_diff_eq_0 frac_eq_eq no_zero_divisors norm_eq_zero) qed
lemma Triangle_area_comb : fixes c :: "'a::euclidean_space" assumes Col : "between (b,c) m" shows"Triangle_area a b m + Triangle_area a c m = Triangle_area a b c" proof (cases "b = m ∨ c = m") case True then have Eq : "b = m ∨ c = m" by auto have Tri0 : "Triangle_area a m m = 0" by (auto simp: Triangle_area_0) show ?thesis using Eq Tri0 using Triangle_area_per1 Triangle_area_per2 by (metis add.right_neutral add_0) next case False then have Neq : "¬(b = m ∨ c = m)" by auto have NeqBM : "b ≠ m" using Neq by auto have NeqCM : "c ≠ m" using Neq by auto have Angle1 : "angle a b m = angle a b c" using Col Angle_longer_side NeqBM NeqCM by auto have Angle2 : "angle a c m = angle a c b" using Col Angle_longer_side NeqBM NeqCM between_commute by metis have"∣sin (angle a b m)∣ * dist a b * dist b m + ∣sin (angle a c m)∣ * dist a c * dist c m = ∣sin (angle a b c)∣ * dist a b * dist b m + ∣sin (angle a c b)∣ * dist a c * dist c m" using Angle1 Angle2 by simp alsohave"∣sin (angle a b c)∣ * dist a b * dist b m + ∣sin (angle a c b)∣ * dist a c * dist c m = ∣sin (angle a b c)∣ * dist a b * dist b m + ∣sin (angle a b c)∣ * dist a b * dist c m" using sine_law_triangle by (smt (verit) congruent_triangle_sss(17) dist_commute sin_angle_nonneg) alsohave "∣sin (angle a b c)∣ * dist a b * dist b m + ∣sin (angle a b c)∣ * dist a b * dist c m = ∣sin (angle a b c)∣ * dist a b * (dist b m + dist c m)" by (metis inner_add(2) inner_real_def) alsohave"∣sin (angle a b c)∣ * dist a b * (dist b m + dist c m) = ∣sin (angle a b c)∣ * dist a b * dist b c" by (metis assms between dist_commute) finallyhave Goal : "∣sin (angle a b m)∣ * dist a b * dist b m + ∣sin (angle a c m)∣ * dist a c * dist c m = ∣sin (angle a b c)∣ * dist a b * dist b c" by simp show ?thesis apply(simp add: Triangle_area_def) using Goal by blast qed
lemma Triangle_area_cal : fixes a :: "'a::euclidean_space" assumes Col : "collinear {a,m,b}" shows"∃ k. dist a m * k = Triangle_area a c m ∧ dist b m * k = Triangle_area b c m" proof (cases "b = m ∨ a = m") case True then have Eq :"(a ≠ m ∧ b = m) ∨ (a = m ∧ b ≠ m) ∨ (a = m ∧ b = m)" by auto show ?thesis using Eq by(auto simp: Triangle_area_0 collinear_3_eq_affine_dependent exI[where x="Triangle_area a c m / dist a m"]
exI[where x="Triangle_area b c m / dist b m"]) next case False then have H : "¬ (b = m ∨ a = m)" by simp have NeqBM : "b ≠ m"and NeqMA : "m ≠ a" using H by auto have H1: "dist a m * ∣sin (angle a m c)∣ * dist c m = ∣sin (angle a c m)∣ * dist a c * dist c m" using sine_law_triangle by (smt (verit) angle_commute dist_commute mult.commute sin_angle_nonneg) have"dist b m * ∣sin (angle a m c)∣ * dist c m = dist b m * ∣sin (pi - angle a m c)∣ * dist c m" by auto alsohave"dist b m * ∣sin (pi - angle a m c)∣ * dist c m = dist b m * ∣sin (angle b m c)∣ * dist c m" using angle_inverse[THEN sym] Col NeqBM NeqMA by (smt (verit, ccfv_SIG) Angle_longer_side angle_commute between_commute collinear_between_cases sin_pi_minus) alsohave"dist b m * ∣sin (angle b m c)∣ * dist c m = ∣sin (angle b c m)∣ * dist b c * dist c m" using sine_law_triangle by (metis abs_of_nonneg angle_commute dist_commute mult.commute sin_angle_nonneg) finallyhave H2: "dist b m * ∣sin (angle a m c)∣ * dist c m = ∣sin (angle b c m)∣ * dist b c * dist c m" by simp show ?thesis apply(simp add: Triangle_area_def) apply(rule exI[where x="∣sin (angle a m c)∣ * dist c m"]) using H1 H2 by auto qed
lemma Triangle_area_comb_alt : fixes a :: "'a::euclidean_space" assumes Col1 : "collinear {a,m,b}" assumes Col2 : "collinear {c,k,m}" shows Goal : "∃ h. dist a m * h = Triangle_area a c k ∧ dist b m * h = Triangle_area b c k" proof - obtain"H"where TriB : "dist a m * H = Triangle_area a c m ∧ dist b m * H = Triangle_area b c m" using Col1 Triangle_area_cal by blast obtain"h"where TriS : "dist a m * h = Triangle_area a k m ∧ dist b m * h = Triangle_area b k m" using Col1 Triangle_area_cal by blast
consider (bet1) "between (k, m) c" | (bet2) "between (m, c) k" | (bet3) "between (c, k) m" using Col2 collinear_between_cases by auto thenshow ?thesis proof cases case bet1 have AreaAC : "dist a m * H = Triangle_area a c m"and AreaBC : "dist b m * H = Triangle_area b c m" using TriB by auto have AreaAM : "dist a m * h = Triangle_area a k m"and AreaBM : "dist b m * h = Triangle_area b k m" using TriS by auto assume Bet : "between (k, m) c" have"dist a m * (h - H) = dist a m * h - dist a m * H" by (simp add: right_diff_distrib) alsohave"dist a m * h - dist a m * H = Triangle_area a k m - Triangle_area a c m" using AreaAC AreaAM by auto alsohave"Triangle_area a k m - Triangle_area a c m = Triangle_area a c k" using Bet Triangle_area_comb by (metis Triangle_area_per1 Triangle_area_per2 diff_eq_eq) finallyhave Goal1 : "dist a m * (h - H) = Triangle_area a c k" by simp have"dist b m * (h - H) = dist b m * h - dist b m * H" by (simp add: right_diff_distrib) alsohave"dist b m * h - dist b m * H = Triangle_area b k m - Triangle_area b c m" using AreaBC AreaBM by auto alsohave"Triangle_area b k m - Triangle_area b c m = Triangle_area b c k" using Bet Triangle_area_comb by (metis Triangle_area_per1 Triangle_area_per2 diff_eq_eq) finallyhave Goal2 : "dist b m * (h - H) = Triangle_area b c k" by simp show ?thesis using Goal1 Goal2 by blast next case bet2 have AreaAC : "dist a m * H = Triangle_area a c m"and AreaBC : "dist b m * H = Triangle_area b c m" using TriB by auto have AreaAM : "dist a m * h = Triangle_area a k m"and AreaBM : "dist b m * h = Triangle_area b k m" using TriS by auto assume Bet : "between (m, c) k" have"dist a m * (H - h) = dist a m * H - dist a m * h" by (simp add: right_diff_distrib) alsohave"dist a m * H - dist a m * h = Triangle_area a c m - Triangle_area a k m" using AreaAC AreaAM by auto alsohave"Triangle_area a c m - Triangle_area a k m = Triangle_area a c k" using Bet Triangle_area_comb by (smt (verit) between_triv1) finallyhave Goal1 : "dist a m * (H - h) = Triangle_area a c k" by simp have"dist b m * (H - h) = dist b m * H - dist b m * h" by (simp add: right_diff_distrib) alsohave"dist b m * H - dist b m * h = Triangle_area b c m - Triangle_area b k m" using AreaBC AreaBM by auto alsohave"Triangle_area b c m - Triangle_area b k m = Triangle_area b c k" using Bet Triangle_area_comb by (smt (verit) between_triv1) finallyhave Goal2 : "dist b m * (H - h) = Triangle_area b c k" by simp show ?thesis using Goal1 Goal2 by blast next case bet3 have AreaAC : "dist a m * H = Triangle_area a c m"and AreaBC : "dist b m * H = Triangle_area b c m" using TriB by auto have AreaAM : "dist a m * h = Triangle_area a k m"and AreaBM : "dist b m * h = Triangle_area b k m" using TriS by auto assume Bet : "between (c, k) m" have"dist a m * (H + h) = Triangle_area a c k" by (simp add: AreaAC TriS Triangle_area_comb bet3 distrib_left) moreoverhave"dist b m * (H + h) = Triangle_area b c k" by (simp add: AreaBC TriS Triangle_area_comb bet3 distrib_left) ultimatelyshow ?thesis by blast qed qed
lemma Cevas : fixes a :: "'a::euclidean_space" assumes MidCol : "collinear {a,k,d} ∧ collinear {b,k,e} ∧ collinear {c,k,f}" assumes TriCol : "collinear {a,f,b} ∧ collinear {a,e,c} ∧ collinear {b,d,c}" assumes Triangle : "¬ collinear {a,b,c}" shows"dist a f * dist b d * dist c e = dist f b * dist d c * dist e a" proof - obtain"n1"where Tri1: "dist a f * n1 = Triangle_area a c k ∧ dist b f * n1 = Triangle_area b c k" by (meson MidCol TriCol Triangle_area_comb_alt) obtain"n2"where Tri2 : "dist a e * n2 = Triangle_area a b k ∧ dist c e * n2 = Triangle_area c b k" by (meson MidCol TriCol Triangle_area_comb_alt) obtain"n3"where Tri3 : "dist b d * n3 = Triangle_area b a k ∧ dist c d * n3 = Triangle_area c a k" by (meson MidCol TriCol Triangle_area_comb_alt) have Tri1'1 : "dist a f * n1 = Triangle_area a c k"and Tri1'2 : "dist b f * n1 = Triangle_area b c k" using assms by (auto simp: Tri1) have Tri2'1 : "dist c e * n2 = Triangle_area c b k"and Tri2'2 : "dist a e * n2 = Triangle_area a b k" using assms by (auto simp: Tri2) have Tri3'1 : "dist c d * n3 = Triangle_area c a k"and Tri3'2 : "dist b d * n3 = Triangle_area b a k" using assms by (auto simp: Tri3) have"dist a f * n1 * dist b d * n3 * dist c e * n2 = Triangle_area a c k * Triangle_area b a k * Triangle_area c b k" using Tri1'1 Tri2'1 Tri3'2 by simp alsohave"Triangle_area a c k * Triangle_area b a k * Triangle_area c b k = Triangle_area c a k * Triangle_area a b k * Triangle_area b c k" using Triangle_area_per2 by metis alsohave"Triangle_area c a k * Triangle_area a b k * Triangle_area b c k = dist b f * n1 * dist c d * n3 * dist a e * n2" using Tri1'2 Tri2'2 Tri3'1 by simp alsohave"dist b f * n1 * dist c d * n3 * dist a e * n2 = dist f b * n1 * dist d c * n3 * dist e a * n2" using dist_commute by metis finallyhave Goal: "dist a f * n1 * dist b d * n3 * dist c e * n2 = dist f b * n1 * dist d c * n3 * dist e a * n2" by simp then consider (n2) "n2 = 0" | (n1) "n1 = 0" | (n3) "n3 = 0" |
(dist) "dist a f * (dist b d * dist c e) = dist f b * (dist d c * dist e a)" by auto thenshow ?thesis proof cases case n2 thenshow ?thesis proof - assume n0 : "n2 = 0" have H1 : "Triangle_area c b k = 0" using Tri2'1 n0 by auto have H1' : "collinear {c,b,k}" using H1 Triangle_area_0 by auto have H1 : "Triangle_area a b k = 0" using Tri2'2 n0 by auto have H2' : "collinear {a,b,k}" using H1 Triangle_area_0 by auto have H : "b = k" using H1' H2' collinear_3_trans Triangle collinear_3_trans by (metis Triangle_area_0 Triangle_area_per1) have H1 : "b = f" using H Triangle collinear_3_trans MidCol TriCol by (metis doubleton_eq_iff) have H2 : "b = d" using H H1 Triangle collinear_3_trans MidCol TriCol by blast show ?thesis using H H1 H2 by simp qed next case n1 thenshow ?thesis proof - assume n0 : "n1 = 0" have H1 : "Triangle_area a c k = 0" using Tri1'1 n0 by auto have H1' : "collinear {a,c,k}" using H1 Triangle_area_0 by auto have H1 : "Triangle_area b c k = 0" using Tri1'2 n0 by auto have H2' : "collinear {b,c,k}" using H1 Triangle_area_0 by auto have H : "c = k" using H1' H2' collinear_3_trans Triangle collinear_3_trans by (smt (verit) insert_commute) have H1 : "c = d" using H H1' H2' Triangle by (metis Tri3'1 Tri3'2 Triangle_area_0 Triangle_area_per2 dist_eq_0_iff mult_eq_0_iff) have H2 : "c = e" using H H1 H1' H2' Triangle by (metis Tri2'1 Tri2'2 Triangle_area_0 Triangle_area_per2 dist_eq_0_iff mult_eq_0_iff) show ?thesis using H H1 H2 by simp qed next case n3 thenshow ?thesis proof - assume n0 : "n3 = 0" have H1 : "Triangle_area c a k = 0" using Tri3'1 n0 by auto have H1' : "collinear {c,a,k}" using H1 Triangle_area_0 by auto have H1 : "Triangle_area b a k = 0" using Tri3'2 n0 by auto have H2' : "collinear {b,a,k}" using H1 Triangle_area_0 by auto have H : "a = k" using H1' H2' collinear_3_trans Triangle by (metis (full_types) insert_commute) have H1 : "a = f" using H H1' H2' Triangle by (metis Tri1'1 Tri1'2 Triangle_area_0 Triangle_area_per1 dist_eq_0_iff mult_eq_0_iff) have H2 : "a = e" using H H1 H1' H2' collinear_3_trans Triangle by (metis MidCol TriCol collinear_3_eq_affine_dependent) show ?thesis using H H1 H2 by simp qed next case dist thenshow ?thesis by auto qed qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 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.