Documentation

LeanPool.Schoenflies.BoundaryContinuity2

Continuity at the Jordan curve, and thm:square-extension #

The last three statements of the manuscript: lem:crosscut-side-correspondence, prop:boundary-continuity, and the assembly of thm:square-extension from them.

Schoenflies/BoundaryContinuity.lean proves the statement with the real combinatorial content, lem:skeleton-crosscuts (Graph.IsStageOn.exists_crosscut), for one finite plane graph. This module takes the crosscuts as given and finishes the section.

The construction inputs #

This module isolates the construction-dependent data as explicit hypotheses. They are supplied for the quantitative stage recursion in Schoenflies/InteriorHomeomorphism.lean and Schoenflies/BoundaryAnchors.lean. Nothing else is assumed: thm:jordan and thm:general-crosscut are used through Schoenflies/JordanClosed.lean, where their hypotheses are supplied.

Schoenflies.HasLimitHomeomorphism bundles the four over all curves, and Schoenflies.squareExtension_of_hasLimitHomeomorphism derives Schoenflies.SquareExtension โ€” the exact def of Schoenflies/Endgame.lean โ€” from it. The proof of HasLimitHomeomorphism assembled in Schoenflies/JordanSchoenflies.lean closes the full theorem.

The two arguments #

Which side maps to which side is Schoenflies.crosscut_side_correspondence. The homeomorphism of the interiors carries Int(C) โˆ– P onto Qยฐ โˆ– P' (Schoenflies.image_inside_sdiff), hence carries each of the two components onto one of the two; the labels are pinned by a spoke germ J at an anchor c in the relative interior of Aโ‚. J is connected, misses P because it is small and c โˆ‰ P, so it lies in one side; c โˆˆ closure J and closure(Uแตข) โˆฉ C = Aแตข force that side to be Uโ‚. The same two facts on the target, applied to F '' J, force F '' Uโ‚ to be U'โ‚.

Boundary continuity is Schoenflies.tendsto_nhdsWithin_inside. The blueprint argues on a subsequence; the filter form of the same argument avoids extracting one. If F does not tend to u p along ๐“[Int C] p, then l' = ๐“[Int C] p โŠ“ ๐“Ÿ (Fโปยน Wแถœ) is a nonzero filter for some open W โˆ‹ u p, and compactness of Q gives a cluster point q โˆˆ Wแถœ of F along l'. If q โˆˆ Qยฐ then pushing l' through F' shows p = F' q โˆˆ Int(C), impossible. Otherwise q โˆˆ S; anchors a, b separating p from r = uโปยน q give a crosscut whose p-side contains every point of Int(C) near p, so l' sits on that side, so q lies in the closure of the corresponding target side, whose trace on S is u(Aโ‚) โ€” and r โˆ‰ Aโ‚.

Blueprint #

