FoxDifferential.Common.FreeCrossedDifferential

38 Theorem | 9 Definition | 1 Structure | 4 Instance

This module develops Fox differentials and completed Fox coordinates for free, profinite, and pro-\(C\) group constructions.

import
Imported by

Declarations

structure FreeCrossedDifferentialSemidirect
    (coeff : FreeGroup X →* R) (A : Type*) [AddCommGroup A] [Module R A] where
  /-- Additive component carrying the crossed differential value. -/
  left : A
  /-- Free-group component carrying the source word. -/
  right : FreeGroup X

The semidirect product used to construct a free crossed differential with coefficients \(\mathrm{coeff}:\mathrm{FreeGroup}(X)\to R\), viewed multiplicatively. The right component remembers the free-group word, while the left component accumulates the crossed differential value.

instance instOneFreeCrossedDifferentialSemidirect :
    One (FreeCrossedDifferentialSemidirect (X := X) coeff A) where
  one := ⟨0, 1⟩

The unit of the free crossed-differential semidirect product is the pair of identity components.

instance instMulFreeCrossedDifferentialSemidirect :
    Mul (FreeCrossedDifferentialSemidirect (X := X) coeff A) where
  mul x y := ⟨x.left + coeff x.right • y.left, x.right * y.right⟩

Multiplication in the free crossed-differential semidirect product is given by the crossed action and group multiplication.

instance instInvFreeCrossedDifferentialSemidirect :
    Inv (FreeCrossedDifferentialSemidirect (X := X) coeff A) where
  inv x := ⟨-(coeff x.right⁻¹ • x.left), x.right⁻¹⟩

Inversion in the free crossed-differential semidirect product is computed from the inverse in the base group and the crossed action.

theorem ext {x y : FreeCrossedDifferentialSemidirect (X := X) coeff A}
    (hleft : x.left = y.left) (hright : x.right = y.right) : x = y

Extensionality for the free crossed-differential semidirect product.

Show proof
theorem one_left :
    (1 : FreeCrossedDifferentialSemidirect (X := X) coeff A).left = 0

The additive component of the identity semidirect element is zero.

Show proof
theorem one_right :
    (1 : FreeCrossedDifferentialSemidirect (X := X) coeff A).right = 1

The free-group component of the identity semidirect element is the identity word.

Show proof
theorem mul_left (x y : FreeCrossedDifferentialSemidirect (X := X) coeff A) :
    (x * y).left = x.left + coeff x.right • y.left

The additive component of semidirect multiplication.

Show proof
theorem mul_right (x y : FreeCrossedDifferentialSemidirect (X := X) coeff A) :
    (x * y).right = x.right * y.right

The free-group component of semidirect multiplication.

Show proof
theorem inv_left (x : FreeCrossedDifferentialSemidirect (X := X) coeff A) :
    x⁻¹.left = -(coeff x.right⁻¹ • x.left)

The additive component of semidirect inversion.

Show proof
theorem inv_right (x : FreeCrossedDifferentialSemidirect (X := X) coeff A) :
    x⁻¹.right = x.right⁻¹

The free-group component of semidirect inversion.

Show proof
instance instGroupFreeCrossedDifferentialSemidirect :
    Group (FreeCrossedDifferentialSemidirect (X := X) coeff A) where
  one := 1
  mul := (· * ·)
  inv := Inv.inv
  mul_assoc x y z := by
    ext
    · simp only [mul_left, mul_right, map_mul, add_assoc, smul_add, smul_smul]
    · simp only [mul_right, mul_assoc]
  one_mul x := by
    ext
    · simp only [mul_left, one_left, one_right, map_one, one_smul, zero_add]
    · simp only [mul_right, one_right, one_mul]
  mul_one x := by
    ext
    · simp only [mul_left, one_left, smul_zero, add_zero]
    · simp only [mul_right, one_right, mul_one]
  inv_mul_cancel x := by
    ext
    · simp only [mul_left, inv_left, inv_right, neg_add_cancel, one_left]
    · simp only [mul_right, inv_right, inv_mul_cancel, one_right]

