Module

FreeCrossedDifferential.lean

Nyll.ProCGroups.FoxDifferential.Common.FreeCrossedDifferential
50 declarations indexed from sourceView source ↗

Fox differential: common — free crossed differential

The principal declarations in this module are:

  • freeCrossedHomActionLift

The standard semidirect-product lift producing a free crossed homomorphism for an arbitrary additive action.

  • freeCrossedHomForAction

The free crossed homomorphism with prescribed generator values for a general additive action. This is the canonical action-level construction; scalar Fox differentials specialize it via scalarCrossedAction.

  • freeCrossedHomActionLift_right

The free-group component of semidirect multiplication.

  • freeCrossedHomForAction_of

The free crossed homomorphism takes each free generator to its prescribed basis value.

Declarations

FoxDifferential.freeCrossedHomActionLift

The standard semidirect-product lift producing a free crossed homomorphism for an arbitrary additive action.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
def freeCrossedHomActionLift :
    FreeGroup X →* CrossedSemidirectProduct action
FoxDifferential.freeCrossedHomActionLift_right

The free-group component of semidirect multiplication.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
theorem freeCrossedHomActionLift_right (w : FreeGroup X) :
    (freeCrossedHomActionLift action basisValue w).right = w
FoxDifferential.freeCrossedHomForAction

The free crossed homomorphism with prescribed generator values for a general additive action. This is the canonical action-level construction; scalar Fox differentials specialize it via scalarCrossedAction.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
def freeCrossedHomForAction : CrossedHom action
FoxDifferential.freeCrossedHomForAction_of

The free crossed homomorphism takes each free generator to its prescribed basis value.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
theorem freeCrossedHomForAction_of (x : X) :
    freeCrossedHomForAction action basisValue (FreeGroup.of x) = basisValue x
FoxDifferential.freeCrossedHomForAction_unique

A crossed homomorphism on a free group is determined by its values on the free generators, for an arbitrary additive action.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
theorem freeCrossedHomForAction_unique
    (delta : CrossedHom action)
    (hbasis : ∀ x : X, delta (FreeGroup.of x) = basisValue x) :
    delta = freeCrossedHomForAction action basisValue
FoxDifferential.crossedHomForActionEquivGeneratorValues

General-action crossed homomorphisms on a free group are equivalent to generator-value assignments.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
section GeneralAction
variable (action : FreeGroup X →* Multiplicative (AddAut A)) (basisValue : X → A)
def crossedHomForActionEquivGeneratorValues : CrossedHom action ≃ (X → A) where
  toFun delta x := delta (FreeGroup.of x)
  invFun values := freeCrossedHomForAction action values
  left_inv delta := (freeCrossedHomForAction_unique action
    (fun x => delta (FreeGroup.of x)) delta (by intro x; rfl)).symm
  right_inv values := by
    funext x
    exact freeCrossedHomForAction_of action values x
FoxDifferential.freeCrossedDifferentialWithCoeffLift

The semidirect lift whose left component is the free crossed differential with prescribed generator values.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
def freeCrossedDifferentialWithCoeffLift :
    FreeGroup X →* CrossedSemidirectProduct (scalarCrossedAction (A := A) coeff)
FoxDifferential.freeCrossedDifferentialWithCoeff

The free crossed differential with coefficient homomorphism coeff and prescribed generator values basisValue.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
def freeCrossedDifferentialWithCoeff (w : FreeGroup X) : A
FoxDifferential.freeCrossedDifferentialWithCoeffLift_right

The right component of the free crossed-differential lift is the identity on the free group.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedDifferentialWithCoeffLift_right (w : FreeGroup X) :
    (freeCrossedDifferentialWithCoeffLift (A := A) coeff basisValue w).right = w
FoxDifferential.freeCrossedDifferentialWithCoeff_one

The free crossed differential sends the identity word to zero.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedDifferentialWithCoeff_one :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue 1 = 0
FoxDifferential.freeCrossedDifferentialWithCoeff_of

The free crossed differential sends a free generator to its prescribed value.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedDifferentialWithCoeff_of (x : X) :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue (FreeGroup.of x) =
      basisValue x
FoxDifferential.freeCrossedDifferentialWithCoeff_mul

Product rule for the free crossed differential with arbitrary coefficients.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedDifferentialWithCoeff_mul (u v : FreeGroup X) :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue (u * v) =
      freeCrossedDifferentialWithCoeff (A := A) coeff basisValue u +
        coeff u • freeCrossedDifferentialWithCoeff (A := A) coeff basisValue v
