Ptolemy's theorem #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file proves Ptolemy's theorem on the lengths of the diagonals and sides of a cyclic quadrilateral.
Main theorems #
mul_dist_add_mul_dist_eq_mul_dist_of_cospherical
: Ptolemy’s Theorem (Freek No. 95).
TODO: The current statement of Ptolemy’s theorem works around the lack of a "cyclic polygon" concept in mathlib, which is what the theorem statement would naturally use (or two such concepts, since both a strict version, where all vertices must be distinct, and a weak version, where consecutive vertices may be equal, would be useful; Ptolemy's theorem should then use the weak one).
An API needs to be built around that concept, which would include:
- strict cyclic implies weak cyclic,
- weak cyclic and consecutive points distinct implies strict cyclic,
- weak/strict cyclic implies weak/strict cyclic for any subsequence,
- any three points on a sphere are weakly or strictly cyclic according to whether they are distinct,
- any number of points on a sphere intersected with a two-dimensional affine subspace are cyclic in some order,
- a list of points is cyclic if and only if its reversal is,
- a list of points is cyclic if and only if any cyclic permutation is, while other permutations are not when the points are distinct,
- a point P where the diagonals of a cyclic polygon cross exists (and is unique) with weak/strict betweenness depending on weak/strict cyclicity,
- four points on a sphere with such a point P are cyclic in the appropriate order, and so on.
theorem
euclidean_geometry.mul_dist_add_mul_dist_eq_mul_dist_of_cospherical
{V : Type u_1}
[normed_add_comm_group V]
[inner_product_space ℝ V]
{P : Type u_2}
[metric_space P]
[normed_add_torsor V P]
{a b c d p : P}
(h : euclidean_geometry.cospherical {a, b, c, d})
(hapc : euclidean_geometry.angle a p c = real.pi)
(hbpd : euclidean_geometry.angle b p d = real.pi) :
has_dist.dist a b * has_dist.dist c d + has_dist.dist b c * has_dist.dist d a = has_dist.dist a c * has_dist.dist b d
Ptolemy’s Theorem.