Documentation

LeanPool.Schoenflies.BoundaryContinuity

lem:skeleton-crosscuts: a crosscut inside one stage of the skeleton #

Two anchors lying in a common finite stage are joined by a polygonal crosscut of the Jordan domain that lies in that stage's skeleton (jordan_schoenflies.tex 2857-2872). This file proves the first clause, for the source side.

Everything here concerns one finite plane graph: a stage is a finite plane graph whose point set carries the Jordan curve C as its outer boundary (Graph.IsStageOn), and nothing below mentions the sequence of stages that produces it.

The blueprint's proof splits on whether some nonboundary edge — one whose arc is not contained in C — has both of its ends on C. If one does, its open interior is a whole component of the open nonboundary part, so it is the only nonboundary edge and is itself the crosscut. Otherwise every nonboundary edge meeting C has its other end inside, and the interior subgraph interiorPart is connected because the half-open attached edges partition the open nonboundary part into relatively clopen pieces.

What is here, and what is not #

This module was written in one sitting that ended early, and it stops after the source-side crosscut. The rest of the section — the target crosscut of clause 2, lem:crosscut-side-correspondence, prop:boundary-continuity, and the assembly of thm:square-extension — is in Schoenflies/BoundaryContinuity2.lean, which imports this one. An earlier version of this docstring listed those as if they were here; they never were.

Blueprint #

lem:skeleton-crosscuts #

A stage of the skeleton is a finite plane graph whose point set carries the Jordan curve C as its outer boundary. The blueprint's proof splits on whether some nonboundary edge — an edge whose arc is not contained in C — has both of its ends on C.

Everything in this section speaks about one finite plane graph and never about the stages that produce it.

def Graph.Nonboundary {β : Type u_1} (drawing : β → ℝ → Schoenflies.Plane) (C : Set Schoenflies.Plane) (e : β) :

An edge is nonboundary when its arc is not contained in the outer boundary.