FoxDifferential.freeCrossedDifferentialWithCoeff_inv

Inverse rule for the free crossed differential with arbitrary coefficients.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedDifferentialWithCoeff_inv (w : FreeGroup X) :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue w⁻¹ =
      -(coeff w⁻¹ • freeCrossedDifferentialWithCoeff (A := A) coeff basisValue w)
FoxDifferential.freeCrossedHomWithCoeff

The free crossed differential with coefficient homomorphism \(\mathrm{coeff}\) and prescribed generator values \(\mathrm{basisValue}\).

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
def freeCrossedHomWithCoeff : ScalarCrossedHom coeff A
FoxDifferential.freeCrossedHomWithCoeff_apply

Evaluating the bundled free crossed homomorphism gives the corresponding free crossed differential.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedHomWithCoeff_apply (w : FreeGroup X) :
    freeCrossedHomWithCoeff (A := A) coeff basisValue w =
      freeCrossedDifferentialWithCoeff (A := A) coeff basisValue w
FoxDifferential.freeCrossedHomWithCoeff_of

The free crossed differential sends a free generator to its prescribed value.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedHomWithCoeff_of (x : X) :
    freeCrossedHomWithCoeff (A := A) coeff basisValue (FreeGroup.of x) = basisValue x
FoxDifferential.freeCrossedHomWithCoeff_unique

Uniqueness of crossed differentials on a free group from their generator values, for an arbitrary coefficient homomorphism.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem freeCrossedHomWithCoeff_unique
    (delta : ScalarCrossedHom coeff A)
    (hbasis : ∀ x : X, delta (FreeGroup.of x) = basisValue x) :
    delta = freeCrossedHomWithCoeff (A := A) coeff basisValue
FoxDifferential.existsUnique_freeCrossedHomWithCoeff

Existence and uniqueness of crossed differentials on a free group from arbitrary generator values and an arbitrary coefficient homomorphism.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
theorem existsUnique_freeCrossedHomWithCoeff :
    ∃! delta : ScalarCrossedHom coeff A,
      ∀ x : X, delta (FreeGroup.of x) = basisValue x
FoxDifferential.crossedHomEquivGeneratorValues

Crossed differentials on a free group are equivalent to assignments of values on the free generators.

Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
def crossedHomEquivGeneratorValues : ScalarCrossedHom coeff A ≃ (X → A) where
  toFun delta := fun x => delta (FreeGroup.of x)
  invFun basisValue := freeCrossedHomWithCoeff (A := A) coeff basisValue
  left_inv delta := by
    exact (freeCrossedHomWithCoeff_unique (A := A) coeff
      (fun x => delta (FreeGroup.of x)) delta (by intro x; rfl)).symm
  right_inv basisValue := by
    funext x
    exact freeCrossedHomWithCoeff_of (A := A) coeff basisValue x
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates

The universal Fox-coordinate crossed differential for an arbitrary coefficient homomorphism to a ring.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
def freeCrossedDifferentialWithCoeffCoordinates
    (coeff : FreeGroup X →* S) (w : FreeGroup X) : X → S
FoxDifferential.freeCrossedHomWithCoeffCoordinates

The universal Fox-coordinate crossed differential for an arbitrary coefficient homomorphism to a ring.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
def freeCrossedHomWithCoeffCoordinates
    (coeff : FreeGroup X →* S) : ScalarCrossedHom coeff (X → S)
FoxDifferential.freeCrossedHomWithCoeffCoordinates_apply

Evaluating the bundled coordinate crossed homomorphism gives the unbundled coordinate differential.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedHomWithCoeffCoordinates_apply
    (coeff : FreeGroup X →* S) (w : FreeGroup X) :
    freeCrossedHomWithCoeffCoordinates (X := X) coeff w =
      freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff w
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates_one

