One Edge Endpoint Sector Complement Package
ProvedOneEdgeEndpointSectorComplementPackageLet be a finite set of old vertices, let be a finite set of old closed straight edges whose endpoints lie in , and let
Assume every old edge is nondegenerate and distinct old edge interiors are disjoint. Fix vertices with , and suppose the relative interior of the new segment is disjoint from . Let be a radius such that contains no vertex of other than and is disjoint from every old edge not incident with .
Let be the finite set of old edges incident with . For , let ; for an incident old edge , let be the vector from to the other endpoint of . Then the finite family of clockwise sectors in determined by the positive rays may be chosen so that each sector is open and connected, is contained in , is contained in , and the sectors cover
Moreover, every point of different from lies on one of the old incident positive radial germs from , and every point of different from lies on the new positive radial germ from toward .
Formalization Note This node is ported from the Trellis formalization of the crossing lemma and its consequences (wpegden/crossing-consequences, commit 8769d142, W. Pegden, Apache-2.0); the statement is the Trellis node OneEdgeEndpointSectorComplementPackage.
import Mathlib.Tactic import Mathlib.Analysis.Normed.Affine.AddTorsor import Mathlib.Algebra.Group.Fin.Basic import Mathlib.Analysis.InnerProductSpace.PiL2 import Mathlib.Analysis.SpecialFunctions.Pow.Real import Mathlib.Combinatorics.SimpleGraph.Finite import Mathlib.Data.Finset.Prod import Mathlib.Data.Set.Finite.Basic import Mathlib.LinearAlgebra.AffineSpace.AffineSubspace.Basic import Mathlib.Analysis.SpecialFunctions.Complex.Arg open Classical noncomputable section
lemma OneEdgeEndpointSectorComplementPackage
(A : Set (EuclideanSpace ℝ (Fin 2)))
(V : Finset (EuclideanSpace ℝ (Fin 2)))
(E : Finset (EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2)))
(p q : EuclideanSpace ℝ (Fin 2))
(hA :
A =
(V : Set (EuclideanSpace ℝ (Fin 2))) ∪
⋃ e : {e // e ∈ E}, segment ℝ e.1.1 e.1.2)
(hEdgeSource :
∀ e : EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2),
e ∈ E → e.1 ∈ V)
(hEdgeTarget :
∀ e : EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2),
e ∈ E → e.2 ∈ V)
(hEdgeNondegenerate :
∀ e : EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2),
e ∈ E → e.1 ≠ e.2)
(hEdgeOpenInteriorsDisjoint :
∀ e f : EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2),
e ∈ E → f ∈ E → e ≠ f →
Disjoint (openSegment ℝ e.1 e.2) (openSegment ℝ f.1 f.2))
(hpV : p ∈ V) (hqV : q ∈ V)
(hpq : p ≠ q)
(hNewInteriorDisjoint : Disjoint (openSegment ℝ p q) A)
(r : ℝ) (hr_pos : 0 < r)
(hr_vertices :
∀ v : EuclideanSpace ℝ (Fin 2),
v ∈ V → v ≠ p → v ∉ Metric.ball p r)
(hr_nonincident_edges :
∀ e : EuclideanSpace ℝ (Fin 2) × EuclideanSpace ℝ (Fin 2),
e ∈ E → e.1 ≠ p → e.2 ≠ p →
Disjoint (Metric.ball p r) (segment ℝ e.1 e.2)) :
let Incident :=
{e : {e // e ∈ E} // e.1.1 = p ∨ e.1.2 = p}
let u : Option Incident → EuclideanSpace ℝ (Fin 2) :=
fun i =>
match i with
| none => q - p
| some e =>
if e.1.1.1 = p then e.1.1.2 - p else e.1.1.1 - p
∃ clockwiseNext : Equiv.Perm (Option Incident),
∃ fullClockwiseTurn : ℝ,
∃ clockwiseTurn : Option Incident → Option Incident → ℝ,
∃ sector : Option Incident → Set (EuclideanSpace ℝ (Fin 2)),
fullClockwiseTurn = 2 * Real.pi ∧
0 < fullClockwiseTurn ∧
(∀ i j : Option Incident, 0 < clockwiseTurn i j) ∧
(∀ i j : Option Incident, clockwiseTurn i j ≤ fullClockwiseTurn) ∧
(∀ i j : Option Incident, clockwiseTurn i j = fullClockwiseTurn ↔ j = i) ∧
(∀ i j : Option Incident, j ≠ i →
clockwiseTurn i (clockwiseNext i) ≤ clockwiseTurn i j) ∧
(∀ i : Option Incident,
clockwiseNext i = i ↔ ∀ j : Option Incident, j = i) ∧
(∀ i : Option Incident,
IsOpen (sector i) ∧
IsConnected (sector i) ∧
sector i ⊆ Metric.ball p r ∧
sector i ⊆ (A ∪ segment ℝ p q)ᶜ) ∧
(∀ x : EuclideanSpace ℝ (Fin 2),
x ∈ Metric.ball p r → x ∈ A → x ≠ p →
∃ i : Incident, ∃ t : ℝ, 0 < t ∧ x = p + t • u (some i)) ∧
(∀ x : EuclideanSpace ℝ (Fin 2),
x ∈ segment ℝ p q → x ≠ p →
∃ t : ℝ, 0 < t ∧ x = p + t • u none) ∧
(∀ x : EuclideanSpace ℝ (Fin 2),
x ∈ Metric.ball p r → x ∈ (A ∪ segment ℝ p q)ᶜ →
∃ i : Option Incident, x ∈ sector i) := by sorry