theorem Graph.IsStageOn.exists_isCrosscut {ฮฒ : Type u_1} {G : Graph Schoenflies.Plane ฮฒ} {drawing : ฮฒ โ†’ โ„ โ†’ Schoenflies.Plane} {C : Set Schoenflies.Plane} [G.Finite] (h : G.IsStageOn drawing C (Schoenflies.inside C)) (hC : Schoenflies.IsJordanCurve C) {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.IsCrosscut C P a b

lem:skeleton-crosscuts, packaged for thm:general-crosscut. The crosscut that Graph.IsStageOn.exists_crosscut extracts from a stage drawn in the closed Jordan domain is a Schoenflies.IsCrosscut of C, which is the configuration every consumer downstream takes.

This is only a repackaging; all the work is in Schoenflies/BoundaryContinuity.lean.

Two elementary facts about the model square #

Qยฐ = Int(S): the open square is the Jordan domain of the model curve. This is the bridge between the shape prop:interior-homeomorphism is stated in (a homeomorphism onto Plane.openSquare 0 1) and the shape thm:general-crosscut speaks in (inside modelCurve).

The Jordan domain of the model curve is the open square.

The closed square is compact.

Pushing arcs forward #

lem:crosscut-side-correspondence labels the target sides by u(Aโ‚) and u(Aโ‚‚), so the two target arcs have to be produced as images. Nothing here is specific to the square.

theorem Schoenflies.IsArcBetween.image_of_injOn {A S : Set Plane} {p q : Plane} {f : Plane โ†’ Plane} (h : IsArcBetween A p q) (hAS : A โІ S) (hcont : ContinuousOn f S) (hinj : Set.InjOn f S) :
IsArcBetween (f '' A) (f p) (f q)

The image of an arc under a map continuous and injective on a set containing it.

theorem Schoenflies.IsCutPair.image {C Aโ‚ Aโ‚‚ : Set Plane} {a b : Plane} {f : Plane โ†’ Plane} (h : IsCutPair C a b Aโ‚ Aโ‚‚) (hcont : ContinuousOn f C) (hinj : Set.InjOn f C) :
IsCutPair (f '' C) (f a) (f b) (f '' Aโ‚) (f '' Aโ‚‚)

The image of a cut pair.

theorem Schoenflies.IsCutPair.image_of_isHomeoOn {C Aโ‚ Aโ‚‚ : Set Plane} {u v : Plane โ†’ Plane} {a b : Plane} {T : Set Plane} (h : IsCutPair C a b Aโ‚ Aโ‚‚) (hu : IsHomeoOn u v C T) :
IsCutPair T (u a) (u b) (u '' Aโ‚) (u '' Aโ‚‚)

The image of a cut pair under a restricted homeomorphism, in the form the target side of lem:crosscut-side-correspondence needs it.

Anchors that separate #

The selection step of prop:boundary-continuity. Given two distinct points p, r of the curve and a dense set ๐’œ of anchors, we need anchors a, b with p and r on opposite arcs of C from a to b. Density produces one anchor on each of the two open arcs of C from p to r; the separation is then automatic, because an arc from a to b avoiding p and r would be a connected subset of C โˆ– {p, r} meeting both of its two (relatively open) halves.

theorem Schoenflies.exists_anchor_mem_arc {C ๐’œ Aโ‚ Aโ‚‚ : Set Plane} {a b : Plane} (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hcut : IsCutPair C a b Aโ‚ Aโ‚‚) :
โˆƒ c โˆˆ ๐’œ, c โˆˆ Aโ‚ โˆง c โˆ‰ Aโ‚‚

A dense set meets the relative interior of either arc of a cut pair. The one use lem:anchor-density is put to.

theorem Schoenflies.IsCutPair.separates {C Aโ‚ Aโ‚‚ Bโ‚ Bโ‚‚ : Set Plane} {a b p r : Plane} (hB : IsCutPair C p r Bโ‚ Bโ‚‚) (hA : IsCutPair C a b Aโ‚ Aโ‚‚) (ha' : a โˆ‰ Bโ‚‚) (hb' : b โˆ‰ Bโ‚) :
p โˆˆ Aโ‚ โˆง r โˆˆ Aโ‚‚ โˆจ p โˆˆ Aโ‚‚ โˆง r โˆˆ Aโ‚

Two anchors on opposite open arcs separate. If a lies on the open arc Bโ‚ โˆ– {p, r} and b on the opposite one, then any pair of arcs cutting C at a and b puts p and r on different arcs.

The proof is the one separation argument of the section: an arc from a to b missing both p and r is a connected subset of C โˆ– {p, r} = (C โˆ– Bโ‚‚) โˆช (C โˆ– Bโ‚), a union of two relatively open pieces, and it meets both โ€” because a is in the first and b in the second.

theorem Schoenflies.exists_separating_anchors {C ๐’œ : Set Plane} {p r : Plane} (hC : IsJordanCurve C) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hp : p โˆˆ C) (hr : r โˆˆ C) (hpr : p โ‰  r) :
โˆƒ a โˆˆ ๐’œ, โˆƒ b โˆˆ ๐’œ, โˆƒ (Aโ‚ : Set Plane) (Aโ‚‚ : Set Plane), a โ‰  b โˆง IsCutPair C a b Aโ‚ Aโ‚‚ โˆง p โˆˆ Aโ‚ โˆง p โˆ‰ Aโ‚‚ โˆง r โˆˆ Aโ‚‚ โˆง r โˆ‰ Aโ‚

The selection step of prop:boundary-continuity. Two distinct points of the curve are separated by two anchors of any dense set of anchors.

The hypotheses #

Two predicates, one for each thing that is still being built. Both are statements about one curve, so a consumer can discharge them curve by curve.

def Schoenflies.HasAnchorCrosscuts (C ๐’œ : Set Plane) (u F : Plane โ†’ Plane) :

lem:skeleton-crosscuts together with prop:skeleton-agreement, as lem:crosscut-side-correspondence consumes them: any two distinct anchors are joined by a crosscut P of C, whose image under the limit map is a crosscut P' of the open square from u a to u b.