The free crossed-differential semidirect product carries the group structure induced by its crossed action.

def freeCrossedDifferentialWithCoeffLift :
    FreeGroup X →* FreeCrossedDifferentialSemidirect (X := X) coeff A :=
  FreeGroup.lift fun x => ⟨basisValue x, FreeGroup.of x⟩

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

def freeCrossedDifferentialWithCoeff (w : FreeGroup X) : A :=
  (freeCrossedDifferentialWithCoeffLift (A := A) coeff basisValue w).left

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

theorem freeCrossedDifferentialWithCoeffLift_right (w : FreeGroup X) :
    (freeCrossedDifferentialWithCoeffLift (A := A) coeff basisValue w).right = w

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

Show proof
theorem freeCrossedDifferentialWithCoeff_one :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue 1 = 0

The free crossed differential sends the identity word to zero.

Show proof
theorem freeCrossedDifferentialWithCoeff_of (x : X) :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue (FreeGroup.of x) =
      basisValue x

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

Show proof
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

Product rule for the free crossed differential with arbitrary coefficients.

Show proof
theorem freeCrossedDifferentialWithCoeff_inv (w : FreeGroup X) :
    freeCrossedDifferentialWithCoeff (A := A) coeff basisValue w⁻¹ =
      -(coeff w⁻¹ • freeCrossedDifferentialWithCoeff (A := A) coeff basisValue w)

Inverse rule for the free crossed differential with arbitrary coefficients.

Show proof
theorem freeCrossedDifferentialWithCoeff_isCrossedDifferential :
    IsCrossedDifferential coeff
      (freeCrossedDifferentialWithCoeff (A := A) coeff basisValue)

The free crossed differential with arbitrary coefficients satisfies the Fox Leibniz rule.

Show proof
theorem freeCrossedDifferentialWithCoeff_unique
    (delta : FreeGroup X → A)
    (hdelta : IsCrossedDifferential coeff delta)
    (hbasis : ∀ x : X, delta (FreeGroup.of x) = basisValue x) :
    delta = freeCrossedDifferentialWithCoeff (A := A) coeff basisValue

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

Show proof
theorem existsUnique_freeCrossedDifferentialWithCoeff :
    ∃! delta : FreeGroup X → A,
      IsCrossedDifferential coeff delta ∧
        ∀ x : X, delta (FreeGroup.of x) = basisValue x

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

Show proof
def crossedDifferentialEquivGeneratorValues :
    {delta : FreeGroup X → A // IsCrossedDifferential coeff delta} ≃ (X → A) where
  toFun delta := fun x => delta.1 (FreeGroup.of x)
  invFun basisValue :=
    ⟨freeCrossedDifferentialWithCoeff (A := A) coeff basisValue,
      freeCrossedDifferentialWithCoeff_isCrossedDifferential (A := A) coeff basisValue⟩
  left_inv delta := by
    apply Subtype.ext
    exact (freeCrossedDifferentialWithCoeff_unique (A := A) coeff
      (fun x => delta.1 (FreeGroup.of x)) delta.1 delta.2 (by intro x; rfl)).symm
  right_inv basisValue := by
    funext x
    simp only [freeCrossedDifferentialWithCoeff_of]

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

def freeCrossedDifferentialWithCoeffCoordinates
    (coeff : FreeGroup X →* S) (w : FreeGroup X) : X → S :=
  freeCrossedDifferentialWithCoeff
    (A := X → S) coeff (fun x => Pi.single x (1 : S)) w

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

theorem freeCrossedDifferentialWithCoeffCoordinates_one
    (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff (1 : FreeGroup X) = 0

The coordinate crossed differential sends the identity word to zero.

Show proof
theorem freeCrossedDifferentialWithCoeffCoordinates_of
    (coeff : FreeGroup X →* S) (x : X) :
    freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff (FreeGroup.of x) =
      Pi.single x (1 : S)

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

Show proof
theorem freeCrossedDifferentialWithCoeffCoordinates_isCrossedDifferential
    (coeff : FreeGroup X →* S) :
    IsCrossedDifferential coeff
      (freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff)

The coordinate crossed differential is a crossed differential.

Show proof
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]

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

theorem freeCrossedDifferentialWithCoeffExpansionLinearMap_apply
    [Fintype X] (basisValue : X → B) (v : X → S) :
    freeCrossedDifferentialWithCoeffExpansionLinearMap (X := X) basisValue v =
      ∑ x : X, v x • basisValue x

The coefficient-change map is evaluated coordinatewise: the support in the finite quotient is unchanged and every coefficient is carried through the given ring homomorphism.

Show proof
theorem freeCrossedDifferentialWithCoeffExpansionLinearMap_single
    [Fintype X] (basisValue : X → B) (x : X) :
    freeCrossedDifferentialWithCoeffExpansionLinearMap (X := X) basisValue
        (Pi.single x (1 : S)) =
      basisValue x

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

Show proof
def freeCrossedDifferentialWithCoeffExpansion
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B)
    (w : FreeGroup X) : B :=
  freeCrossedDifferentialWithCoeffExpansionLinearMap (X := X) basisValue
    (freeCrossedDifferentialWithCoeffCoordinates (X := X) coeff w)

