Documentation

TauCeti.KnotTheory.Grid.Commutation.Hexagon

Hexagons of a column commutation, and the commutation homotopy #

Let b = finRotate n a and draw a column commutation of G as in Commutation/Pentagon.lean: the vertical grid line β with index b is replaced by a curve γ meeting it in two points. At the turn point, in square row t = C.turnRow, the curve γ crosses from the left of β to its right going upwards; at the other point, in square row t' = C.oppositeTurnRow, it crosses back. Going up from t' to t the curve γ runs to the left of β, and this bigon contains both markings of column a; going up from t to t' it runs to the right of β, and this bigon contains both markings of column b.

The commutation map Φ : GC⁻(G) → GC⁻(G') counts pentagons turning at t, and the reverse map Ψ : GC⁻(G') → GC⁻(G) counts pentagons turning at t'. The composite Ψ ∘ Φ is compared with the identity by a homotopy H : GC⁻(G) → GC⁻(G) counting hexagons: embedded disks from a state x of G to a state y of G bounded by arcs of horizontal circles, vertical circles, β and γ, with convex corners at the four points of x and y and at both intersection points of β and γ.

Convexity at the two intersection points leaves two kinds of hexagon.

Both shapes are parametrised by the column a and the square rows s, s' of the lower and upper ends of the bigon that is cut away. The interior lattice points of a hexagon are those of the rectangle, so emptiness is GridRectangleBetween.IsEmpty. The markings a hexagon carries are those of the rectangle except in the one column of the rectangle next to β: a hexagon of the first kind carries no marking of column a, since the bigon it cuts away contains them all, and one of the second kind carries no marking of column b. Its weight is the product of the variables of the O-markings it carries; unlike for pentagons both states lie in G, so no renaming of variables occurs.

Both kinds are needed, just as both kinds of pentagon are. For example, take the 5 × 5 diagram with O = (0, 3, 2, 1, 4) and X = (3, 0, 4, 2, 1), commute columns 2 and 3, and use turn row 4 with the other intersection in row 2. Counting only hexagons of the first kind, the identity state has diagonal coefficient 1 in ∂⁻ ∘ H + H ∘ ∂⁻ + 1 + Ψ ∘ Φ over 𝔽₂; counting both kinds it vanishes.

GridDiagram.hexagonMap and GridDiagram.initialHexagonMap count the empty hexagons of the two kinds carrying no X-marking, and GridDiagram.commutationHomotopy is their sum, the map H above. That ∂⁻ ∘ H + H ∘ ∂⁻ is the identity plus Ψ ∘ Φ is not proved here; GridDiagram.unblockedDifferential_commutationHomotopy_add_eq_iff writes it as an identity between matrix coefficients, and GridDiagram.unblockedDifferential_commutationHomotopy_add_eq proves it.

Main definitions #

Main results #

References #

The hexagons are those of the homotopy H_{βγβ} of Manolescu--Ozsváth--Szabó--Thurston, On combinatorial link Floer homology, Section 3.1 (arXiv:math/0610559), and of the homotopy of Ozsváth--Stipsicz--Szabó, Grid Homology for Knots and Links, Section 5.1. The orientation convention matches the rectangles of TauCeti.GridRectangleBetween: the source state occupies the lower-left and upper-right corners.

