Polygonal connectedness over a carrier #
Schoenflies.exists_poly_of_isPreconnected joins two points of an open connected subset
of the plane by a polygonal path. The redrawing argument needs the same conclusion for a
carrier that is not open in the plane: the ambient set there is the plane minus finitely
many open squares, and the basic neighbourhood of a point on a square's boundary is a
half-disk or a three-quarter disk rather than a ball.
This module restates the clopen argument over an arbitrary carrier C. The only hypothesis
on C is that it is locally polygonally connected: every point has a relatively open
neighbourhood all of whose points it reaches by a polygonal path inside C. Openness of C
is used nowhere; the ball of the classical proof appears only in
isLocallyPolyConnected_of_isOpen, which is what recovers the old statement.
Blueprint #
Brick B6 of lem:polygonal-redrawing (H6): polygonal connectivity one level up.
PolyReaches— "joined by a polygonal path insideC", as an inductive relation.LocallyPolygonal.leanexposes its vertex-list representation and delegates the relation operations to this implementation.IsLocallyPolyConnected— the hypothesis replacing openness.PolyReaches.of_isPreconnected— Lemma 1.1 (polygonal connectedness) over a carrier.exists_poly_of_isPreconnected'— the oldexists_poly_of_isPreconnectedre-derived from it, verbatim; theexamplebelow it is a machine check that the statements agree.
Joined by a polygonal path inside a carrier #
PolyReaches C x y: there is a polygonal path from x to y all of whose segments lie
in C. Built at the far end — a path is extended by one segment at a time — because that is
the shape both halves of the clopen argument use. refl carries x ∈ C so that a constant
path witnesses membership, matching poly [x] = {x}.
- refl {C : Set Plane} {x : Plane} (hx : x ∈ C) : PolyReaches C x x
- step {C : Set Plane} {x y z : Plane} (h : PolyReaches C x y) (hseg : segment ℝ y z ⊆ C) : PolyReaches C x z
Instances For
A single segment inside C is already a polygonal path.
Symmetry: a path is run backwards one segment at a time, each reversed segment being the same set.
The relation and the vertex-list representation agree #
A polygonal path in the sense of PolyReaches yields a vertex list with the carrier of
its polygon inside C. This is poly_concat used once per step.
Local polygonal connectedness #
C is locally polygonally connected when every point of C has a relatively open
neighbourhood in C each of whose points it reaches by a polygonal path inside C.
The neighbourhood is presented as V ∩ C for an ambient open V, which is exactly what a
relatively open neighbourhood is; the paths are only required to stay inside C, not inside
the neighbourhood, since that is all the clopen argument uses and it is the weaker demand on
a producer. Ball, half-disk and three-quarter disk all qualify.
Equations
- Schoenflies.IsLocallyPolyConnected C = ∀ w ∈ C, ∃ (V : Set Schoenflies.Plane), IsOpen V ∧ w ∈ V ∧ ∀ z ∈ V ∩ C, Schoenflies.PolyReaches C w z
Instances For
The relative-openness step, stated once because the clopen argument uses it twice — for the reachable set and, run backwards, for its relative complement.
A subset of C closed under "reach one more point of C by a polygonal path" is relatively
open in C. The witness is the union of all ambient open sets that are polygonally attached
to a point of S; no choice is needed to assemble it.
The theorem #
Lemma 1.1 (polygonal connectedness) over a carrier: in a relatively connected, locally polygonally connected set, any two points are joined by a polygonal path inside the set.
The proof is the clopen argument. The points reachable from x are relatively open in C,
and so are the unreachable ones — the same lemma, since "unreachable" is stable under
reaching too, by symmetry. IsPreconnected C then forbids the split.
The vertex-list reading of the carrier theorem, matching the shape PolyPath delivers.
Producers of the hypothesis #
Two convex pieces of C that meet make one polygonally connected piece: the bent path
through a common point. This is the shape brick B5 needs for the corner neighbourhood, which
is a disk minus an open quadrant — the union of two half-disks.
An open set is locally polygonally connected: the balls it contains are convex. This is the only place a ball appears, and it is what recovers the old statement.
PolyPath.exists_poly_of_isPreconnected, re-derived from the carrier version.