Documentation

LeanPool.Schoenflies.MatchedSplit

The skeleton homeomorphism across a 2-cell split #

Schoenflies/RealizeSplit.lean builds one realization of S.splitFace d from a realization R of S and a drawing of the ear as a polygonal crosscut. A matched cellulation is two realizations of one abstract structure together with the skeleton homeomorphism between them (def:matched-pair clause 3), so the split has to be performed on both sides at once and the skeleton homeomorphism has to be carried across. That is what this module does.

Blueprint #

What is constructed #

How the ear map is presented, and why #

Two shapes were available.

(a) As data: a map Plane → Plane (with an inverse) carrying the drawn source ear onto the drawn target ear, vertex to corresponding vertex and edge arc to corresponding edge arc.

(b) Built edge by edge from the two EarCrosscuts, by composing one edge's parametrization with the inverse of the other's.

This module takes (a), as EarHomeo. The reason is the consumer, not the construction: def:matched-pair clause 3 says that g restricts to a fixed chosen homeomorphism on each corresponding pair of cells, so a caller assembling a matched pair is holding such a chosen homeomorphism already — for the old cells it is g itself, and for the ear's cells it is whatever the producer of the two crosscuts chose. Shape (b) would manufacture a second, different homeomorphism from the two parametrizations, and the caller would then have to prove that its own choice agrees with the manufactured one. It would also silently fix an orientation of every ear edge: Graph.IsDrawing.edge_param is orientation-free, so earDraw₁ f 0 and earDraw₂ f 0 need not be the ends that correspond, and (b) would need the SubdivData.leftParam trick of Schoenflies/RealizeSubdiv.lean replayed per edge.

Every field of EarHomeo is therefore something the caller supplies, and none of them mentions R₁, R₂ or g: the ear map is a statement about the two drawn ears alone. In particular no compatibility hypothesis between m and g is asked for, because none is needed: at the ear's two ends m.toFun and g.toFun are forced to agree, both being pinned to R₂.pos d.source and R₂.pos d.target — m by earPos_apply together with the two pos_source / pos_target clauses of the two EarCrosscuts, and g by its own pos_apply. That is EarHomeo.toFun_pos_source / toFun_pos_target below.

The proof, in one paragraph #

The new skeleton is a union of two closed sets — the old realized skeleton (Realization.isCompact_skeletonSet) and the drawn ear, which is an arc (EarCrosscut.isArcBetween_earSet) and hence compact. Continuity of the transported map is the pasting lemma Schoenflies.Plane.continuousOn_union_of_isClosed on those two pieces; the two pieces meet exactly in the ear's two ends (EarCrosscut.earSet_inter_skeletonSet, which is SplitData.vertexSet_inter made geometric), and there the two prescriptions agree. Injectivity and the two inverse laws are injectivity on each piece plus the fact that the images also meet only in the two images of the ends — for which the target-side EarCrosscut.earSet_inter_skeletonSet is again what is spent. pos_apply and edgeArc_image split into the old cells, where g's own fields serve verbatim, and the ear's cells, where EarHomeo's two matching clauses are the statement.

What is not here #

The subdivision analogue — the transported skeleton homeomorphism across an edge subdivision — is deliberately absent. It is being built concurrently on branch wt/arc-monotone, where the missing ingredient (a homeomorphism between two arcs fixing their ends is monotone, hence carries initial subarcs to initial subarcs — see the section "What is not here" of Schoenflies/RealizeSubdiv.lean) is the actual content. Nothing below depends on it, and nothing below should be duplicated there: this module is the split case only.

The general lemma this needed #

Graph.pointSet_congr — the point set of a plane graph depends on the drawing only through the arcs of the graph's own edges. It is stated in the root Graph namespace next to Graph.pointSet_union (which lives in Schoenflies/FaceCycles.lean); if a second consumer appears it belongs there or in Schoenflies/Graph/Drawing.lean.

theorem Graph.pointSet_congr {β : Type u_1} {G : Graph Schoenflies.Plane β} {drw drw' : β → ℝ → Schoenflies.Plane} (h : ∀ ⦃e : β⦄, e ∈ G.edgeSet → edgeArc drw e = edgeArc drw' e) :
G.pointSet drw = G.pointSet drw'