The coordinate crossed differential sends the identity word to zero.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffCoordinates_one
    (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff (1 : FreeGroup X) = 0
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates_of

The coordinate crossed differential sends a generator to the standard coordinate vector.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffCoordinates_of
    (coeff : FreeGroup X →* S) (x : X) :
    freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff (FreeGroup.of x) =
      Pi.single x (1 : S)
FoxDifferential.freeCrossedDifferentialWithCoeffExpansionLinearMap

The finite linear map evaluating a coordinate vector on prescribed generator values.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
def freeCrossedDifferentialWithCoeffExpansionLinearMap
    [Fintype X] (basisValue : X → B) : (X → S) →ₗ[S] B where
  toFun v := ∑ x : X, v x • basisValue x
  map_add' v w := by
    simp only [Pi.add_apply, add_smul, Finset.sum_add_distrib]
  map_smul' a v := by
    simp only [Pi.smul_apply, smul_eq_mul, RingHom.id_apply, Finset.smul_sum, smul_smul]
FoxDifferential.freeCrossedDifferentialWithCoeffExpansionLinearMap_apply

The coefficient-expansion linear map evaluates v as ∑ x, v x • basisValue x.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffExpansionLinearMap_apply
    [Fintype X] (basisValue : X → B) (v : X → S) :
    freeCrossedDifferentialWithCoeffExpansionLinearMap (X := X) basisValue v =
      ∑ x : X, v x • basisValue x
FoxDifferential.freeCrossedDifferentialWithCoeffExpansionLinearMap_single

The expansion linear map sends a standard coordinate vector to the corresponding value.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffExpansionLinearMap_single
    [Fintype X] (basisValue : X → B) (x : X) :
    freeCrossedDifferentialWithCoeffExpansionLinearMap (X := X) basisValue
        (Pi.single x (1 : S)) =
      basisValue x
FoxDifferential.freeCrossedDifferentialWithCoeffExpansion

The Fox-coordinate expansion determined by arbitrary coefficient coordinates.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
def freeCrossedDifferentialWithCoeffExpansion
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B)
    (w : FreeGroup X) : B
FoxDifferential.freeCrossedHomWithCoeffExpansion

Arbitrary coefficient coordinates determine the Fox-coordinate expansion.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
def freeCrossedHomWithCoeffExpansion
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) :
    ScalarCrossedHom coeff B
FoxDifferential.freeCrossedHomWithCoeffExpansion_apply

Evaluating the bundled coordinate expansion gives the corresponding unbundled Fox expansion.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedHomWithCoeffExpansion_apply
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) (w : FreeGroup X) :
    freeCrossedHomWithCoeffExpansion (X := X) coeff basisValue w =
      freeCrossedDifferentialWithCoeffExpansion (X := X) coeff basisValue w
FoxDifferential.freeCrossedDifferentialWithCoeffExpansion_of

The coefficient-coordinate expansion sends each generator to its prescribed value.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffExpansion_of
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) (x : X) :
    freeCrossedDifferentialWithCoeffExpansion (X := X) coeff basisValue (FreeGroup.of x) =
      basisValue x
FoxDifferential.freeCrossedDifferentialWithCoeff_eq_expansion

A free crossed differential is its coefficient-coordinate expansion.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeff_eq_expansion
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) (w : FreeGroup X) :
    freeCrossedDifferentialWithCoeff (A := B) coeff basisValue w =
      freeCrossedDifferentialWithCoeffExpansion (X := X) coeff basisValue w
FoxDifferential.freeCrossedHomWithCoeff_comp_expansion

Abstract Fox chain rule: composing a crossed differential with a free-group homomorphism is the coordinate expansion using the pulled-back coefficient homomorphism.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedHomWithCoeff_comp_expansion
    [Fintype X]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (delta : ScalarCrossedHom coeff B) (w : FreeGroup X) :
    delta (φ w) =
      freeCrossedDifferentialWithCoeffExpansion
        (X := X) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x))) w := by
  let pulled : ScalarCrossedHom (coeff.comp φ) B :=
    ScalarCrossedHom.compMonoidHom delta φ
  have hunique :
      pulled =
        freeCrossedHomWithCoeff
          (A := B) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x))) :=
    freeCrossedHomWithCoeff_unique
      (A := B) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x)))
      pulled (by intro x; rfl)
  calc
    delta (φ w) = pulled w := rfl
    _ =
        freeCrossedDifferentialWithCoeff
          (A := B) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x))) w := by
          exact congrArg (fun d : ScalarCrossedHom (coeff.comp φ) B => d w) hunique
    _ =
        freeCrossedDifferentialWithCoeffExpansion
          (X := X) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x))) w := by
          exact freeCrossedDifferentialWithCoeff_eq_expansion
            (X := X) (B := B) (coeff.comp φ)
            (fun x : X => delta (φ (FreeGroup.of x))) w