structure TauCeti.GridHexagonBetween {n : ℕ} (a s s' : Fin n) (x y : GridState n) extends TauCeti.GridRectangleBetween x y :

The combinatorial shape of a hexagon whose terminal side turns at both intersection points, for columns a and finRotate n a, cutting away the bigon from square row s up to square row s', from a grid state x to a grid state y.

It is recorded by the oriented rectangle from x to y with the same corners, whose terminal side is the grid line finRotate n a; the rows that side spans must contain the lower intersection row s and, above it, the upper intersection row s'. The shape records only the corners and the two turn rows. Its coveredSquares describe the squares of the hexagon when GridDiagram.ColumnCommutationData places the column-a markings in the bigon; the crossing change counts the same shapes for interleaving columns, with crossingCoveredSquares instead.

Instances For
    theorem TauCeti.GridHexagonBetween.left_ne {n : ℕ} {a s s' : Fin n} {x y : GridState n} (P : GridHexagonBetween a s s' x y) :

    The initial side of a hexagon is not the line replaced by γ.

    The rows of the bigon cut away by a hexagon, from its lower intersection row up to and including its upper one, lie among the rows of the hexagon.

    theorem TauCeti.GridHexagonBetween.left_injective {n : ℕ} {a s s' : Fin n} {x y : GridState n} :
    Function.Injective fun (P : GridHexagonBetween a s s' x y) => P.left

    A hexagon is determined by its initial side.

    There is at most one hexagon between two grid states: its initial side is the unique column other than finRotate n a at which the two states differ.

    @[instance_reducible]
    noncomputable instance TauCeti.GridHexagonBetween.instFintype {n : ℕ} {a s s' : Fin n} {x y : GridState n} :

    There are finitely many hexagons between two grid states.

    The target of a hexagon is its source with the initial side swapped against the line replaced by γ.

    def TauCeti.GridHexagonBetween.ofSwapColumns {n : ℕ} {a s s' : Fin n} (x : GridState n) (j : Fin n) (hj : j ≠ (finRotate n) a) (hs : s ∈ Grid.cIco (x.toPerm j) (x.toPerm ((finRotate n) a))) (hs' : s' ∈ Grid.cIoo s (x.toPerm ((finRotate n) a))) :

    The hexagon with initial side j from x to x.swapColumns j (finRotate n a), when the rows of x on the two sides enclose the bigon from s up to s'.

    Instances For
      @[simp]
      theorem TauCeti.GridHexagonBetween.ofSwapColumns_left {n : ℕ} {a s s' : Fin n} (x : GridState n) (j : Fin n) (hj : j ≠ (finRotate n) a) (hs : s ∈ Grid.cIco (x.toPerm j) (x.toPerm ((finRotate n) a))) (hs' : s' ∈ Grid.cIoo s (x.toPerm ((finRotate n) a))) :
      (ofSwapColumns x j hj hs hs').left = j

      The initial side of the hexagon built from a column swap.

      theorem TauCeti.GridHexagonBetween.nonempty_iff {n : ℕ} {a s s' : Fin n} {x y : GridState n} :
      Nonempty (GridHexagonBetween a s s' x y) ↔ ∃ (j : Fin n), j ≠ (finRotate n) a ∧ s ∈ Grid.cIco (x.toPerm j) (x.toPerm ((finRotate n) a)) ∧ s' ∈ Grid.cIoo s (x.toPerm ((finRotate n) a)) ∧ y = GridState.swapColumns j ((finRotate n) a) x

      A hexagon from x to y exists exactly when y is x with some column j swapped against the line replaced by γ, and the rows of x on j and on that line enclose the bigon from s up to s'.

      noncomputable def TauCeti.GridHexagonBetween.coveredSquares {n : ℕ} {a s s' : Fin n} {x y : GridState n} (P : GridHexagonBetween a s s' x y) :

      The squares of the original diagram whose marking lies inside a hexagon: the squares of the underlying rectangle outside column a.

      The hexagon agrees with the rectangle away from the bigon it cuts away, which lies in column a between the rows s and s'. When the column-a markings lie in that bigon, as GridDiagram.ColumnCommutationData guarantees, the hexagon carries none of them, so only the marked squares matter and these are the correct squares for them.

      Instances For

        A hexagon covers the squares of its underlying rectangle outside column a.

        The underlying rectangle of a hexagon covers the squares from its left column up to column finRotate n a, in its rows.

        The rectangle underlying a hexagon covers every square of column a in the rows of the bigon it cuts away.

        theorem TauCeti.GridHexagonBetween.disjoint_coveredSquares_XSet_iff {n : ℕ} {a s s' : Fin n} {x y : GridState n} (P : GridHexagonBetween a s s' x y) (G : GridDiagram n) :
        Disjoint P.coveredSquares G.XSet ↔ ∀ (c : Fin n), c ≠ a → c ∈ Grid.cIco P.left ((finRotate n) a) → G.X.toPerm c ∉ Grid.cIco P.bottom P.top

        A hexagon carries no X-marking exactly when its underlying rectangle carries none outside column a.

        Transfer a hexagon to new endpoint states when its underlying toroidal rectangle is unchanged. The turn side and both intersection rows are preserved.

        Instances For
          @[simp]

          The rectangle underlying the transferred hexagon is the supplied rectangle.

          The squares covered by a hexagon depend only on its underlying toroidal rectangle.

          structure TauCeti.GridInitialHexagonBetween {n : ℕ} (a s s' : Fin n) (x y : GridState n) extends TauCeti.GridRectangleBetween x y :

          The combinatorial shape of a hexagon whose initial side turns at both intersection points, for columns a and finRotate n a, cutting away the bigon from square row s up to square row s', from a grid state x to a grid state y.

          It is recorded by the oriented rectangle from x to y with the same corners, whose initial side is the grid line finRotate n a; the rows that side spans must contain the lower intersection row s and, above it, the upper intersection row s'. The shape records only the corners and the two turn rows. Its coveredSquares describe the squares of the hexagon when GridDiagram.ColumnCommutationData places the column-finRotate n a markings in the bigon; the crossing change counts the same shapes for interleaving columns, with crossingCoveredSquares instead.

          Instances For
            theorem TauCeti.GridInitialHexagonBetween.right_ne {n : ℕ} {a s s' : Fin n} {x y : GridState n} (P : GridInitialHexagonBetween a s s' x y) :

            The terminal side of a hexagon turning on its initial side is not the line replaced by γ.

            The rows of the bigon cut away by a hexagon turning on its initial side lie among its rows.

            A hexagon turning on its initial side is determined by its underlying rectangle.

            There is at most one hexagon turning on its initial side between two grid states: its initial side is the replaced line, which determines the underlying rectangle.

            @[instance_reducible]
            noncomputable instance TauCeti.GridInitialHexagonBetween.instFintype {n : ℕ} {a s s' : Fin n} {x y : GridState n} :

            There are finitely many hexagons turning on their initial side between two grid states.

            The target of a hexagon turning on its initial side is its source with the line replaced by γ swapped against the terminal side.

            def TauCeti.GridInitialHexagonBetween.ofSwapColumns {n : ℕ} {a s s' : Fin n} (x : GridState n) (j : Fin n) (hj : j ≠ (finRotate n) a) (hs : s ∈ Grid.cIco (x.toPerm ((finRotate n) a)) (x.toPerm j)) (hs' : s' ∈ Grid.cIoo s (x.toPerm j)) :

            The hexagon turning on its initial side from x to x.swapColumns (finRotate n a) j, when the rows of x on the two sides enclose the bigon from s up to s'.

            Instances For
              @[simp]
              theorem TauCeti.GridInitialHexagonBetween.ofSwapColumns_right {n : ℕ} {a s s' : Fin n} (x : GridState n) (j : Fin n) (hj : j ≠ (finRotate n) a) (hs : s ∈ Grid.cIco (x.toPerm ((finRotate n) a)) (x.toPerm j)) (hs' : s' ∈ Grid.cIoo s (x.toPerm j)) :
              (ofSwapColumns x j hj hs hs').right = j

              The terminal side of the hexagon built from a column swap.

              theorem TauCeti.GridInitialHexagonBetween.nonempty_iff {n : ℕ} {a s s' : Fin n} {x y : GridState n} :
              Nonempty (GridInitialHexagonBetween a s s' x y) ↔ ∃ (j : Fin n), j ≠ (finRotate n) a ∧ s ∈ Grid.cIco (x.toPerm ((finRotate n) a)) (x.toPerm j) ∧ s' ∈ Grid.cIoo s (x.toPerm j) ∧ y = GridState.swapColumns ((finRotate n) a) j x

              A hexagon turning on its initial side from x to y exists exactly when y is x with the line replaced by γ swapped against some other column j, and the rows of x on that line and on j enclose the bigon from s up to s'.

              noncomputable def TauCeti.GridInitialHexagonBetween.coveredSquares {n : ℕ} {a s s' : Fin n} {x y : GridState n} (P : GridInitialHexagonBetween a s s' x y) :

              The squares of the original diagram whose marking lies inside a hexagon turning on its initial side: the squares of the underlying rectangle outside column finRotate n a.

              As for GridHexagonBetween.coveredSquares, the bigon cut away lies in column finRotate n a between the rows s and s', and when the markings of that column lie in it the hexagon carries none of them.

              Instances For

                A hexagon turning on its initial side covers the squares of its underlying rectangle outside column finRotate n a.

                The underlying rectangle of a hexagon turning on its initial side covers the squares from column finRotate n a up to its right column, in its rows.

                The rectangle underlying a hexagon turning on its initial side covers every square of the column after a in the rows of the bigon it cuts away.

                A hexagon turning on its initial side carries no X-marking exactly when its underlying rectangle carries none outside column finRotate n a.

                Transfer a hexagon to new endpoint states when its underlying toroidal rectangle is unchanged. The turn side and both intersection rows are preserved.

                Instances For
                  @[simp]

                  The rectangle underlying the transferred hexagon is the supplied rectangle.

                  The squares covered by a hexagon depend only on its underlying toroidal rectangle.

                  The hexagons counted by the commutation homotopy #

                  The hexagons turning on their terminal side from x to y counted by a validated column commutation: the empty ones carrying no X-marking, cutting away the bigon from the opposite turn row up to the turn row, which contains the markings of C.column.

                  Instances For
                    @[simp]

                    Membership in the counted hexagons is emptiness together with X-avoidance.

                    The hexagons turning on their initial side from x to y counted by a validated column commutation: the empty ones carrying no X-marking, cutting away the bigon from the turn row up to the opposite turn row, which contains the markings of the column after C.column.

                    Instances For
                      @[simp]

                      Membership in the counted hexagons turning on their initial side is emptiness together with X-avoidance.

                      The markings of the cut-off column #

                      The rectangle underlying a hexagon carries the O-markings of the hexagon together with the O-marking of C.column, which the hexagon cuts away.

                      The rectangle underlying a hexagon turning on its initial side carries the O-markings of the hexagon together with the O-marking of the column after C.column, which the hexagon cuts away.

                      The rectangle underlying a hexagon carrying no X-marking carries exactly one X-marking, that of C.column.

                      The rectangle underlying a hexagon turning on its initial side and carrying no X-marking carries exactly one X-marking, that of the column after C.column.

                      The hexagon maps #

                      noncomputable def TauCeti.GridDiagram.hexagonWeight {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] {a s s' : Fin n} {x y : GridState n} (P : GridHexagonBetween a s s' x y) :

                      The weight of a hexagon: the product of the variables of the O-markings it carries.

                      Instances For

                        The weight of a hexagon is the monomial of the squares it covers.

                        The weight of a hexagon is the squarefree monomial of the O-markings it carries.

                        theorem TauCeti.GridDiagram.hexagonWeight_eq_prod_coveredSquares {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] {a s s' : Fin n} {x y : GridState n} (P : GridHexagonBetween a s s' x y) :

                        The weight of a hexagon is the product, over the squares it covers, of the variable of the square's column at the O-marked squares and of 1 elsewhere.

                        The weight of a hexagon of a validated column commutation times the variable of C.column is the weight of its underlying rectangle.

                        noncomputable def TauCeti.GridDiagram.initialHexagonWeight {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] {a s s' : Fin n} {x y : GridState n} (P : GridInitialHexagonBetween a s s' x y) :

                        The weight of a hexagon turning on its initial side: the product of the variables of the O-markings it carries.

                        Instances For

                          The weight of a hexagon turning on its initial side is the monomial of the squares it covers.

                          The weight of a hexagon turning on its initial side is the squarefree monomial of the O-markings it carries.

                          The weight of a hexagon turning on its initial side is the product, over the squares it covers, of the variable of the square's column at the O-marked squares and of 1 elsewhere.

                          The weight of a hexagon turning on its initial side times the variable of the column after C.column is the weight of its underlying rectangle.

                          noncomputable def TauCeti.GridDiagram.hexagonCoefficient {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] (C : G.ColumnCommutationData) (x y : GridState n) :

                          The matrix coefficient from x to y of the map counting hexagons turning on their terminal side: the sum of the weights of the counted ones.

                          Instances For
                            theorem TauCeti.GridDiagram.hexagonCoefficient_def {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] (C : G.ColumnCommutationData) (x y : GridState n) :
                            G.hexagonCoefficient R C x y = ∑ P ∈ G.hexagons C x y, G.hexagonWeight R P

                            The matrix coefficient of the hexagon map is the sum of the weights of its counted hexagons.

                            The matrix coefficient from x to y of the map counting hexagons turning on their initial side: the sum of the weights of the counted ones.

                            Instances For

                              The matrix coefficient of the initial-side hexagon map is the sum of the weights of its counted hexagons.

                              The map GC⁻(G) → GC⁻(G) of the validated column commutation C counting the hexagons that turn on their terminal side, linear over the polynomial ring: a generator x goes to the sum over the counted hexagons from x of their weights times their targets.

                              Instances For

                                The matrix coefficients of the hexagon map.

                                @[simp]
                                theorem TauCeti.GridDiagram.hexagonMap_apply_apply {n : ℕ} (G : GridDiagram n) (R : Type u_1) [CommSemiring R] (C : G.ColumnCommutationData) (c : GridChainMinus R n) (y : GridState n) :
                                ((G.hexagonMap R C) c) y = Finsupp.sum c fun (x : GridState n) (p : MvPolynomial (Fin n) R) => p * G.hexagonCoefficient R C x y

                                The coefficient formula for the hexagon map on an arbitrary chain.

                                The map GC⁻(G) → GC⁻(G) of the validated column commutation C counting the hexagons that turn on their initial side, linear over the polynomial ring.

                                Instances For

                                  The matrix coefficients of the initial-side hexagon map.

                                  @[simp]

                                  The coefficient formula for the initial-side hexagon map on an arbitrary chain.

                                  The commutation homotopy H : GC⁻(G) → GC⁻(G) of the validated column commutation C: it counts the empty hexagons carrying no X-marking with corners at both intersection points, both those turning on their terminal side (GridDiagram.hexagonMap) and those turning on their initial side (GridDiagram.initialHexagonMap). It is the map that compares the composite of the commutation map with its reverse to the identity.

                                  Instances For

                                    The commutation homotopy is the sum of the two hexagon maps.

                                    The matrix coefficient of the commutation homotopy from x to y, counting the hexagons turning on either side.

                                    Instances For

                                      The commutation hexagon coefficient is the sum of the two turn-side coefficients.

                                      The matrix coefficients of the commutation homotopy are the commutation hexagon coefficients.

                                      @[simp]

                                      The coefficient formula for the commutation homotopy on an arbitrary chain: its matrix coefficients are the sums of those of the two hexagon maps.