Plane Drawing Dart Unit First Germs For Radii
ProvedPlaneDrawingDartUnitFirstGermsForRadiiLet be a finite simple graph, let be an ordinary polygonal drawing of , and let be dart-arc data. Let be a positive radius at each vertex, and suppose that for every outgoing dart with tail , the radius is at most the length of the first segment vector of at . Then there are nonzero germ directions and radial germs for all outgoing darts such that, for each outgoing dart at , the germ direction is the normalized first segment vector
and each radial germ has the form
for its chosen germ direction and some . Moreover, in this construction the same radial germ is exactly the full-radius segment
It is contained in the corresponding drawn edge carrier and in the metric ball .
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 PlaneDrawingDartUnitFirstGermsForRadii.
import Mathlib.Tactic 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.Combinatorics.SimpleGraph.DegreeSum import Definitions.Def_OrdinaryPolygonalDrawing import Definitions.Def_PlaneDrawingDartArcData open Classical noncomputable section
lemma PlaneDrawingDartUnitFirstGermsForRadii {V : Type*} [Fintype V]
(G : SimpleGraph V) [Fintype G.edgeSet] [DecidableRel G.Adj]
(D : OrdinaryPolygonalDrawing G)
(A : PlaneDrawingDartArcData G D)
(R : V → ℝ) (hR : ∀ v : V, 0 < R v)
(hR_le_first :
∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
R v ≤ ‖(A.dartArc d.1).vertices[1]'(Nat.lt_of_succ_le (A.dartArc d.1).length_ge_two) -
D.vertexPlacement v‖) :
∃ germDirection :
∀ v : V, {d : G.Dart // d.toProd.1 = v} → EuclideanSpace ℝ (Fin 2),
∃ radialGerm :
∀ v : V, {d : G.Dart // d.toProd.1 = v} →
Set (EuclideanSpace ℝ (Fin 2)),
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
germDirection v d ≠ 0) ∧
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
germDirection v d =
(‖(A.dartArc d.1).vertices[1]'(Nat.lt_of_succ_le
(A.dartArc d.1).length_ge_two) - D.vertexPlacement v‖)⁻¹ •
((A.dartArc d.1).vertices[1]'(Nat.lt_of_succ_le
(A.dartArc d.1).length_ge_two) - D.vertexPlacement v)) ∧
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
∃ r : ℝ, 0 < r ∧ r ≤ R v ∧
radialGerm v d =
openSegment ℝ (D.vertexPlacement v)
(D.vertexPlacement v + r • germDirection v d)) ∧
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
radialGerm v d =
openSegment ℝ (D.vertexPlacement v)
(D.vertexPlacement v + R v • germDirection v d)) ∧
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
radialGerm v d ⊆ (D.edgeArc (A.dartEdge d.1)).carrier) ∧
(∀ (v : V) (d : {d : G.Dart // d.toProd.1 = v}),
radialGerm v d ⊆ Metric.ball (D.vertexPlacement v) (R v)) := by sorry