FoxDifferential.freeCrossedDifferentialWithCoeffJacobian

The abstract Fox-Jacobian of a homomorphism of free sources, with coefficients in S.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
def freeCrossedDifferentialWithCoeffJacobian
    [DecidableEq Y] (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    X → Y → S
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianMatrix

The abstract Fox-Jacobian of a free-source homomorphism as a matrix.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
def freeCrossedDifferentialWithCoeffJacobianMatrix
    [DecidableEq Y] (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    Matrix X Y S
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianMatrix_apply

The abstract Fox-Jacobian matrix entry is the corresponding Fox-Jacobian component.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobianMatrix_apply
    [DecidableEq Y] (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (x : X) (y : Y) :
    freeCrossedDifferentialWithCoeffJacobianMatrix (X := X) coeff φ x y =
      freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ x y
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap

The abstract Fox-Jacobian determines a finite linear map between the corresponding free coefficient modules.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
def freeCrossedDifferentialWithCoeffJacobianLinearMap
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    (X → S) →ₗ[S] (Y → S)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap_apply

Evaluation of the linear map associated with the abstract Fox-Jacobian is computed by the corresponding matrix coefficient formula.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobianLinearMap_apply
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (v : X → S) (y : Y) :
    freeCrossedDifferentialWithCoeffJacobianLinearMap (X := X) coeff φ v y =
      ∑ x : X, v x * freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ x y
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap_single

The abstract Fox-Jacobian linear map sends a source basis vector to the corresponding row.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffJacobianLinearMap_single
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) (x : X) :
    freeCrossedDifferentialWithCoeffJacobianLinearMap (X := X) coeff φ
        (Pi.single x (1 : S)) =
      freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ x
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap_eq_vecMul

The abstract Fox-Jacobian linear map is row-vector multiplication by its matrix.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobianLinearMap_eq_vecMul
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) (v : X → S) :
    freeCrossedDifferentialWithCoeffJacobianLinearMap (X := X) coeff φ v =
      Matrix.vecMul v
        (freeCrossedDifferentialWithCoeffJacobianMatrix (X := X) coeff φ)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobian_id

The abstract Fox-Jacobian of the identity homomorphism is the identity family.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffJacobian_id (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffJacobian
        (X := X) (Y := X) coeff (MonoidHom.id (FreeGroup X)) =
      foxJacobianId (R := S) (X := X)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianMatrix_id

The abstract Fox-Jacobian matrix of the identity homomorphism is the identity matrix.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffJacobianMatrix_id (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffJacobianMatrix
        (X := X) (Y := X) coeff (MonoidHom.id (FreeGroup X)) =
      (1 : Matrix X X S)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap_id

The abstract Fox-Jacobian linear map of the identity homomorphism is the identity.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffJacobianLinearMap_id
    [Fintype X] (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffJacobianLinearMap
        (X := X) (Y := X) coeff (MonoidHom.id (FreeGroup X)) =
      (LinearMap.id : (X → S) →ₗ[S] (X → S))
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates_comp_linearMap

Abstract Fox chain rule for coordinate vectors, written as a Jacobian linear-map identity.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffCoordinates_comp_linearMap
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (w : FreeGroup X) :
    freeCrossedDifferentialWithCoeffCoordinates (X := Y) coeff (φ w) =
      freeCrossedDifferentialWithCoeffJacobianLinearMap (X := X) coeff φ
        (freeCrossedDifferentialWithCoeffCoordinates (X := X) (coeff.comp φ) w)
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates_comp_apply

Component form of the abstract Fox chain rule: the pushed-forward coordinate is the sum over source coordinates weighted by the Fox-Jacobian.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffCoordinates_comp_apply
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (w : FreeGroup X) (y : Y) :
    freeCrossedDifferentialWithCoeffCoordinates (X := Y) coeff (φ w) y =
      ∑ x : X,
        freeCrossedDifferentialWithCoeffCoordinates (X := X) (coeff.comp φ) w x *
          freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ x y
FoxDifferential.freeCrossedDifferentialWithCoeffCoordinates_comp_matrix

Abstract Fox chain rule for coordinate vectors, written as matrix multiplication.

Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
theorem freeCrossedDifferentialWithCoeffCoordinates_comp_matrix
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (w : FreeGroup X) :
    freeCrossedDifferentialWithCoeffCoordinates (X := Y) coeff (φ w) =
      Matrix.vecMul
        (freeCrossedDifferentialWithCoeffCoordinates (X := X) (coeff.comp φ) w)
        (freeCrossedDifferentialWithCoeffJacobianMatrix (X := X) coeff φ)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobian_comp_apply

Component form of the abstract Fox-Jacobian chain rule for a composite of free-group homomorphisms.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobian_comp_apply
    {Z : Type*} [Fintype Y] [DecidableEq Y] [DecidableEq Z]
    (coeff : FreeGroup Z →* S)
    (φ : FreeGroup Y →* FreeGroup Z) (χ : FreeGroup X →* FreeGroup Y)
    (x : X) (z : Z) :
    freeCrossedDifferentialWithCoeffJacobian (X := X) (Y := Z) coeff (φ.comp χ) x z =
      ∑ y : Y,
        freeCrossedDifferentialWithCoeffJacobian (X := X) (Y := Y) (coeff.comp φ) χ x y *
          freeCrossedDifferentialWithCoeffJacobian (X := Y) (Y := Z) coeff φ y z
FoxDifferential.freeCrossedDifferentialWithCoeffJacobian_comp

The abstract Fox-Jacobian chain rule is expressed in family form.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobian_comp
    {Z : Type*} [Fintype Y] [DecidableEq Y] [DecidableEq Z]
    (coeff : FreeGroup Z →* S)
    (φ : FreeGroup Y →* FreeGroup Z) (χ : FreeGroup X →* FreeGroup Y) :
    freeCrossedDifferentialWithCoeffJacobian (X := X) (Y := Z) coeff (φ.comp χ) =
      fun x z =>
        ∑ y : Y,
          freeCrossedDifferentialWithCoeffJacobian (X := X) (Y := Y) (coeff.comp φ) χ x y *
            freeCrossedDifferentialWithCoeffJacobian (X := Y) (Y := Z) coeff φ y z := by
  funext x z
  exact freeCrossedDifferentialWithCoeffJacobian_comp_apply
    (X := X) (Y := Y) coeff φ χ x z
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianLinearMap_comp

The abstract Fox-Jacobian chain rule is expressed in linear-map form.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobianLinearMap_comp
    {Z : Type*} [Fintype X] [Fintype Y] [DecidableEq Y] [DecidableEq Z]
    (coeff : FreeGroup Z →* S)
    (φ : FreeGroup Y →* FreeGroup Z) (χ : FreeGroup X →* FreeGroup Y) :
    (freeCrossedDifferentialWithCoeffJacobianLinearMap (X := Y) (Y := Z) coeff φ).comp
        (freeCrossedDifferentialWithCoeffJacobianLinearMap
          (X := X) (Y := Y) (coeff.comp φ) χ) =
      freeCrossedDifferentialWithCoeffJacobianLinearMap
        (X := X) (Y := Z) coeff (φ.comp χ)
FoxDifferential.freeCrossedDifferentialWithCoeffJacobianMatrix_comp

The abstract Fox-Jacobian chain rule is expressed in matrix form.

Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace FoxDifferential
noncomputable section
open scoped BigOperators
universe u v
variable {R : Type*} [Semiring R]
variable {A : Type*} [AddCommGroup A] [Module R A]
variable {X : Type u}
variable (coeff : FreeGroup X →* R) (basisValue : X → A)
section Coordinates
variable {S : Type*} [Ring S]
variable {B : Type*} [AddCommGroup B] [Module S B]
variable {Y : Type v}
variable [DecidableEq X]
omit [DecidableEq X] in
theorem freeCrossedDifferentialWithCoeffJacobianMatrix_comp
    {Z : Type*} [Fintype Y] [DecidableEq Y] [DecidableEq Z]
    (coeff : FreeGroup Z →* S)
    (φ : FreeGroup Y →* FreeGroup Z) (χ : FreeGroup X →* FreeGroup Y) :
    freeCrossedDifferentialWithCoeffJacobianMatrix
        (X := X) (Y := Z) coeff (φ.comp χ) =
      freeCrossedDifferentialWithCoeffJacobianMatrix
          (X := X) (Y := Y) (coeff.comp φ) χ *
        freeCrossedDifferentialWithCoeffJacobianMatrix
          (X := Y) (Y := Z) coeff φ