The agreement clause is stated on P โˆ– {a, b}, which by IsCrosscut.inter_eq is exactly P โˆฉ Int(C) โ€” the part of the crosscut on which F is defined at all.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def Schoenflies.HasSpokes (C ๐’œ : Set Plane) (u F : Plane โ†’ Plane) :

    The spokes at the anchors. At an anchor c there are arbitrarily small connected pieces J of the Jordan domain clinging to c whose F-images cling to u c.

    This is the germ of the nonboundary edge that lem:anchor-density attaches to c: J is an initial subarc of that edge with the endpoint c removed, and F '' J is the corresponding initial subarc of the target edge, which ends at u c because the finite skeleton homeomorphism sends c to u c. Nothing else about the spokes is used anywhere.

    Equations
    Instances For

      Discharging HasAnchorCrosscuts from a skeleton homeomorphism #

      The two steps a consumer has to perform, isolated so that they need not be reinvented: the image of a crosscut under the finite skeleton homeomorphism is again a crosscut, and the agreement clause follows from agreement of the limit map with that homeomorphism on the crosscut. Neither says anything about the square, so both apply to the source and the target side of any of the stages.

      theorem Schoenflies.IsCrosscut.image_of_injOn {C P : Set Plane} {a b : Plane} {C' Sk : Set Plane} {g : Plane โ†’ Plane} (hP : IsCrosscut C P a b) (hPSk : P โІ Sk) (hcont : ContinuousOn g Sk) (hinj : Set.InjOn g Sk) (hC' : IsJordanCurve C') (hpoly : IsPolygonal (g '' P)) (ha : g a โˆˆ C') (hb : g b โˆˆ C') (hint : g '' (P \ {a, b}) โІ inside C') :
      IsCrosscut C' (g '' P) (g a) (g b)

      The image of a crosscut is a crosscut. All that is asked of the map is continuity and injectivity on a set containing the crosscut, plus the two clauses that are genuinely about the target configuration: the image is polygonal, and everything but its two endpoints lies in the target Jordan domain.

      theorem Schoenflies.image_sdiff_eq_of_eqOn {P : Set Plane} {F : Plane โ†’ Plane} {a b : Plane} {Sk : Set Plane} {g : Plane โ†’ Plane} (hPSk : P โІ Sk) (hinj : Set.InjOn g Sk) (ha : a โˆˆ P) (hb : b โˆˆ P) (hFg : Set.EqOn F g (P \ {a, b})) :
      F '' (P \ {a, b}) = g '' P \ {g a, g b}

      The agreement clause of Schoenflies.HasAnchorCrosscuts, from agreement of the limit map with the skeleton homeomorphism on the part of the crosscut that lies in the domain.

      lem:crosscut-side-correspondence #

      theorem Schoenflies.inside_sdiff_crosscut {C P : Set Plane} {a b : Plane} (h : IsCrosscut C P a b) :
      inside C \ P = inside C \ (P \ {a, b})

      Removing a crosscut from the Jordan domain is the same as removing its interior: the two endpoints are on the curve and so are not in the domain to begin with.

      theorem Schoenflies.image_inside_sdiff {C P P' : Set Plane} {u F F' : Plane โ†’ Plane} {a b : Plane} (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hP : IsCrosscut C P a b) (hP' : IsCrosscut modelCurve P' (u a) (u b)) (hagree : F '' (P \ {a, b}) = P' \ {u a, u b}) :

      The limit map carries Int(C) โˆ– P onto Qยฐ โˆ– P'. This is the whole use made of prop:skeleton-agreement: it turns a homeomorphism of the interiors into a homeomorphism of the cut interiors.

      theorem Schoenflies.image_crosscut_side_subset {C ๐’œ Aโ‚ Aโ‚‚ P P' : Set Plane} {u v F F' : Plane โ†’ Plane} {a b : Plane} (hu : IsHomeoOn u v C modelCurve) (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hspoke : HasSpokes C ๐’œ u F) (hcut : IsCutPair C a b Aโ‚ Aโ‚‚) (hP : IsCrosscut C P a b) (hP' : IsCrosscut modelCurve P' (u a) (u b)) (hagree : F '' (P \ {a, b}) = P' \ {u a, u b}) :
      F '' inside (Aโ‚ โˆช P) โІ inside (u '' Aโ‚ โˆช P')

      lem:crosscut-side-correspondence, one inclusion. The side of the crosscut whose closure meets C in Aโ‚ is carried into the side of the target crosscut whose closure meets S in u(Aโ‚).

      This is where the spokes are used, and the only place.

      theorem Schoenflies.crosscut_side_correspondence {C ๐’œ Aโ‚ Aโ‚‚ P P' : Set Plane} {u v F F' : Plane โ†’ Plane} {a b : Plane} (hu : IsHomeoOn u v C modelCurve) (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hspoke : HasSpokes C ๐’œ u F) (hcut : IsCutPair C a b Aโ‚ Aโ‚‚) (hP : IsCrosscut C P a b) (hP' : IsCrosscut modelCurve P' (u a) (u b)) (hagree : F '' (P \ {a, b}) = P' \ {u a, u b}) :
      F '' inside (Aโ‚ โˆช P) = inside (u '' Aโ‚ โˆช P') โˆง F '' inside (Aโ‚‚ โˆช P) = inside (u '' Aโ‚‚ โˆช P')

      lem:crosscut-side-correspondence. The limit map carries each side of a crosscut onto the side of the target crosscut carrying the corresponding boundary arc.

      The sides are named the way Schoenflies.crosscut_theorem names them: inside (Aแตข โˆช P) is the component of Int(C) โˆ– P whose closure meets C exactly in Aแตข.

      prop:boundary-continuity #

      noncomputable def Schoenflies.extendByBoundary (C : Set Plane) (u F : Plane โ†’ Plane) :
      Plane โ†’ Plane

      The blueprint's Fbar: the limit map on the Jordan domain and the boundary homeomorphism on the curve. It is Schoenflies.paste, which comes with its two evaluation lemmas.

      Equations
      Instances For
        theorem Schoenflies.extendByBoundary_of_mem {C : Set Plane} {u F : Plane โ†’ Plane} {z : Plane} (hz : z โˆˆ C) :
        extendByBoundary C u F z = u z
        theorem Schoenflies.extendByBoundary_of_notMem {C : Set Plane} {u F : Plane โ†’ Plane} {z : Plane} (hz : z โˆ‰ C) :
        extendByBoundary C u F z = F z
        theorem Schoenflies.tendsto_nhdsWithin_inside {C ๐’œ : Set Plane} {u v F F' : Plane โ†’ Plane} {p : Plane} (hC : IsJordanCurve C) (hu : IsHomeoOn u v C modelCurve) (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hcross : HasAnchorCrosscuts C ๐’œ u F) (hspoke : HasSpokes C ๐’œ u F) (hp : p โˆˆ C) :

        prop:boundary-continuity, the substance. Approaching a point p of the curve from inside, the limit map tends to u p.

        The blueprint extracts a subsequence; the same argument runs on the filter l' = ๐“[Int C] p โŠ“ ๐“Ÿ (Fโปยน Wแถœ) without extracting one.

        theorem Schoenflies.boundary_continuity {C ๐’œ : Set Plane} {u v F F' : Plane โ†’ Plane} (hC : IsJordanCurve C) (hu : IsHomeoOn u v C modelCurve) (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hcross : HasAnchorCrosscuts C ๐’œ u F) (hspoke : HasSpokes C ๐’œ u F) :

        prop:boundary-continuity. The glued map is continuous on the closed Jordan domain.

        thm:square-extension #

        theorem Schoenflies.isHomeoOn_extendByBoundary {C ๐’œ : Set Plane} {u v F F' : Plane โ†’ Plane} (hC : IsJordanCurve C) (hu : IsHomeoOn u v C modelCurve) (hF : IsHomeoOn F F' (inside C) (Plane.openSquare 0 1)) (hsub : ๐’œ โІ C) (hdense : C โІ closure ๐’œ) (hcross : HasAnchorCrosscuts C ๐’œ u F) (hspoke : HasSpokes C ๐’œ u F) :

        thm:square-extension, for one curve. The glued map restricts to a homeomorphism of the closed Jordan domain onto the closed square, and extends u.

        Continuity of the inverse is not proved directly: the domain is compact and the square is Hausdorff, so the continuous bijection Fbar is a closed map, which is exactly what continuousOn_iff_isClosed asks of the inverse.

        The assembled hypothesis, and Schoenflies.SquareExtension #

        Everything this section assumes, for every Jordan curve and every boundary homeomorphism onto the model square: a dense set of anchors, the limit homeomorphism of the interiors (prop:interior-homeomorphism), the anchor crosscuts with their target images (lem:skeleton-crosscuts and prop:skeleton-agreement), and the spokes at the anchors (lem:anchor-density).

        Schoenflies.squareExtension_of_hasLimitHomeomorphism turns this into Schoenflies.SquareExtension, which is the input required by the final reduction.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          thm:square-extension. Every homeomorphism of a Jordan curve onto the model square boundary extends to a homeomorphism of the closed Jordan domain onto the closed square.