The point set of a plane graph only sees the arcs of its own edges. Two drawings that agree, arc for arc, on E(G) give G the same point set. This is what makes the split's splitDrawing — which is R.drawing on the old edges and earDraw on the ear's — restrict on each half of the union to the drawing that half came with.

A realized 0-cell is a point of the realized 1-skeleton. The inlined form of this appears at least four times on main (SkeletonHomeo.symm, Realization.disjoint_skeleton arguments in Schoenflies/RealizeSplit.lean, …); it belongs next to Realization.skeletonSet in Schoenflies/CombinatorialInvariance.lean.

The realized 1-skeleton of a split #

A 2-cell split adds the drawn ear to the drawn 1-skeleton and changes nothing else. This is the geometric statement the whole module rests on: it turns every clause of SkeletonHomeo, which quantifies over the new skeleton, into a pair of clauses over the two closed pieces.

theorem Schoenflies.CellStructure.SplitData.skeletonSet_realize {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R : S.Realization} {earPos : γ → Plane} {earDraw : γ → ℝ → Plane} (hE : d.EarCrosscut R earPos earDraw) :
(realize R d earPos earDraw hE).skeletonSet = R.skeletonSet ∪ d.earSet earPos earDraw

The realized 1-skeleton after a 2-cell split is the old one together with the drawn ear.

EarCrosscut.splitGraph_eq says the new drawn graph is the union of the old one with the drawn ear; Graph.pointSet_union splits the point set of that union; and Graph.pointSet_congr replaces the split drawing by the drawing each half came with.

theorem Schoenflies.CellStructure.SplitData.skeletonSet_subset_realize {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R : S.Realization} {earPos : γ → Plane} {earDraw : γ → ℝ → Plane} (hE : d.EarCrosscut R earPos earDraw) :
R.skeletonSet ⊆ (realize R d earPos earDraw hE).skeletonSet

A 2-cell split only grows the realized 1-skeleton. This is the field Schoenflies.StageSequence.skeletonSet_mono at a split step.

theorem Schoenflies.CellStructure.SplitData.isClosed_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R : S.Realization} {earPos : γ → Plane} {earDraw : γ → ℝ → Plane} (hE : d.EarCrosscut R earPos earDraw) :
IsClosed (d.earSet earPos earDraw)

The drawn ear is closed: it is a simple arc, hence compact.

The chosen homeomorphism between the two drawn ears #

structure Schoenflies.CellStructure.SplitData.EarHomeo {γ : Type u_1} {S : CellStructure γ} (d : S.SplitData) (earPos₁ : γ → Plane) (earDraw₁ : γ → ℝ → Plane) (earPos₂ : γ → Plane) (earDraw₂ : γ → ℝ → Plane) :

The chosen homeomorphism between two drawings of one abstract ear.

This is def:matched-pair clause 3 restricted to the cells the split creates: a homeomorphism between the two drawn ears which matches corresponding vertices and corresponding edges. It is data, not a proposition, and it mentions neither realization: everything it says is a statement about the two drawings of d.ear.

earPos_apply and edgeArc_image are the two matching clauses. Together they force toFun '' (source ear) = (target ear) (EarHomeo.image_earSet), which is why no separate surjectivity clause is asked for. The inverse is supplied as data, exactly as in CellStructure.SkeletonHomeo, so that no compactness argument is needed to speak of a homeomorphism.