Arbitrary coefficient coordinates determine the Fox-coordinate expansion.

theorem freeCrossedDifferentialWithCoeffExpansion_isCrossedDifferential
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) :
    IsCrossedDifferential coeff
      (freeCrossedDifferentialWithCoeffExpansion (X := X) coeff basisValue)

The coefficient-coordinate expansion is a crossed differential.

Show proof
theorem freeCrossedDifferentialWithCoeffExpansion_of
    [Fintype X] (coeff : FreeGroup X →* S) (basisValue : X → B) (x : X) :
    freeCrossedDifferentialWithCoeffExpansion (X := X) coeff basisValue (FreeGroup.of x) =
      basisValue x

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

Show proof
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

A free crossed differential is its coefficient-coordinate expansion.

Show proof
theorem freeCrossedDifferentialWithCoeff_comp_expansion
    [Fintype X]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y)
    (delta : FreeGroup Y → B) (hdelta : IsCrossedDifferential coeff delta)
    (w : FreeGroup X) :
    delta (φ w) =
      freeCrossedDifferentialWithCoeffExpansion
        (X := X) (coeff.comp φ) (fun x : X => delta (φ (FreeGroup.of x))) w

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

Show proof
def freeCrossedDifferentialWithCoeffJacobian
    [DecidableEq Y] (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    X → Y → S :=
  fun x => freeCrossedDifferentialWithCoeffCoordinates (X := Y) coeff (φ (FreeGroup.of x))

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

def freeCrossedDifferentialWithCoeffJacobianMatrix
    [DecidableEq Y] (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    Matrix X Y S :=
  foxJacobianMatrix (freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ)

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

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

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

Show proof
def freeCrossedDifferentialWithCoeffJacobianLinearMap
    [Fintype X] [DecidableEq Y]
    (coeff : FreeGroup Y →* S) (φ : FreeGroup X →* FreeGroup Y) :
    (X → S) →ₗ[S] (Y → S) :=
  foxJacobianLinearMap (freeCrossedDifferentialWithCoeffJacobian (X := X) coeff φ)

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

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

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

Show proof
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

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

Show proof
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 φ)

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

Show proof
theorem freeCrossedDifferentialWithCoeffJacobian_id (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffJacobian
        (X := X) (Y := X) coeff (MonoidHom.id (FreeGroup X)) =
      foxJacobianId (R := S) (X := X)

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

Show proof
theorem freeCrossedDifferentialWithCoeffJacobianMatrix_id (coeff : FreeGroup X →* S) :
    freeCrossedDifferentialWithCoeffJacobianMatrix
        (X := X) (Y := X) coeff (MonoidHom.id (FreeGroup X)) =
      (1 : Matrix X X S)

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

Show proof
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))

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

Show proof
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)

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

Show proof
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

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

Show proof
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 φ)

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

Show proof
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

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

Show proof
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

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

Show proof
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 χ)

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

Show proof
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 φ

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

Show proof