@@ -227,6 +227,28 @@ theorem two_zsmul_oangle_center_add_two_zsmul_oangle_eq_pi {s : Sphere P} {p₁
227227 rw [← oangle_center_eq_two_zsmul_oangle hp₁ hp₂ hp₃ hp₂p₁ hp₂p₃,
228228 oangle_eq_pi_sub_two_zsmul_oangle_center_right hp₁ hp₃ hp₁p₃, add_sub_cancel]
229229
230+ /-- **Alternate segment theorem** : Oriented angle version of "the angle between a tangent and
231+ a chord equals the inscribed angle subtending that chord", for oriented angles mod π,
232+ represented here as equality of twice the angles. -/
233+ theorem two_zsmul_oangle_tangent_eq {s : Sphere P} {p₁ p₂ p₃ p₄ : P} (hp₁ : p₁ ∈ s) (hp₂ : p₂ ∈ s)
234+ (hp₃ : p₃ ∈ s) (htan : s.IsTangentAt p₁ line[ℝ, p₁, p₄]) (hp₄p₁ : p₄ ≠ p₁) (hp₃p₁ : p₃ ≠ p₁)
235+ (hp₃p₂ : p₃ ≠ p₂) (hp₂p₁ : p₂ ≠ p₁) :
236+ (2 : ℤ) • ∡ p₄ p₁ p₂ = (2 : ℤ) • ∡ p₁ p₃ p₂ := by
237+ have hcenter : s.center ≠ p₁ := by
238+ rintro rfl
239+ exact hp₃p₁ (dist_eq_zero.mp (by rw [mem_sphere.mp hp₃, ← mem_sphere.mp hp₁, dist_self]))
240+ have htan_chord : (2 : ℤ) • ∡ p₄ p₁ p₂ = π + (2 : ℤ) • ∡ s.center p₁ p₂ := by
241+ have hright : (2 : ℤ) • ∡ p₄ p₁ s.center = π := by
242+ rw [Real.Angle.two_zsmul_eq_pi_iff, ← Real.Angle.abs_toReal_eq_pi_div_two_iff,
243+ ← angle_eq_abs_oangle_toReal hp₄p₁ hcenter]
244+ exact htan.angle_eq_pi_div_two (right_mem_affineSpan_pair ℝ p₁ p₄)
245+ rw [← oangle_add hp₄p₁ hcenter hp₂p₁, smul_add, hright]
246+ have hinscribed : (2 : ℤ) • ∡ p₁ p₃ p₂ = π + (2 : ℤ) • ∡ s.center p₁ p₂ := by
247+ have h := two_zsmul_oangle_center_add_two_zsmul_oangle_eq_pi hp₁ hp₃ hp₂ hp₃p₁ hp₃p₂ hp₂p₁.symm
248+ rw [oangle_rev, smul_neg] at h
249+ rw [← h]; abel
250+ exact htan_chord.trans hinscribed.symm
251+
230252/-- A base angle of an isosceles triangle with apex at the center of a circle is acute. -/
231253theorem abs_oangle_center_left_toReal_lt_pi_div_two {s : Sphere P} {p₁ p₂ : P} (hp₁ : p₁ ∈ s)
232254 (hp₂ : p₂ ∈ s) : |(∡ s.center p₂ p₁).toReal| < π / 2 :=
0 commit comments