Instances For
    theorem Schoenflies.CellStructure.SplitData.EarHomeo.image_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
    m.toFun '' d.earSet earPos₁ earDraw₁ = d.earSet earPos₂ earDraw₂

    The chosen map carries the source ear onto the target ear. The point set of a drawn graph is its vertices together with its edge arcs, and the two matching clauses handle those two halves.

    theorem Schoenflies.CellStructure.SplitData.EarHomeo.injOn {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
    Set.InjOn m.toFun (d.earSet earPos₁ earDraw₁)
    theorem Schoenflies.CellStructure.SplitData.EarHomeo.mapsTo {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
    Set.MapsTo m.toFun (d.earSet earPos₁ earDraw₁) (d.earSet earPos₂ earDraw₂)
    theorem Schoenflies.CellStructure.SplitData.EarHomeo.mapsTo_invFun {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
    Set.MapsTo m.invFun (d.earSet earPos₂ earDraw₂) (d.earSet earPos₁ earDraw₁)

    The inverse carries the target ear back into the source ear. Not a field: every point of the target ear is the image of a point of the source ear, and there the inverse is a left inverse.

    def Schoenflies.CellStructure.SplitData.EarHomeo.symm {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
    d.EarHomeo earPos₂ earDraw₂ earPos₁ earDraw₁

    Reverse a chosen matching of two realized ears. Direction (b) of finite transfer first constructs the ear on the target side, so it naturally obtains the matching in the opposite direction from the one consumed by GeneratedPair.split.

    Equations
    • m.symm = { toFun := m.invFun, invFun := m.toFun, continuousOn_toFun := ⋯, continuousOn_invFun := ⋯, leftInvOn := ⋯, rightInvOn := ⋯, earPos_apply := ⋯, edgeArc_image := ⋯ }
    Instances For
      @[simp]
      theorem Schoenflies.CellStructure.SplitData.EarHomeo.symm_toFun {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
      @[simp]
      theorem Schoenflies.CellStructure.SplitData.EarHomeo.symm_invFun {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
      theorem Schoenflies.CellStructure.SplitData.EarHomeo.toFun_pos_source {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) {R₁ R₂ : S.Realization} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
      m.toFun (R₁.pos d.source) = R₂.pos d.source

      At the ear's source end the chosen map is pinned to the old 0-cell's target position. This — with SkeletonHomeo.pos_apply — is why no compatibility hypothesis between the ear map and g has to be asked for.

      theorem Schoenflies.CellStructure.SplitData.EarHomeo.toFun_pos_target {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) {R₁ R₂ : S.Realization} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
      m.toFun (R₁.pos d.target) = R₂.pos d.target
      theorem Schoenflies.CellStructure.SplitData.EarHomeo.invFun_pos_source {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) {R₁ R₂ : S.Realization} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
      m.invFun (R₂.pos d.source) = R₁.pos d.source
      theorem Schoenflies.CellStructure.SplitData.EarHomeo.invFun_pos_target {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) {R₁ R₂ : S.Realization} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
      m.invFun (R₂.pos d.target) = R₁.pos d.target

      The transported map #

      noncomputable def Schoenflies.CellStructure.SplitData.splitMap {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (g : SkeletonHomeo R₁ R₂) (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :

      The transported skeleton map: g on the old realized skeleton, the chosen ear map off it. Written with a test on the old skeleton rather than on the ear so that agreement with g — splitHomeo_eqOn, i.e. StageSequence.skelHomeo_succ — holds by definition.

      Equations
      Instances For
        noncomputable def Schoenflies.CellStructure.SplitData.splitInvMap {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (g : SkeletonHomeo R₁ R₂) (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :

        The transported inverse, by the same recipe on the target side.

        Equations
        Instances For
          theorem Schoenflies.CellStructure.SplitData.splitMap_of_mem_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} {x : Plane} (hx : x ∈ R₁.skeletonSet) :
          splitMap g m x = g.toFun x
          theorem Schoenflies.CellStructure.SplitData.splitMap_eqOn_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} :
          theorem Schoenflies.CellStructure.SplitData.splitInvMap_of_mem_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} {y : Plane} (hy : y ∈ R₂.skeletonSet) :
          splitInvMap g m y = g.invFun y
          theorem Schoenflies.CellStructure.SplitData.splitInvMap_of_notMem_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} {y : Plane} (hy : y ∉ R₂.skeletonSet) :
          splitInvMap g m y = m.invFun y
          theorem Schoenflies.CellStructure.SplitData.splitMap_of_mem_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) {x : Plane} (hx : x ∈ d.earSet earPos₁ earDraw₁) :
          splitMap g m x = m.toFun x

          On the drawn ear the transported map is the chosen ear map — including at the two ends, where the two prescriptions agree because both are pinned to the target position of the old 0-cell.

          theorem Schoenflies.CellStructure.SplitData.splitMap_eqOn_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
          Set.EqOn (splitMap g m) m.toFun (d.earSet earPos₁ earDraw₁)
          theorem Schoenflies.CellStructure.SplitData.splitInvMap_eqOn_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
          Set.EqOn (splitInvMap g m) m.invFun (d.earSet earPos₂ earDraw₂)

          On the drawn target ear the transported inverse is the chosen ear map's inverse.

          theorem Schoenflies.CellStructure.SplitData.toFun_notMem_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) {x : Plane} (hx : x ∈ d.earSet earPos₁ earDraw₁) (hs : x ∉ R₁.skeletonSet) :
          m.toFun x ∉ R₂.skeletonSet

          A point of the source ear off the old skeleton is carried off the old target skeleton. The image lies on the target ear, and the target ear meets the target skeleton only in the two ends — whose preimages under the (injective) ear map are the two ends on the source side, which are on the source skeleton.

          theorem Schoenflies.CellStructure.SplitData.invFun_notMem_skeletonSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) {y : Plane} (hy : y ∈ d.earSet earPos₂ earDraw₂) (hs : y ∉ R₂.skeletonSet) :
          m.invFun y ∉ R₁.skeletonSet

          The mirror statement on the target side, for the inverse.

          The skeleton homeomorphism across the split #

          noncomputable def Schoenflies.CellStructure.SplitData.splitHomeo {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} (g : SkeletonHomeo R₁ R₂) (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) (m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂) :
          SkeletonHomeo (realize R₁ d earPos₁ earDraw₁ hE₁) (realize R₂ d earPos₂ earDraw₂ hE₂)

          The skeleton homeomorphism, transported across a 2-cell split.

          Given two realizations of one abstract cell structure, the skeleton homeomorphism g between them, a drawing of the ear as a polygonal crosscut on each side, and the chosen homeomorphism between the two drawn ears, this is the skeleton homeomorphism between the two split realizations — def:matched-pair clause 3 for the structure S.splitFace d.

          It is an extension of g, not a new map: splitHomeo_eqOn says it agrees with g on the whole old realized skeleton, which is precisely the field StageSequence.skelHomeo_succ.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem Schoenflies.CellStructure.SplitData.splitHomeo_toFun {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
            (splitHomeo g hE₁ hE₂ m).toFun = splitMap g m
            @[simp]
            theorem Schoenflies.CellStructure.SplitData.splitHomeo_invFun {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
            (splitHomeo g hE₁ hE₂ m).invFun = splitInvMap g m
            theorem Schoenflies.CellStructure.SplitData.splitHomeo_eqOn {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
            Set.EqOn (splitHomeo g hE₁ hE₂ m).toFun g.toFun R₁.skeletonSet

            The transported map agrees with g on the whole old realized skeleton.

            This is the field Schoenflies.StageSequence.skelHomeo_succ at a 2-cell split step: consecutive skeleton maps agree wherever both are defined. It holds by definition, which is the point of building the map by extension rather than by rebuilding.

            theorem Schoenflies.CellStructure.SplitData.splitHomeo_eqOn_earSet {γ : Type u_1} {S : CellStructure γ} {d : S.SplitData} {R₁ R₂ : S.Realization} {earPos₁ earPos₂ : γ → Plane} {earDraw₁ earDraw₂ : γ → ℝ → Plane} {g : SkeletonHomeo R₁ R₂} {m : d.EarHomeo earPos₁ earDraw₁ earPos₂ earDraw₂} (hE₁ : d.EarCrosscut R₁ earPos₁ earDraw₁) (hE₂ : d.EarCrosscut R₂ earPos₂ earDraw₂) :
            Set.EqOn (splitHomeo g hE₁ hE₂ m).toFun m.toFun (d.earSet earPos₁ earDraw₁)

            On the drawn ear the transported map is the chosen ear map — the other half of def:matched-pair clause 3 for a split.