Equations
Instances For
    structure Graph.IsStageOn {β : Type u_1} (G : Graph Schoenflies.Plane β) (drawing : β → ℝ → Schoenflies.Plane) (C D : Set Schoenflies.Plane) :

    One finite stage of the skeleton, as lem:skeleton-crosscuts uses it.

    C is the outer boundary and D the region it bounds. The two substantive clauses are edge_split — every edge either runs inside C or has all of its non-endpoint points in D — and isConnected_diff, the admissibility hypothesis that the open nonboundary part |Γ| ∖ C is connected.

    D is an arbitrary set disjoint from C, not Schoenflies.inside C: the proof uses nothing about it, and the consumer instantiates it with the Jordan domain.

    • isDrawing : G.IsDrawing drawing

      the graph is drawn in the plane

    • polygonal ⦃e : β⦄ : e ∈ G.edgeSet → Nonboundary drawing C e → Schoenflies.IsPolygonal (edgeArc drawing e)

      every nonboundary edge is drawn as a polygonal arc.

      Only the nonboundary edges: def:admissible-graph says "its edges not contained in C are polygonal arcs", and for a source stage that restriction is not a convenience but a necessity. The outer edges of a source stage are subarcs of the wild Jordan curve C, which is in general nowhere polygonal, so a field asking IsPolygonal of every edge would make IsStageOn unsatisfiable for exactly the graphs lem:skeleton-crosscuts is about. It was stated that way and is repaired here; both proofs below already applied it only to nonboundary edges.

    • disjoint : Disjoint C D

      the outer boundary and the region it bounds are disjoint

    • vertex_mem ⦃v : Schoenflies.Plane⦄ : v ∈ G.vertexSet → v ∉ C → v ∈ D

      a vertex off the outer boundary lies in the region

    • edge_split ⦃e : β⦄ ⦃x y : Schoenflies.Plane⦄ : G.IsLink e x y → edgeArc drawing e ⊆ C ∨ edgeArc drawing e \ {x, y} ⊆ D

      an edge either lies on the outer boundary or has its interior in the region

    • isConnected_diff : IsConnected (G.pointSet drawing \ C)

      admissibility: the open nonboundary part is connected

    Instances For
      theorem Graph.IsStageOn.notMem_of_mem_curve {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {z : Schoenflies.Plane} (hz : z ∈ C) :
      z ∉ D
      theorem Graph.IsStageOn.notMem_curve {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {z : Schoenflies.Plane} (hz : z ∈ D) :
      z ∉ C
      theorem Graph.IsStageOn.pointSet_diff_subset {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) :
      G.pointSet drawing \ C ⊆ D

      Off the outer boundary, the point set of the stage lies in the region. This is the reading of edge_split and vertex_mem the crosscut extraction needs.

      theorem Graph.IsStageOn.edgeArc_inter_curve {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) (hnb : Nonboundary drawing C e) :
      edgeArc drawing e ∩ C ⊆ {x, y}

      On a nonboundary edge the outer boundary is met only at the two ends.

      theorem Graph.IsStageOn.left_mem_edgeArc {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) :
      x ∈ edgeArc drawing e

      The two ends of an edge lie on its arc.

      theorem Graph.IsStageOn.right_mem_edgeArc {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) :
      y ∈ edgeArc drawing e
      theorem Graph.IsStageOn.edgeArc_subset_of_ends {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) (hnb : Nonboundary drawing C e) (hx : x ∈ D) (hy : y ∈ D) :
      edgeArc drawing e ⊆ D

      A nonboundary edge whose two ends lie in the region runs entirely inside it.

      Case 1: a nonboundary edge with both ends on the outer boundary #

      Its open interior e° is a connected component of X = |Γ| ∖ C, because an edge interior meets the rest of the graph only at its endpoints, and those endpoints have been removed. Hence X = e°, and there is then only one nonboundary edge.

      theorem Graph.IsStageOn.diff_subset_edgeArc {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} [G.Finite] (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) (hnb : Nonboundary drawing C e) (hx : x ∈ C) (hy : y ∈ C) :
      G.pointSet drawing \ C ⊆ edgeArc drawing e

      Case 1, first half. If a nonboundary edge e has both ends on C, the whole open nonboundary part lies on e.

      The proof is lem:clopen-component in the closed-set form: edgeArc e and the rest of the drawing are two closed sets covering the point set whose common part misses X.

      Case 2: the interior subgraph #

      Let Λ be the finite subgraph consisting of all vertices in D and all edges whose two endpoints lie in D, allowing isolated interior vertices. Only its point set is ever needed, so interiorPart is that set rather than a Graph.

      The point set of the blueprint's interior subgraph Λ: the vertices lying in the region, together with the edges that run entirely inside it.

      Equations
      Instances For
        theorem Graph.interiorPart_subset {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {D : Set Schoenflies.Plane} :
        G.interiorPart drawing D ⊆ D
        theorem Graph.interiorPart_subset_pointSet {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {D : Set Schoenflies.Plane} :
        G.interiorPart drawing D ⊆ G.pointSet drawing
        theorem Graph.isClosed_interiorPart {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {D : Set Schoenflies.Plane} [G.Finite] (h : G.IsDrawing drawing) :
        IsClosed (G.interiorPart drawing D)

        The union of a subset of Λ with the closed edges meeting it. The blueprint attaches the half-open edges; taking the whole closed edge instead gives a set that is closed in the plane, and intersecting back with X = |Γ| ∖ C recovers the blueprint's set, because the removed ends are exactly the points of those edges lying on C.

        Equations
        Instances For
          theorem Graph.subset_attachEdges {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {S : Set Schoenflies.Plane} :
          S ⊆ G.attachEdges drawing S
          theorem Graph.isClosed_attachEdges {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} [G.Finite] (h : G.IsDrawing drawing) {S : Set Schoenflies.Plane} (hS : IsClosed S) :
          IsClosed (G.attachEdges drawing S)
          theorem Graph.IsStageOn.edgeArc_inter_interiorPart {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {e : β} {x y : Schoenflies.Plane} (hl : G.IsLink e x y) (hx : x ∈ C) :
          edgeArc drawing e ∩ G.interiorPart drawing D ⊆ {y}

          A half edge — a nonboundary edge with exactly one end on C — meets Λ only in its other end. This is what makes the attached pieces of X half-open.

          theorem Graph.IsStageOn.edgeArc_inter_interiorPart_subset {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (h : G.IsStageOn drawing C D) {S S' : Set Schoenflies.Plane} (hSc : IsClosed S) (hS'c : IsClosed S') (hunion : S ∪ S' = G.interiorPart drawing D) (hinter : S ∩ S' = ∅) {e : β} (heE : e ∈ G.edgeSet) (hmeet : (edgeArc drawing e ∩ S).Nonempty) :
          edgeArc drawing e ∩ G.interiorPart drawing D ⊆ S

          The selection step. If Λ is split into two disjoint closed pieces S, S' and an edge meets S, then everything that edge shares with Λ lies in S.

          An edge running inside D is connected and contained in S ∪ S', so it lies in one piece; a half edge meets Λ in a single point.

          theorem Graph.IsStageOn.isPreconnected_interiorPart {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} (hcase : ∀ ⦃e : β⦄ ⦃x y : Schoenflies.Plane⦄, G.IsLink e x y → Nonboundary drawing C e → x ∈ C → y ∉ C) [G.Finite] (h : G.IsStageOn drawing C D) :

          Case 2, the connectedness of Λ. For each component L of |Λ|, the union of L with all half-open edges attached to vertices of L is both open and closed in X; these sets partition X. Connectedness of X therefore implies that |Λ| is connected.

          lem:skeleton-crosscuts #

          theorem Graph.IsStageOn.exists_crosscut {β : Type u_1} {G : Graph Schoenflies.Plane β} {drawing : β → ℝ → Schoenflies.Plane} {C D : Set Schoenflies.Plane} [G.Finite] (h : G.IsStageOn drawing C D) {a b : Schoenflies.Plane} (hab : a ≠ b) (haC : a ∈ C) (hbC : b ∈ C) (ha : ∃ (e : β), G.Inc e a ∧ Nonboundary drawing C e) (hb : ∃ (e : β), G.Inc e b ∧ Nonboundary drawing C e) :
          ∃ P ⊆ G.pointSet drawing, Schoenflies.IsPolygonal P ∧ Schoenflies.IsArcBetween P a b ∧ P ∩ C = {a, b} ∧ P \ {a, b} ⊆ D

          lem:skeleton-crosscuts. Two distinct points of the outer boundary, each incident with a nonboundary edge of the stage, are joined by a polygonal crosscut lying in the stage's skeleton: a simple polygonal arc between them meeting C only at its two ends.

          In case 1 the crosscut is a single edge; in case 2 it is extracted from Y = e_a ∪ |Λ| ∪ e_b by lem:finite-polygonal-union (Schoenflies.exists_crosscut_arc_of_biUnion_finite).