Documentation

Complexitylib.Algebraic.LowerBound.Cutwidth.MultiOutput.Taylor.Internal

Proofs for the Taylor cut lemma #

Jets #

The real part of a polynomial at a dual number is its value at the real parts.

First-order Taylor expansion. The dual part of P(x + ε d) is ∑ⱼ ∂ⱼP(x) dⱼ.

First-order Taylor expansion at a point of L.

def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.jet {n : ℕ} {L : Type u_3} [Field L] (a v u : Fin n → L) :

The point a + s v + t u over L[s][t] = L[s, t]/(s², t²).

Equations
Instances For

    Second-order Taylor expansion. At a + s v + t u, a polynomial takes the value P(a) + s ∇P(a)·v + t ∇P(a)·u + s t vᵀ H u, with H its Hessian at a.

    The second derivatives of a product of two variables. ∂ₖ ∂ₗ (Xₚ X_q) is the number of ways to match (l, k) with (p, q) or (q, p).

    Formal evaluation #

    theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.map_trace_algebraInterpretation {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) {A : Type u_2} {B : Type u_3} [CommSemiring A] [Algebra K A] [CommSemiring B] [Algebra K B] (φ : A →ₐ[K] B) (p : Program σ n s) (x : Fin n → A) (w : Wire n s) :
    φ (p.trace (algebraInterpretation P A) x w) = p.trace (algebraInterpretation P B) (fun (j : Fin n) => φ (x j)) w

    Evaluating a program with polynomial gates commutes with algebra homomorphisms.

    theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.trace_eq_aeval_wirePolynomial {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) {A : Type u_2} [CommSemiring A] [Algebra K A] (p : Program σ n s) (x : Fin n → A) (w : Wire n s) :

    Over every commutative algebra, a wire carries its wire polynomial evaluated at the input.

    The cut kernel #

    The value of every wire at a jet.

    theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mix_jet {n s : ℕ} {L : Type u_2} [Field L] (S : Finset (Wire n s)) (a v u v' u' : Fin n → L) :
    SingleCut.mix S (jet a v u) (jet a v' u') = jet a (SingleCut.mix S v v') (SingleCut.mix S u u')

    Mixing two jets mixes their directions.

    theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mix_self {n s : ℕ} {L : Type u_2} (S : Finset (Wire n s)) (v : Fin n → L) :
    theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.boundaryKey_eq_of_forall {σ : Signature} {n s : ℕ} (p : Program σ n s) (S : Finset (Wire n s)) {U : Type u_3} {I : Interpretation σ U} {x x' : Fin n → U} (h : ∀ c ∈ SingleCut.forward p S ∪ SingleCut.backward p S, p.trace I x c = p.trace I x' c) :

    Two inputs with the same values on every crossing wire have the same boundary key.

    noncomputable def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.cutKernel {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) :
    Submodule L (Fin n → L)

    The cut kernel: the directions along which no crossing wire moves to first order.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mem_cutKernel {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {δ : Fin n → L} :
      δ ∈ cutKernel P p S a ↔ ∀ c ∈ SingleCut.forward p S ∪ SingleCut.backward p S, (jacobian (wirePolynomial P p) a).mulVec δ c = 0
      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.le_finrank_cutKernel_add {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) :

      The cut kernel has codimension at most the number of crossing signals.

      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.boundaryKey_jet_eq {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {v u : Fin n → L} (hv : v ∈ cutKernel P p S a) (hu : u ∈ cutKernel P p S a) :

      A direction in the cut kernel and the zero direction give jets with equal boundary keys.

      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.jacobian_mulVec_mix_left {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {δ : Fin n → L} (hδ : δ ∈ cutKernel P p S a) (w : Wire n s) :

      The left part of a kernel direction. Moving only the inputs in S along a kernel direction moves the wires in S as the full direction does and fixes the other wires.

      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.jacobian_mulVec_mix_right {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {δ : Fin n → L} (hδ : δ ∈ cutKernel P p S a) (w : Wire n s) :

      The right part of a kernel direction.

      theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.dotProduct_hessian_mulVec_eq_zero {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {v u : Fin n → L} (hv : v ∈ cutKernel P p S a) (hu : u ∈ cutKernel P p S a) (hvS : ∀ (j : Fin n), Wire.input j ∉ S → v j = 0) (huS : ∀ (j : Fin n), Wire.input j ∈ S → u j = 0) (w : Wire n s) :

      The Hessian pairs the two sides to zero. For kernel directions v on the inputs in S and u on the other inputs, the second-order cross term of every wire vanishes.

      def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mixLeft {n s : ℕ} {L : Type u_2} [Field L] (S : Finset (Wire n s)) :
      (Fin n → L) →ₗ[L] Fin n → L

      The linear map keeping the coordinates of the inputs in S and zeroing the others.

      Equations
      Instances For
        def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mixRight {n s : ℕ} {L : Type u_2} [Field L] (S : Finset (Wire n s)) :
        (Fin n → L) →ₗ[L] Fin n → L

        The linear map keeping the coordinates of the inputs outside S and zeroing the others.

        Equations
        Instances For
          def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.extendSub {n : ℕ} {L : Type u_2} [Field L] (X : Finset (Fin n)) :
          (↥X → L) →ₗ[L] Fin n → L

          Zero-extension of vectors on X to Fin n → L.

          Equations
          Instances For

            Zero-extension is injective.

            theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.jacobian_mulVec_eq_zero_of_forward {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {v : Fin n → L} (hvS : ∀ j ∉ SingleCut.inputsIn S, v j = 0) (hfwd : ∀ c ∈ SingleCut.forward p S, (jacobian (wirePolynomial P p) a).mulVec v c = 0) {w : Wire n s} (hw : w ∉ S) :

            One-sided forward determination. A direction supported on inputsIn S that fixes the forward signals to first order fixes every wire outside S to first order.

            theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.jacobian_mulVec_eq_zero_of_backward {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) {u : Fin n → L} (huS : ∀ j ∈ SingleCut.inputsIn S, u j = 0) (hbwd : ∀ c ∈ SingleCut.backward p S, (jacobian (wirePolynomial P p) a).mulVec u c = 0) {w : Wire n s} (hw : w ∈ S) :

            One-sided backward determination. Symmetrically, a direction supported outside inputsIn S that fixes the backward signals to first order fixes every wire in S to first order.

            noncomputable def Algebraic.Cutwidth.MultiOutput.Taylor.Internal.matSubKer {n : ℕ} {L : Type u_2} [Field L] {α : Type u_3} (M : Matrix α (Fin n) L) (X : Finset (Fin n)) (C : Finset α) :
            Submodule L (Fin n → L)

            The subspace of directions on X annihilated by the rows C of M, extended by zero outside X.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.support_of_mem_matSubKer {n : ℕ} {L : Type u_2} [Field L] {α : Type u_3} {M : Matrix α (Fin n) L} {X : Finset (Fin n)} {C : Finset α} {v : Fin n → L} (hv : v ∈ matSubKer M X C) {j : Fin n} (hj : j ∉ X) :
              v j = 0

              Vectors of matSubKer M X C vanish outside X.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.mulVec_eq_zero_of_mem_matSubKer {n : ℕ} {L : Type u_2} [Field L] {α : Type u_3} {M : Matrix α (Fin n) L} {X : Finset (Fin n)} {C : Finset α} {v : Fin n → L} (hv : v ∈ matSubKer M X C) {c : α} (hc : c ∈ C) :
              M.mulVec v c = 0

              Vectors of matSubKer M X C are annihilated by the rows C of M.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.card_le_finrank_matSubKer_add_rank {n : ℕ} {L : Type u_2} [Field L] {α : Type u_3} (M : Matrix α (Fin n) L) (X : Finset (Fin n)) (C : Finset α) :
              X.card ≤ Module.finrank L ↥(matSubKer M X C) + (M.submatrix (fun (c : ↥C) => ↑c) fun (j : ↥X) => ↑j).rank

              Rank-nullity for matSubKer: |X| ≤ dim (matSubKer M X C) + rank M[C, X].

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.card_le_finrank_matSubKer_add {n : ℕ} {L : Type u_2} [Field L] {α : Type u_3} (M : Matrix α (Fin n) L) (X : Finset (Fin n)) (C : Finset α) :

              |X| ≤ dim (matSubKer M X C) + |C|, as the block M[C, X] has at most |C| rows.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.exists_cut_directed {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) :
              ∃ (V : Submodule L (Fin n → L)) (W : Submodule L (Fin n → L)), (∀ v ∈ V, ∀ j ∉ SingleCut.inputsIn S, v j = 0) ∧ (∀ u ∈ W, ∀ j ∈ SingleCut.inputsIn S, u j = 0) ∧ (SingleCut.inputsIn S).card ≤ Module.finrank L ↥V + (SingleCut.forward p S).card ∧ (SingleCut.inputsIn S)ᶜ.card ≤ Module.finrank L ↥W + (SingleCut.backward p S).card ∧ (∀ v ∈ V, ∀ w ∉ S, (jacobian (wirePolynomial P p) a).mulVec v w = 0) ∧ (∀ u ∈ W, ∀ w ∈ S, (jacobian (wirePolynomial P p) a).mulVec u w = 0) ∧ ∀ v ∈ V, ∀ u ∈ W, ∀ (w : Wire n s), v ⬝ᵥ (hessian (wirePolynomial P p w) a).mulVec u = 0

              The directed Taylor cut lemma. There are subspaces V of directions on the inputs in S and W of directions on the other inputs, with |X_S| ≤ dim V + |forward S| and |X_T| ≤ dim W + |backward S| separately, such that V fixes every wire outside S and W every wire in S to first order, and the Hessian of every wire pairs V with W to zero.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.exists_cut {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) :
              ∃ (V : Submodule L (Fin n → L)) (W : Submodule L (Fin n → L)), (∀ v ∈ V, ∀ j ∉ SingleCut.inputsIn S, v j = 0) ∧ (∀ u ∈ W, ∀ j ∈ SingleCut.inputsIn S, u j = 0) ∧ n ≤ Module.finrank L ↥V + Module.finrank L ↥W + ((SingleCut.forward p S).card + (SingleCut.backward p S).card) ∧ (∀ v ∈ V, ∀ w ∉ S, (jacobian (wirePolynomial P p) a).mulVec v w = 0) ∧ (∀ u ∈ W, ∀ w ∈ S, (jacobian (wirePolynomial P p) a).mulVec u w = 0) ∧ ∀ v ∈ V, ∀ u ∈ W, ∀ (w : Wire n s), v ⬝ᵥ (hessian (wirePolynomial P p w) a).mulVec u = 0

              The Taylor cut lemma. There are subspaces V of directions on the inputs in S and W of directions on the other inputs, of total dimension at least n minus the number of crossing signals, such that V fixes every wire outside S and W every wire in S to first order, and the Hessian of every wire pairs V with W to zero.

              Linear algebra #

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.finrank_add_finrank_add_rank_le {L : Type u_2} [Field L] {ι : Type u_3} {κ : Type u_4} [Fintype ι] [Fintype κ] (B : Matrix ι κ L) (V : Submodule L (ι → L)) (W : Submodule L (κ → L)) (h : ∀ v ∈ V, ∀ u ∈ W, v ⬝ᵥ B.mulVec u = 0) :

              Orthogonal subspaces. If vᵀ B u = 0 for all v ∈ V and u ∈ W, then dim V + dim W + rank B is at most the sum of the dimensions of the two spaces.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.finrank_add_finrank_add_rank_fromBlocks_le {L : Type u_2} [Field L] {ι : Type u_3} {κ : Type u_4} {α : Type u_5} {β : Type u_6} [Fintype ι] [Fintype κ] [Fintype α] [Fintype β] (B : Matrix ι κ L) (J₁ : Matrix α ι L) (J₂ : Matrix β κ L) (V : Submodule L (ι → L)) (W : Submodule L (κ → L)) (hV : ∀ v ∈ V, J₁.mulVec v = 0) (hW : ∀ u ∈ W, J₂.mulVec u = 0) (hB : ∀ v ∈ V, ∀ u ∈ W, v ⬝ᵥ B.mulVec u = 0) :

              Orthogonal subspaces with side conditions. If J₁ annihilates V, J₂ annihilates W, and V and W are orthogonal through B, then dim V + dim W + rank (fromBlocks B J₁ᵀ J₂ 0) ≤ |ι| + |κ|.

              Rank consequences #

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.sum_subtype_of_support {n : ℕ} {L : Type u_2} [Field L] {X : Finset (Fin n)} (g : Fin n → L) (hg : ∀ j ∉ X, g j = 0) :
              ∑ j : ↥X, g ↑j = ∑ j : Fin n, g j

              A sum over the members of X of a function vanishing outside X is its full sum.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.finrank_map_funLeft {n : ℕ} {L : Type u_2} [Field L] (V : Submodule L (Fin n → L)) (X : Finset (Fin n)) (hV : ∀ v ∈ V, ∀ j ∉ X, v j = 0) :

              Restricting a subspace of vectors vanishing outside X to the coordinates in X keeps its dimension.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.finrank_add_blockRank_le {n m : ℕ} {L : Type u_2} [Field L] (M : Matrix (Fin m) (Fin n) L) (Y : Finset (Fin m)) (X : Finset (Fin n)) (V : Submodule L (Fin n → L)) (hV : ∀ v ∈ V, ∀ j ∉ X, v j = 0) (hM : ∀ v ∈ V, ∀ o ∈ Y, M.mulVec v o = 0) :

              Kernel dimension. A subspace of vectors vanishing outside X that the rows Y of M annihilate has dimension at most |X| - rank M[Y, X].

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.blockRank_jacobian_le_forward {K : Type u_1} [CommRing K] {σ : Signature} {n s m : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (out : Fin m → Wire n s) :
              blockRank (jacobian (fun (o : Fin m) => wirePolynomial P p (out o)) a) (outputsIn out S)ᶜ (SingleCut.inputsIn S) ≤ (SingleCut.forward p S).card

              The forward Jacobian consequence. At every point, the block of the Jacobian of the outputs from the inputs in S to the outputs outside S has rank at most |forward p S|.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.blockRank_jacobian_le_backward {K : Type u_1} [CommRing K] {σ : Signature} {n s m : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (out : Fin m → Wire n s) :

              The backward Jacobian consequence. Symmetrically, the block of the Jacobian of the outputs from the inputs outside S to the outputs in S has rank at most |backward p S|.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.blockRank_jacobian_add_blockRank_le {K : Type u_1} [CommRing K] {σ : Signature} {n s m : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (out : Fin m → Wire n s) :
              blockRank (jacobian (fun (o : Fin m) => wirePolynomial P p (out o)) a) (outputsIn out S)ᶜ (SingleCut.inputsIn S) + blockRank (jacobian (fun (o : Fin m) => wirePolynomial P p (out o)) a) (outputsIn out S) (SingleCut.inputsIn S)ᶜ ≤ (SingleCut.forward p S).card + (SingleCut.backward p S).card

              The Jacobian consequence. At every point, the blocks of the Jacobian of the outputs from the inputs in S to the outputs outside S, and from the other inputs to the outputs in S, have ranks summing to at most the number of crossing signals.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.blockRank_le_of_orthogonal {K : Type u_1} [CommRing K] {σ : Signature} {n s : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (H : Matrix (Fin n) (Fin n) L) (hH_orth : ∀ (v u : Fin n → L), (∀ (w : Wire n s), v ⬝ᵥ (hessian (wirePolynomial P p w) a).mulVec u = 0) → v ⬝ᵥ H.mulVec u = 0) :

              The Hessian-type cut bound for any orthogonal form. If a matrix H pairs to zero every v and u that every wire Hessian at a pairs to zero, then its block H[X_S, X_T] has rank at most the number of crossing signals.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.blockRank_hessian_le {K : Type u_1} [CommRing K] {σ : Signature} {n s m : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (out : Fin m → Wire n s) (c : Fin m → L) :

              The Hessian consequence. At every point and for every combination ∑ₒ cₒ fₒ of the outputs, the block of its Hessian between the inputs in S and the other inputs has rank at most the number of crossing signals.

              theorem Algebraic.Cutwidth.MultiOutput.Taylor.Internal.rank_fromBlocks_hessian_jacobian_le {K : Type u_1} [CommRing K] {σ : Signature} {n s m : ℕ} {L : Type u_2} [Field L] [Algebra K L] (P : (op : σ.Op) → MvPolynomial (Fin (σ.Arity op)) K) (p : Program σ n s) (S : Finset (Wire n s)) (a : Fin n → L) (out : Fin m → Wire n s) (c : Fin m → L) :
              (Matrix.fromBlocks ((∑ o : Fin m, c o • hessian (wirePolynomial P p (out o)) a).submatrix (fun (i : ↥(SingleCut.inputsIn S)) => ↑i) fun (j : ↥(SingleCut.inputsIn S)ᶜ) => ↑j) ((jacobian (fun (o : Fin m) => wirePolynomial P p (out o)) a).submatrix (fun (o : ↥(outputsIn out S)ᶜ) => ↑o) fun (i : ↥(SingleCut.inputsIn S)) => ↑i).transpose ((jacobian (fun (o : Fin m) => wirePolynomial P p (out o)) a).submatrix (fun (o : ↥(outputsIn out S)) => ↑o) fun (j : ↥(SingleCut.inputsIn S)ᶜ) => ↑j) 0).rank ≤ (SingleCut.forward p S).card + (SingleCut.backward p S).card

              The unified first-and-second-order jet cut bound. At every point a and for every combination H = ∑ₒ cₒ ∇² fₒ(a) of the output Hessians, the combined block matrix formed by H[X_S, X_T], J[O_T, X_S]ᵀ, and J[O_S, X_T] has rank at most |forward p S| + |backward p S|.