The local source grid, and the missing hypothesis of the anchored square mesh #
Two things, and the second is the more important.
1. prop:anchored-square-mesh clause 5 — which hypothesis repairs it #
docs/ROADMAP.md records clause 5, the skeleton of T is 2-connected, as false for
Schoenflies.squareMesh when the fresh-point set is too small, and names
Schoenflies.FreshDense as "the shape the missing hypothesis should take". The first section
of this module checks that, and the answer is no: FreshDense alone does not repair
clause 5.
Schoenflies.freshDense_of_four_sqrt_two_le— for4√2 ≤ δ,FreshDense fresh δholds for every listfresh, the empty one included, becauseSitself has diameter2√2. SoFreshDense fresh δis vacuous at largeδand excludes nothing.Schoenflies.freshDense_not_isTwoConnected— the counterexample made formal: atδ = 4√2the hypotheses0 < δandFreshDense [] δboth hold andsquareMesh δ [] anchorsis still not 2-connected.
What does repair it is FreshDense together with a bound on δ:
Schoenflies.exists_two_distinct_fresh_of_freshDense—FreshDense fresh δandδ < 4force two distinct fresh points. (4is not the sharp constant —4√2is — but it is the one a side ofS, whose two ends are2apart, gives with no work. The blueprint's ownδ = ε_n = 2^{-n}is far below either.)
and two distinct fresh points is exactly the right amount, because fewer is always fatal:
Schoenflies.not_isTwoConnected_meshGraph_of_fresh_subsingleton— a mesh whose fresh points are not two distinct points is never 2-connected. This closes the caseSquareMeshFixed.leanleft open in prose: with exactly one fresh pointzthe mesh is connected, butzis a cut vertex, because the spoke atzis the only edge of the mesh that changes the sup norm and every other edge preserves it.
So the correct statement of clause 5 carries the hypothesis ∃ z ∈ fresh, ∃ w ∈ fresh, z ≠ w,
which FreshDense fresh δ ∧ δ < 4 supplies, and which is necessary as well as sufficient in
the degenerate range.
2. prop:local-grid-attachment — the grid #
The blueprint's proof begins: "Choose sufficiently fine finite horizontal and vertical
coordinate sets in W, with at least two intervals in each direction. Begin with the outer
rectangle of the resulting grid K … By lem:subdivision-ear-preserve, K is 2-connected."
Schoenflies.localGrid is that K, as a def: the uniform k × k grid on the closed square
W of centre p and radius s. Schoenflies/SquareMeshConnected.lean and
Schoenflies/SquareMeshFixed.lean supply everything combinatorial about a grid, so what is
added here is the quantitative clause the proposition needs — every closed grid rectangle has
diameter < ε — together with the instantiation of the general grid lemmas at these
coordinates.
The rest of prop:local-grid-attachment — the overlay of K with the polygonal nonboundary
skeleton of Γ, the three cases, and the component-joining loop — is not here; see the
report.
Blueprint #
prop:anchored-square-mesh, clause 5 —freshDense_of_four_sqrt_two_le,freshDense_not_isTwoConnected,exists_two_distinct_fresh_of_freshDense,not_isTwoConnected_meshGraph_of_fresh_subsingleton,not_isTwoConnected_squareMesh_of_fresh_subsingleton.prop:local-grid-attachment, the gridK—localGrid,localGrid_isTwoConnected,localGrid_subdivide_isTwoConnected,localGrid_isDrawing,localGrid_outer_cycle.prop:local-grid-attachment, clause 3 —dist_le_of_mem_localGridCell(the closed grid rectangle),dist_lt_of_avoiding_localGrid(a connected subset ofWmissing the grid),localGridCount,localGridCount_spec,localGrid_fine.lem:union-two-connected— used throughGraph.IsTwoConnected.unionandGraph.IsTwoConnected.ear;Graph.IsTwoConnected.of_le_of_vertexSet_subsetis the "spanning 2-connected subgraph" form the assembly needs.
The diameter of S #
S = modelCurve is the frame of [-1,1]², so any two of its points are at sup distance at
most 2 and hence at Euclidean distance at most 2√2. That single bound is what makes
FreshDense fresh δ vacuous once δ ≥ 4√2.
Any two points of S are within 2√2.
FreshDense is vacuous at large δ. For δ ≥ 4√2 every list of fresh points is
δ-dense, the empty one included: the whole of S has diameter 2√2 ≤ δ/2.
This is the first half of the finding: FreshDense alone cannot be the missing hypothesis of
prop:anchored-square-mesh clause 5, because it does not exclude fresh = [].
The counterexample, formally. There is a positive δ for which FreshDense [] δ
holds and the mesh is still not 2-connected. So clause 5 is not repaired by adding
FreshDense alone.
What does repair clause 5 #
A side of S is a connected subset of S whose two ends are 2 apart. If no two fresh points
are distinct then some side avoids all of them — a single point cannot lie on both the top and
the bottom side — and FreshDense fresh δ applied to that side forces 4 ≤ δ.
FreshDense with a small δ gives two distinct fresh points. This is the hypothesis
prop:anchored-square-mesh clause 5 actually needs, and the blueprint supplies it: its
δ = ε_n = 2^{-n} is well below 4.
Fewer than two distinct fresh points is always fatal #
SquareMeshFixed.not_isTwoConnected_squareMesh_of_fresh_nil settles fresh = [] by showing
the mesh disconnected. The remaining degenerate case — exactly one fresh point — is settled
here, and by the same invariant.
Every edge of the mesh is a subsegment of a source segment, and a source segment is either a
side of a ring, on which the sup norm is constant, or the spoke at a fresh point z, along
which the only point of sup norm 1 is z itself. So once z is deleted, no edge of the
mesh joins a vertex of sup norm 1 to a vertex of smaller sup norm: z is a cut vertex.
Along an edge of the mesh whose ends are both different from the one fresh point z, the
predicate "sup norm is 1" is constant.
A mesh whose fresh points are not two distinct points is never 2-connected. With none
the mesh is disconnected (not_connected_meshGraph_of_fresh_nil); with one, z, the point z
is a cut vertex.
This is the second half of the finding: two distinct fresh points is not merely a convenient hypothesis for clause 5, it is a necessary one.
prop:anchored-square-mesh clause 5 needs two distinct fresh points, for
Schoenflies.squareMesh itself.
A spanning 2-connected subgraph makes the whole graph 2-connected #
The form in which every assembly out of lem:union-two-connected is finished: a chain of
unions produces some graph, and what the consumer wants is 2-connectivity of the graph it
started from. As long as the assembled graph is a subgraph that misses no vertex, the two
coincide — extra edges can only help connectivity.
2-connectivity passes up to a graph with the same vertices.
Uniform coordinates #
prop:local-grid-attachment asks for "sufficiently fine finite horizontal and vertical
coordinate sets in W, with at least two intervals in each direction". Equally spaced ones
serve, and they make the fineness a single division.
The i-th of the equally spaced coordinates starting at a with step h.
Equations
- Schoenflies.uniformCoord a h i = a + ↑i * h
Instances For
A preconnected set of reals inside [a, a + k·h] that avoids every coordinate
a + i·h has diameter less than h. Two of its points more than h apart would straddle
one of the coordinates, and a preconnected subset of ℝ contains the interval between any two
of its points.
The local grid #
prop:local-grid-attachment clauses 2 and 3: a rectangular grid on the window W, all of
whose closed rectangles are smaller than ε. Everything combinatorial about it — that it is
2-connected, that it stays 2-connected after subdivision, that it is a plane graph and that its
boundary is a distinguished cycle — comes from Schoenflies/SquareMeshConnected.lean and
Schoenflies/SquareMeshFixed.lean; the content added here is the fineness.
The x-coordinates of the local grid on the closed square of centre p and radius s,
cut into k intervals.
Equations
- Schoenflies.localGridX p s k = Schoenflies.uniformCoord (p.ofLp 0 - s) (2 * s / ↑k)
Instances For
The y-coordinates of the local grid.
Equations
- Schoenflies.localGridY p s k = Schoenflies.uniformCoord (p.ofLp 1 - s) (2 * s / ↑k)
Instances For
The edges of the local grid, as a list of segments.
Equations
- Schoenflies.localGridEdges p s k = Schoenflies.gridEdges (Schoenflies.localGridX p s k) (Schoenflies.localGridY p s k) k k
Instances For
The local grid of prop:local-grid-attachment: the uniform k × k rectangular grid on
the closed square W of centre p and radius s.
Equations
- Schoenflies.localGrid p s k = Schoenflies.gridGraph (Schoenflies.localGridX p s k) (Schoenflies.localGridY p s k) k k
Instances For
prop:local-grid-attachment: the grid K is 2-connected.
The grid stays 2-connected after subdivision — the lem:subdivision-ear-preserve half
of the blueprint's argument, at these coordinates. The overlay of K with the skeleton of Γ
subdivides K at the crossing points, and no hypothesis on those points is needed.
The grid is a plane graph, drawn with straight edges.
The outer boundary of the local grid is a cycle, and it occupies the frame of W.
Fineness #
The one quantitative clause: every closed grid rectangle is smaller than ε. Stated twice —
for the closed rectangle itself, which is the blueprint's wording, and for any connected subset
of W that avoids the grid, which is the form a face of the overlay arrives in.
The grid line at index i is part of the grid: a point of W whose first coordinate is a
grid coordinate lies on the grid.
The same for the second coordinate.
prop:local-grid-attachment clause 3, in the form the overlay consumes. A connected
subset of the window W that avoids the grid has diameter less than √2 · (2s/k): it is
trapped inside one open grid rectangle, coordinate by coordinate.
Choosing the mesh #
prop:local-grid-attachment clause 3 asks for rectangles of diameter < ε.
prop:local-grid-attachment clauses 2 and 3, packaged. On the window W of centre p
and radius s there is a rectangular grid — 2-connected, still 2-connected after any
subdivision, a plane graph — every closed rectangle of which has diameter < ε.