ProCGroups.FoxDifferential.Common.FoxBoundary
The principal declarations in this module are:
coefficientFoxBoundaryThe Fox boundary crossed differential attached to a coefficient homomorphism: \(g \mapsto \operatorname{coeff}(g)-1\). -coefficientFoxBoundaryCrossedHomThe coefficient Fox boundary is a crossed differential. -coefficientFoxBoundary_oneThe coefficient Fox boundary sends the identity to zero. -coefficientFoxBoundary_mulProduct rule for the coefficient Fox boundary \(g \mapsto \operatorname{coeff}(g)-1\).
Imported by
- ProCGroups.FoxDifferential.Common
- ProCGroups.FoxDifferential.Completed.FiniteStage.Stage.Derivative.Boundary
- ProCGroups.FoxDifferential.Completed.ProCIntegerCoefficients.FreeGroup.Coordinates
- ProCGroups.FoxDifferential.Completed.Residue.FreeGroup.Boundary
- ProCGroups.FoxDifferential.Discrete.FoxCalculus.Boundary
def coefficientFoxBoundary (coeff : G →* R) (g : G) : R :=
coeff g - 1The Fox boundary crossed differential attached to a coefficient homomorphism: \(g \mapsto \operatorname{coeff}(g)-1\).
@[simp]
theorem coefficientFoxBoundary_one (coeff : G →* R) :
coefficientFoxBoundary coeff 1 = 0The coefficient Fox boundary sends the identity to zero.
Show Lean proof
by
simp only [coefficientFoxBoundary, map_one, sub_self]
theorem coefficientFoxBoundary_mul (coeff : G →* R) (g h : G) :
coefficientFoxBoundary coeff (g * h) =
coefficientFoxBoundary coeff g + coeff g • coefficientFoxBoundary coeff hProduct rule for the coefficient Fox boundary \(g \mapsto \operatorname{coeff}(g)-1\).
Show Lean proof
by
rw [coefficientFoxBoundary, coefficientFoxBoundary, coefficientFoxBoundary, map_mul]
change coeff g * coeff h - 1 = coeff g - 1 + coeff g * (coeff h - 1)
rw [sub_eq_add_neg, sub_eq_add_neg, sub_eq_add_neg, mul_add, mul_neg, mul_one]
rw [show coeff g + -1 + (coeff g * coeff h + -coeff g) =
coeff g + -coeff g + (coeff g * coeff h + -1) by ac_rfl]
simp only [add_neg_cancel, zero_add]
def coefficientFoxBoundaryCrossedHom (coeff : G →* R) : ScalarCrossedHom coeff R where
toFun := coefficientFoxBoundary coeff
map_mul' := coefficientFoxBoundary_mul coeffThe coefficient Fox boundary is a crossed differential.
@[simp]
theorem coefficientFoxBoundaryCrossedHom_apply (coeff : G →* R) (g : G) :
coefficientFoxBoundaryCrossedHom coeff g = coeff g - 1The coefficient boundary crossed homomorphism sends a group element to its coefficient minus one.
Show Lean proof
rfl
def foxBoundaryMap (generatorBoundary : X → R) : (X → R) →ₗ[R] R where
toFun v := ∑ x : X, v x * generatorBoundary x
map_add' v w := by
simp only [Pi.add_apply, add_mul, Finset.sum_add_distrib]
map_smul' r v := by
simp only [Pi.smul_apply, smul_eq_mul, mul_assoc, RingHom.id_apply, Finset.mul_sum]The finite Fox boundary map with prescribed generator boundary values sends a coordinate vector \(v : X \to R\) to \(\sum_x v(x)\,\mathrm{generatorBoundary}(x)\).
theorem foxBoundaryMap_apply (generatorBoundary : X → R) (v : X → R) :
foxBoundaryMap generatorBoundary v =
∑ x : X, v x * generatorBoundary xThe boundary map is evaluated on the canonical generators and then extended linearly to the coordinate module.
Show Lean proof
rfl
@[simp]
theorem foxBoundaryMap_single (generatorBoundary : X → R) (x : X) :
foxBoundaryMap generatorBoundary (Pi.single x (1 : R)) = generatorBoundary xThe finite Fox boundary map sends a coordinate basis vector to the corresponding generator boundary.
Show Lean proof
by
rw [foxBoundaryMap_apply]
rw [Finset.sum_eq_single x]
· simp only [Pi.single_eq_same, one_mul]
· intro y _ hy
simp only [Pi.single_eq_of_ne hy, zero_mul]
· simp only [Finset.mem_univ, not_true_eq_false, Pi.single_eq_same, one_mul, IsEmpty.forall_iff]
theorem foxBoundaryMap_freeCrossedHomWithCoeff
(boundary : ScalarCrossedHom coeff R)
(hgenerator : ∀ x : X, boundary (FreeGroup.of x) = generatorBoundary x)
(w : FreeGroup X) :
foxBoundaryMap generatorBoundary
(freeCrossedHomWithCoeff
(A := X → R) coeff (fun x : X => Pi.single x (1 : R)) w) =
boundary wBoundary-map form of the generic free-group Fox formula: applying the Fox boundary map to the free crossed differential recovers the crossed differential with the prescribed generator values.
Show Lean proof
by
let delta : ScalarCrossedHom coeff R :=
ScalarCrossedHom.mapLinear
(freeCrossedHomWithCoeff
(A := X → R) coeff (fun x : X => Pi.single x (1 : R)))
(foxBoundaryMap generatorBoundary)
have hdelta_generator :
∀ x : X, delta (FreeGroup.of x) = generatorBoundary x := by
intro x
simp only [delta, ScalarCrossedHom.mapLinear_apply, freeCrossedHomWithCoeff_of,
foxBoundaryMap_single]
have hdelta_eq :
delta = freeCrossedHomWithCoeff (A := R) coeff generatorBoundary :=
freeCrossedHomWithCoeff_unique
(A := R) coeff generatorBoundary delta hdelta_generator
have hboundary_eq :
boundary = freeCrossedHomWithCoeff (A := R) coeff generatorBoundary :=
freeCrossedHomWithCoeff_unique
(A := R) coeff generatorBoundary boundary hgenerator
change delta w = boundary w
rw [hdelta_eq, hboundary_eq]
theorem foxBoundaryMap_of_crossedHom
(delta : ScalarCrossedHom coeff (X → R))
(hdelta_generator :
∀ x : X, delta (FreeGroup.of x) = Pi.single x (1 : R))
(boundary : ScalarCrossedHom coeff R)
(hboundary_generator :
∀ x : X, boundary (FreeGroup.of x) = generatorBoundary x)
(w : FreeGroup X) :
foxBoundaryMap generatorBoundary (delta w) = boundary wConditional boundary-map form of the generic free-group Fox formula. Any crossed differential with standard coordinate values satisfies the same boundary formula as the canonical free crossed differential.
Show Lean proof
by
have hdelta_eq :
delta =
freeCrossedHomWithCoeff
(A := X → R) coeff (fun x : X => Pi.single x (1 : R)) :=
freeCrossedHomWithCoeff_unique
(A := X → R) coeff (fun x : X => Pi.single x (1 : R))
delta hdelta_generator
rw [hdelta_eq]
exact foxBoundaryMap_freeCrossedHomWithCoeff
coeff generatorBoundary boundary hboundary_generator w
theorem foxEulerFormula_of_crossedHom
(delta : ScalarCrossedHom coeff (X → R))
(hdelta_generator :
∀ x : X, delta (FreeGroup.of x) = Pi.single x (1 : R))
(w : FreeGroup X) :
coeff w - 1 =
∑ x : X, delta w x * (coeff (FreeGroup.of x) - 1)Explicit finite-sum form of the generic Fox--Euler formula for any crossed differential with standard coordinate values: \(\mathrm{coeff}(w)-1=\sum_x \delta_x(w)(\mathrm{coeff}(x)-1)\).
Show Lean proof
by
have hboundary :=
foxBoundaryMap_of_crossedHom
coeff
(fun x : X => coefficientFoxBoundary coeff (FreeGroup.of x))
delta hdelta_generator
(coefficientFoxBoundaryCrossedHom coeff)
(by intro x; rfl)
w
simpa [coefficientFoxBoundary, foxBoundaryMap_apply] using hboundary.symm