Documentation

LeanPool.MarshallHall.MarshallHall.GrushkoUnfold

The local source unfold #

This file formalizes the local graph move used in the last case of the Stallings proof of Grushko's theorem. Fix an oriented edge e₀ leaving a vertex a. The source is split into an old copy and a new copy. All original arrows labelled in the colour of e₀ remain attached to the old copy, the other coloured arrows are attached to the new copy, and a second copy of e₀ is attached to the new copy.

The construction is intentionally local. In particular, it does not yet choose a new marking or perform the subsequent monochromatic-vertex contraction. The main certified fact here is that the old copy is monochromatic, exactly the invariant needed by that contraction.

Split vertices and duplicated arrows #

@[reducible, inline]

A copy of a is added to the original vertex set. false denotes the old copy and true the new copy.

Equations
Instances For

    The original copy of the vertex split by unfolding.

    Equations
    Instances For

      The new copy of the vertex created by unfolding.

      Equations
      Instances For
        noncomputable def MarshallHall.GeneralGrushko.unfoldVertexAt {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (a : V) (e₀ : AllArrow) (x : V) (c : Bool) :

        Chooses the appropriate copy of the split vertex according to the incident factor.

        Equations
        Instances For
          theorem MarshallHall.GeneralGrushko.unfoldVertexAt_eq_old_iff {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (a : V) (e₀ : AllArrow) (x : V) (c : Bool) :
          unfoldVertexAt L a e₀ x c = unfoldOld a ↔ x = a ∧ c = unfoldEdgeColor L e₀
          theorem MarshallHall.GeneralGrushko.unfoldVertexAt_eq_new_iff {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (a : V) (e₀ : AllArrow) (x : V) (c : Bool) :
          unfoldVertexAt L a e₀ x c = unfoldNew a ↔ x = a ∧ c ≠ unfoldEdgeColor L e₀
          theorem MarshallHall.GeneralGrushko.unfoldVertexAt_of_ne {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] {a : V} {e₀ : AllArrow} (L : BinaryLabelling) (x : V) (c : Bool) (hx : x ≠ a) :
          unfoldVertexAt L a e₀ x c = Sum.inl ⟨x, hx⟩

          The unfolded edge type and its quiver #

          @[reducible, inline]
          abbrev MarshallHall.GeneralGrushko.UnfoldEdge {V : Type u} [Quiver V] :
          Type (max u_1 u)

          The old oriented edges together with the two orientations of a duplicated edge. The Bool component is the orientation of the duplicate.

          Equations
          Instances For

            The source of an edge after the vertex has been split by factor.

            Equations
            Instances For

              The target of an edge after the vertex has been split by factor.

              Equations
              Instances For
                @[reducible]

                The quiver obtained by splitting a vertex and duplicating the selected edge.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[instance_reducible]
                  noncomputable def MarshallHall.GeneralGrushko.unfoldQuiverHomFintype {G H : Type v} [Group G] [Group H] {V : Type u} [Fintype V] [Quiver V] [Quiver.HasInvolutiveReverse V] [(a b : V) → Fintype (a ⟶ b)] (L : BinaryLabelling) (e₀ : AllArrow) (x y : UnfoldVertex (allArrowSource e₀)) :
                  Fintype (x ⟶ y)

                  A finite enumeration of arrows in the unfolded quiver.

                  Equations
                  Instances For

                    Reverses an arrow of the unfolded quiver.

                    Equations
                    Instances For
                      @[instance_reducible]

                      The involutive reversal on the unfolded quiver.

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

                        The factor labelling on the unfolded graph.

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

                          The old copy is monochromatic #

                          An unfolded arrow is incident to the original copy of the split vertex.

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

                            The unfolded arrow corresponding to an original edge.

                            Equations
                            Instances For
                              def MarshallHall.GeneralGrushko.unfoldOriginalEdgeAtColor {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : V} (e : x ⟶ y) (color : Bool) (hc : unfoldEdgeColor L (allArrowOf e) = color) :
                              unfoldVertexAt L (allArrowSource e₀) e₀ x color ⟶ unfoldVertexAt L (allArrowSource e₀) e₀ y color

                              The unfolded original edge with its factor made explicit in the endpoints.

                              Equations
                              Instances For
                                theorem MarshallHall.GeneralGrushko.unfoldOriginalEdgeAtColor_label {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : V} (e : x ⟶ y) (color : Bool) (hc : unfoldEdgeColor L (allArrowOf e) = color) :
                                unfoldEdgeLabel L e₀ ↑(unfoldOriginalEdgeAtColor L e₀ e color hc) = L.label e
                                @[irreducible]
                                def MarshallHall.GeneralGrushko.unfoldMonochromaticPath {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) (color : Bool) {x y : V} (p : Quiver.Path x y) :
                                L.IsMonochromatic p color → Quiver.Path (unfoldVertexAt L (allArrowSource e₀) e₀ x color) (unfoldVertexAt L (allArrowSource e₀) e₀ y color)

                                Lifts a monochromatic path to the corresponding factor side of the unfolded graph.

                                Equations
                                Instances For
                                  theorem MarshallHall.GeneralGrushko.unfoldMonochromaticPath_read {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) (color : Bool) {x y : V} (p : Quiver.Path x y) (hp : L.IsMonochromatic p color) :
                                  (unfoldLabelling L e₀).pathRead (unfoldMonochromaticPath L e₀ color p hp) = L.pathRead p

                                  Cardinal bookkeeping #

                                  Identifies packaged arrows in the unfolded quiver with its explicit edge type.

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

                                    The zero-labelled switch paths #

                                    The selected original edge starting at the original copy of the split vertex.

                                    Equations
                                    Instances For

                                      The reverse of the selected original edge in the unfolded graph.

                                      Equations
                                      Instances For

                                        The duplicate of the selected edge starting at the new vertex.

                                        Equations
                                        Instances For

                                          The reverse orientation of the duplicated selected edge.

                                          Equations
                                          Instances For

                                            The path from the original split vertex to its new copy through the selected edge pair.

                                            Equations
                                            Instances For

                                              Canonical endpoints and path lifting #

                                              noncomputable def MarshallHall.GeneralGrushko.unfoldCanonical {V : Type u} (a x : V) :

                                              The canonical lift of an original vertex, choosing the original copy at the split vertex.

                                              Equations
                                              Instances For
                                                noncomputable def MarshallHall.GeneralGrushko.unfoldPrePath {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : V} (e : x ⟶ y) :

                                                The switching path before an unfolded edge, from its canonical source to its factor side.

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

                                                  The switching path after an unfolded edge, from its factor side to its canonical target.

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

                                                    Lifts an original edge as a path between canonical lifted endpoints.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      theorem MarshallHall.GeneralGrushko.unfoldPrePath_read {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : V} (e : x ⟶ y) :
                                                      (unfoldLabelling L e₀).pathRead (unfoldPrePath L e₀ e) = 1
                                                      theorem MarshallHall.GeneralGrushko.unfoldPostPath_read {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : V} (e : x ⟶ y) :
                                                      @[irreducible]

                                                      Lifts an ordinary path to a path between canonical vertices of the unfolded graph.

                                                      Equations
                                                      Instances For
                                                        noncomputable def MarshallHall.GeneralGrushko.unfoldSymmLiftArrow {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {x y : Quiver.Symmetrify V} (e : x ⟶ y) :
                                                        Quiver.Path (unfoldCanonical (allArrowSource e₀) (have this := x; this)) (unfoldCanonical (allArrowSource e₀) (have this := y; this))

                                                        Lifts a symmetrized arrow to a path in the unfolded graph.

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For
                                                          @[irreducible]
                                                          def MarshallHall.GeneralGrushko.unfoldSymmMonochromaticPath {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) (color : Bool) {x y : Quiver.Symmetrify V} (p : Quiver.Path x y) :
                                                          L.symmIsMonochromatic p color → Quiver.Path (unfoldVertexAt L (allArrowSource e₀) e₀ (have this := x; this) color) (unfoldVertexAt L (allArrowSource e₀) e₀ (have this := y; this) color)

                                                          Lifts a monochromatic symmetrized path to its factor side in the unfolded graph.

                                                          Equations
                                                          Instances For

                                                            The duplicated edge and its complementary tail #

                                                            noncomputable def MarshallHall.GeneralGrushko.unfoldDuplicatePath {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {b : Quiver.Symmetrify V} (q : Quiver.Path (have this := allArrowTarget e₀; this) b) (hq : L.symmIsMonochromatic q (unfoldEdgeColor L e₀)) :
                                                            Quiver.Path (unfoldNew (allArrowSource e₀)) (unfoldVertexAt L (allArrowSource e₀) e₀ (have this := b; this) (unfoldEdgeColor L e₀))

                                                            The path beginning with the duplicated edge and following the lifted monochromatic continuation.

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

                                                              The list of explicit unfolded edges traversed by a path.

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                theorem MarshallHall.GeneralGrushko.unfoldMonochromaticPath_edges_original {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) (color : Bool) {x y : V} (p : Quiver.Path x y) (hp : L.IsMonochromatic p color) (z : UnfoldEdge) :
                                                                z ∈ unfoldPathEdges L e₀ (unfoldMonochromaticPath L e₀ color p hp) → ∃ (f : AllArrow), z = Sum.inl f
                                                                noncomputable def MarshallHall.GeneralGrushko.unfoldDuplicateFoldPath {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {b : Quiver.Symmetrify V} (q : Quiver.Path (have this := allArrowTarget e₀; this) b) (hq : L.symmIsMonochromatic q (unfoldEdgeColor L e₀)) :
                                                                Quiver.Path (unfoldNew (allArrowSource e₀)) (unfoldVertexAt L (allArrowSource e₀) e₀ (have this := b; this) (unfoldEdgeColor L e₀))

                                                                The duplicate-edge detour packaged as a path for the subsequent fold.

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

                                                                  The unfolded marked graph based at the original copy of its split base vertex.

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

                                                                    Rerooting the unfolded marking at the new source #

                                                                    The unfolded marked graph rerooted at the new copy of its split base vertex.

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      theorem MarshallHall.GeneralGrushko.unfoldNew_ne_vertexAt_of_ne_source {G H : Type v} [Group G] [Group H] {V : Type u} [Quiver V] [Quiver.HasInvolutiveReverse V] (L : BinaryLabelling) (e₀ : AllArrow) {b : Quiver.Symmetrify V} (hb : (have this := b; this) ≠ allArrowSource e₀) :
                                                                      unfoldNew (allArrowSource e₀) ≠ unfoldVertexAt L (allArrowSource e₀) e₀ (have this := b; this) (unfoldEdgeColor L e₀)

                                                                      The source-unfold branch supplies a safe fold #

                                                                      theorem MarshallHall.GeneralGrushko.exists_safe_fold_after_unfold {G H : Type v} [Group G] [Group H] {V : Type u} [Fintype V] [Quiver V] [Quiver.HasInvolutiveReverse V] {n : ℕ} (M : MarkedBinaryGraph n) (e₀ : AllArrow) (ha : allArrowSource e₀ = M.base) {b : Quiver.Symmetrify V} (q : Quiver.Path (have this := allArrowTarget e₀; this) b) (hb : (have this := b; this) ≠ allArrowSource e₀) (hq : M.labeling.symmIsMonochromatic q (unfoldEdgeColor M.labeling e₀)) (hread : M.labeling.symmPathRead q = (separatedMap (allArrowLabel M.labeling e₀))⁻¹) (hgen : M.IsGenerating) (hconn : M.WeaklyConnected) :