Module

CrossedDifferential.lean

Nyll.ProCGroups.FoxDifferential.Common.CrossedDifferential
62 declarations indexed from sourceView source ↗

Bundled crossed homomorphisms

This module defines crossed homomorphisms for an additive group action and their scalar-character specialization. It supplies the Fox product, inverse, conjugation, commutator, and power rules; restriction to coefficient-trivial subgroups; linear pushforward and group-homomorphism pullback; the standard semidirect-product representation; and the additive-group structure on the space of crossed homomorphisms.

CrossedHom and ScalarCrossedHom are the only crossed-differential representations exposed by this module. The former parallel raw-function predicate and its conversion layer have been removed, so downstream APIs operate on the bundled maps directly.

Imports7
  • Mathlib.Algebra.Group.Commutator
  • Mathlib.Algebra.Group.Units.Hom
  • Mathlib.Algebra.GroupWithZero.Action.Basic
  • Mathlib.Algebra.Group.Subgroup.Lattice
  • Mathlib.Algebra.Module.BigOperators
  • Mathlib.Algebra.Module.LinearMap.Basic
  • Mathlib.GroupTheory.SemidirectProduct
Imported by3

Declarations

FoxDifferential.scalarCrossedAction

Scalar multiplication by a character coeff : G →* R, expressed as an additive action.

Because G is a group, every coeff g is automatically a unit; toHomUnits records that fact and produces actual additive automorphisms rather than mere additive endomorphisms.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
def scalarCrossedAction
    {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
    (coeff : G →* R) : G →* Multiplicative (AddAut A)
FoxDifferential.scalarCrossedAction_apply

The action induced by a scalar character evaluates as scalar multiplication.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
theorem scalarCrossedAction_apply
    {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
    (coeff : G →* R) (g : G) (a : A) :
    scalarCrossedAction (A := A) coeff g a = coeff g • a
FoxDifferential.crossedSemidirectMulAction

Convert an additive action to the multiplicative action used by Mathlib's standard SemidirectProduct.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
def crossedSemidirectMulAction
    {G A : Type*} [Group G] [AddCommGroup A]
    (action : G →* Multiplicative (AddAut A)) : G →* MulAut (Multiplicative A)
FoxDifferential.CrossedSemidirectProduct

The standard Mathlib semidirect product attached to an additive action.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
abbrev CrossedSemidirectProduct
    {G A : Type*} [Group G] [AddCommGroup A]
    (action : G →* Multiplicative (AddAut A))
FoxDifferential.crossedSemidirectMulAction_apply

The multiplicative form of an additive action agrees with the original action on elements.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
theorem crossedSemidirectMulAction_apply
    {G A : Type*} [Group G] [AddCommGroup A]
    (action : G →* Multiplicative (AddAut A)) (g : G) (a : A) :
    crossedSemidirectMulAction action g (Multiplicative.ofAdd a) =
      Multiplicative.ofAdd (action g a)
FoxDifferential.crossedSemidirectMulAction_toAdd

Read the multiplicative presentation of the action back in the original additive group.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
theorem crossedSemidirectMulAction_toAdd
    {G A : Type*} [Group G] [AddCommGroup A]
    (action : G →* Multiplicative (AddAut A)) (g : G) (a : Multiplicative A) :
    Multiplicative.toAdd (crossedSemidirectMulAction action g a) =
      action g (Multiplicative.toAdd a)
FoxDifferential.CrossedHom

A crossed homomorphism bundled with its acting representation and Fox--Leibniz law.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
structure CrossedHom
    {G A : Type*} [Group G] [AddCommGroup A]
    (action : G →* Multiplicative (AddAut A)) where
  /-- The function from the source group to the additive target. -/
  toFun : G → A
  /-- The crossed-homomorphism law with respect to the specified action. -/
  map_mul' : ∀ g h, toFun (g * h) = toFun g + action g (toFun h)
FoxDifferential.ScalarCrossedHom

Scalar-character crossed homomorphisms are a specialization of general crossed homomorphisms for the action scalarCrossedAction coeff.

Source context 2 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
abbrev ScalarCrossedHom
    {R G : Type*} [Semiring R] [Group G]
    (coeff : G →* R) (A : Type*) [AddCommGroup A] [Module R A]
FoxDifferential.CrossedHom.instFunLike

Crossed homomorphisms coerce to their underlying functions.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
instance instFunLike : FunLike (CrossedHom action) G A where
  coe := CrossedHom.toFun
  coe_injective f g h := by
    cases f
    cases g
    simp_all
FoxDifferential.CrossedHom.toFun_apply

The underlying function of a crossed homomorphism agrees with its coercion to a function.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem toFun_apply (d : CrossedHom action) (g : G) : d.toFun g = d g
FoxDifferential.CrossedHom.ext

Equality of crossed homomorphisms is pointwise equality.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem ext {d e : CrossedHom action} (h : ∀ g, d g = e g) : d = e
FoxDifferential.CrossedHom.map_mul

The bundled Fox--Leibniz rule for a general additive action.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_mul (d : CrossedHom action) (g h : G) :
    d (g * h) = d g + action g (d h)
FoxDifferential.CrossedHom.map_one

A crossed homomorphism vanishes at the identity.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_one (d : CrossedHom action) : d 1 = 0
FoxDifferential.CrossedHom.map_inv

Inverse rule for a crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_inv (d : CrossedHom action) (g : G) :
    d g⁻¹ = -(action g⁻¹ (d g))
FoxDifferential.CrossedHom.map_inv_mul

Formula for multiplying by an inverse on the left.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_inv_mul (d : CrossedHom action) (g h : G) :
    d (g⁻¹ * h) = -(action g⁻¹ (d g)) + action g⁻¹ (d h)
FoxDifferential.CrossedHom.map_mul_inv

Formula for multiplying by an inverse on the right.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_mul_inv (d : CrossedHom action) (g h : G) :
    d (g * h⁻¹) = d g - action (g * h⁻¹) (d h)
FoxDifferential.CrossedHom.map_div

Division rule for a crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_div (d : CrossedHom action) (g h : G) :
    d (g / h) = d g - action (g / h) (d h)
FoxDifferential.CrossedHom.map_conj

Conjugation rule for a crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_conj (d : CrossedHom action) (g h : G) :
    d (g * h * g⁻¹) =
      d g + action g (d h) - action (g * h * g⁻¹) (d g)
FoxDifferential.CrossedHom.map_commutator

Commutator rule for a crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_commutator (d : CrossedHom action) (g h : G) :
    d ⁅g, h⁆ =
      d g + action g (d h) - action (g * h * g⁻¹) (d g) -
        action ⁅g, h⁆ (d h)
FoxDifferential.CrossedHom.map_pow

Positive-power rule for a crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem map_pow (d : CrossedHom action) (g : G) (n : ℕ) :
    d (g ^ n) = (Finset.range n).sum (fun k => action (g ^ k) (d g)) := by
  induction n with
  | zero => simp only [pow_zero, map_one, Finset.range_zero, Finset.sum_empty]
  | succ n ih =>
      rw [pow_succ, d.map_mul, ih, Finset.sum_range_succ]
FoxDifferential.CrossedHom.toSemidirectMonoidHom

The graph of a crossed homomorphism is an ordinary homomorphism into the standard semidirect product.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
def toSemidirectMonoidHom (d : CrossedHom action) :
    G →* CrossedSemidirectProduct action where
  toFun g := ⟨Multiplicative.ofAdd (d g), g⟩
  map_one' := by
    apply SemidirectProduct.ext
    · change d 1 = 0
      exact d.map_one
    · rfl
  map_mul' g h := by
    apply SemidirectProduct.ext
    · change d (g * h) = d g + action g (d h)
      exact d.map_mul g h
    · rfl
FoxDifferential.CrossedHom.toSemidirectMonoidHom_left

The left component of the semidirect-product graph is the value of the crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem toSemidirectMonoidHom_left (d : CrossedHom action) (g : G) :
    Multiplicative.toAdd (d.toSemidirectMonoidHom g).left = d g
FoxDifferential.CrossedHom.toSemidirectMonoidHom_right

The right component of the semidirect-product graph is the original group element.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem toSemidirectMonoidHom_right (d : CrossedHom action) (g : G) :
    (d.toSemidirectMonoidHom g).right = g
FoxDifferential.CrossedHom.ofSemidirectMonoidHom

Recover a crossed homomorphism from a semidirect-product homomorphism whose right component is the identity.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
def ofSemidirectMonoidHom
    (f : G →* CrossedSemidirectProduct action)
    (hright : ∀ g, (f g).right = g) : CrossedHom action where
  toFun g := Multiplicative.toAdd (f g).left
  map_mul' := by
    intro g h
    have hleft := congrArg SemidirectProduct.left (f.map_mul g h)
    rw [SemidirectProduct.mul_left] at hleft
    have hleftAdd := congrArg Multiplicative.toAdd hleft
    simpa only [toAdd_mul, crossedSemidirectMulAction_toAdd, hright] using hleftAdd
FoxDifferential.CrossedHom.ofSemidirectMonoidHom_apply

Recovering a crossed homomorphism takes the additive form of the graph's left component.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem ofSemidirectMonoidHom_apply
    (f : G →* CrossedSemidirectProduct action)
    (hright : ∀ g, (f g).right = g) (g : G) :
    ofSemidirectMonoidHom f hright g = Multiplicative.toAdd (f g).left
FoxDifferential.CrossedHom.ofSemidirectMonoidHom_toSemidirectMonoidHom

Recovering a crossed homomorphism from its semidirect-product graph returns the original map.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem ofSemidirectMonoidHom_toSemidirectMonoidHom (d : CrossedHom action) :
    ofSemidirectMonoidHom d.toSemidirectMonoidHom
      (fun g => toSemidirectMonoidHom_right d g) = d := by
  apply CrossedHom.ext
  intro g
  rfl
FoxDifferential.CrossedHom.toSemidirectMonoidHom_ofSemidirectMonoidHom

The graph construction loses no information: a semidirect-product homomorphism over the identity is exactly the graph of the crossed homomorphism obtained from its left component.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem toSemidirectMonoidHom_ofSemidirectMonoidHom
    (f : G →* CrossedSemidirectProduct action)
    (hright : ∀ g, (f g).right = g) :
    (ofSemidirectMonoidHom f hright).toSemidirectMonoidHom = f
FoxDifferential.CrossedHom.compMonoidHom

Pull back a crossed homomorphism along a group homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
def compMonoidHom {K : Type*} [Group K]
    (d : CrossedHom action) (φ : K →* G) : CrossedHom (action.comp φ) where
  toFun k := d (φ k)
  map_mul' := by
    intro g h
    change d (φ (g * h)) = d (φ g) + action (φ g) (d (φ h))
    rw [φ.map_mul]
    exact d.map_mul (φ g) (φ h)
FoxDifferential.CrossedHom.compMonoidHom_apply

Pullback along a group homomorphism evaluates by precomposition.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem compMonoidHom_apply {K : Type*} [Group K]
    (d : CrossedHom action) (φ : K →* G) (k : K) :
    d.compMonoidHom φ k = d (φ k)
FoxDifferential.CrossedHom.mapAddEquivariant

Push a crossed homomorphism through an equivariant additive homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
def mapAddEquivariant (d : CrossedHom action) {B : Type*} [AddCommGroup B]
    (actionB : G →* Multiplicative (AddAut B)) (f : A →+ B)
    (hf : ∀ g a, f (action g a) = actionB g (f a))
    : CrossedHom actionB where
  toFun g := f (d g)
  map_mul' := by
    intro g h
    rw [d.map_mul g h, map_add, hf]
FoxDifferential.CrossedHom.mapAddEquivariant_apply

Equivariant pushforward evaluates by applying the additive homomorphism to each value.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem mapAddEquivariant_apply {B : Type*} [AddCommGroup B]
    (actionB : G →* Multiplicative (AddAut B)) (f : A →+ B)
    (hf : ∀ g a, f (action g a) = actionB g (f a))
    (d : CrossedHom action) (g : G) :
    d.mapAddEquivariant actionB f hf g = f (d g)
FoxDifferential.CrossedHom.eqOn_closure

Crossed homomorphisms agreeing on a set agree on the subgroup it generates.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem eqOn_closure (d e : CrossedHom action) {s : Set G}
    (hs : Set.EqOn d e s) :
    Set.EqOn d e ((Subgroup.closure s : Subgroup G) : Set G)
FoxDifferential.CrossedHom.eq_of_closure_eq_top

Crossed homomorphisms are determined by their values on a generating set.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem eq_of_closure_eq_top (d e : CrossedHom action) {s : Set G}
    (hsgen : Subgroup.closure s = ⊤) (hs : Set.EqOn d e s) : d = e
FoxDifferential.CrossedHom.instZero

The zero crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
instance instZero : Zero (CrossedHom action) where
  zero := ⟨fun _ => 0, by intro g h; simp only [map_zero, add_zero]⟩
FoxDifferential.CrossedHom.instAdd

Pointwise addition of crossed homomorphisms.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
instance instAdd : Add (CrossedHom action) where
  add d e := ⟨fun g => d g + e g, by
    intro g h
    rw [d.map_mul g h, e.map_mul g h, map_add]
    ac_rfl⟩
FoxDifferential.CrossedHom.zero_apply

The zero crossed homomorphism vanishes at every group element.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem zero_apply (g : G) : (0 : CrossedHom action) g = 0
FoxDifferential.CrossedHom.add_apply

Addition of crossed homomorphisms is computed pointwise.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem add_apply (d e : CrossedHom action) (g : G) : (d + e) g = d g + e g
FoxDifferential.CrossedHom.instSMulNat

Natural-number scalar multiplication of crossed homomorphisms is repeated pointwise addition.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
instance instSMulNat : SMul ℕ (CrossedHom action)
FoxDifferential.CrossedHom.nsmul_apply

Natural-number scalar multiplication of crossed homomorphisms is computed pointwise.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
theorem nsmul_apply (n : ℕ) (d : CrossedHom action) (g : G) :
    (n • d) g = n • d g
FoxDifferential.CrossedHom.instAddCommMonoid

A temporary additive-monoid structure used while constructing the stronger additive group.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
instance instAddCommMonoid : AddCommMonoid (CrossedHom action)
FoxDifferential.CrossedHom.instNeg

Negation of crossed homomorphisms is computed pointwise.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
instance instNeg : Neg (CrossedHom action) where
  neg d := ⟨fun g => -d g, by
    intro g h
    rw [d.map_mul g h, map_neg]
    simp only [neg_add_rev, add_comm]⟩
FoxDifferential.CrossedHom.instSub

Subtraction of crossed homomorphisms is computed pointwise.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
instance instSub : Sub (CrossedHom action) where
  sub d e := ⟨fun g => d g - e g, by
    intro g h
    rw [d.map_mul g h, e.map_mul g h, map_sub]
    simp only [sub_eq_add_neg, neg_add_rev]
    ac_rfl⟩
FoxDifferential.CrossedHom.neg_apply

Evaluating a negated crossed homomorphism negates its value.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
theorem neg_apply (d : CrossedHom action) (g : G) : (-d) g = -d g
FoxDifferential.CrossedHom.sub_apply

Evaluating a difference of crossed homomorphisms subtracts their values.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
theorem sub_apply (d e : CrossedHom action) (g : G) : (d - e) g = d g - e g
FoxDifferential.CrossedHom.instSMulInt

Integer scalar multiplication of crossed homomorphisms is repeated pointwise addition or subtraction.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
instance instSMulInt : SMul ℤ (CrossedHom action)
FoxDifferential.CrossedHom.zsmul_apply

Integer scalar multiplication of crossed homomorphisms is computed pointwise.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
theorem zsmul_apply (z : ℤ) (d : CrossedHom action) (g : G) :
    (z • d) g = z • d g
FoxDifferential.CrossedHom.instAddCommGroup

Pointwise operations make crossed homomorphisms an additive commutative group.

Source context 6 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace CrossedHom
variable {G A : Type*} [Group G] [AddCommGroup A]
variable {action : G →* Multiplicative (AddAut A)}
/-- A temporary additive-monoid structure used while constructing the stronger additive group. -/
local instance instAddCommMonoid : AddCommMonoid (CrossedHom action) :=
  Function.Injective.addCommMonoid
    (fun d : CrossedHom action => d.toFun)
    (by intro d e h; exact CrossedHom.ext (congrFun h))
    rfl (fun _ _ => rfl) (fun d n => by funext g; exact nsmul_apply n d g)
instance instAddCommGroup : AddCommGroup (CrossedHom action)
FoxDifferential.ScalarCrossedHom.map_mul

Scalar crossed homomorphisms satisfy the scalar Fox--Leibniz product rule.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_mul (d : ScalarCrossedHom coeff A) (g h : G) :
    d (g * h) = d g + coeff g • d h
FoxDifferential.ScalarCrossedHom.map_one

A scalar crossed homomorphism vanishes at the identity.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_one (d : ScalarCrossedHom coeff A) : d 1 = 0
FoxDifferential.ScalarCrossedHom.map_inv

The value of a scalar crossed homomorphism at an inverse is the transported negative value.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_inv (d : ScalarCrossedHom coeff A) (g : G) :
    d g⁻¹ = -(coeff g⁻¹ • d g)
FoxDifferential.ScalarCrossedHom.map_inv_mul

Formula for a scalar crossed homomorphism on a product with an inverse on the left.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_inv_mul (d : ScalarCrossedHom coeff A) (g h : G) :
    d (g⁻¹ * h) = -(coeff g⁻¹ • d g) + coeff g⁻¹ • d h
FoxDifferential.ScalarCrossedHom.map_mul_inv

Formula for a scalar crossed homomorphism on a product with an inverse on the right.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_mul_inv (d : ScalarCrossedHom coeff A) (g h : G) :
    d (g * h⁻¹) = d g - coeff (g * h⁻¹) • d h
FoxDifferential.ScalarCrossedHom.map_div

The scalar Fox rule written for group division.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_div (d : ScalarCrossedHom coeff A) (g h : G) :
    d (g / h) = d g - coeff (g / h) • d h
FoxDifferential.ScalarCrossedHom.map_conj

The scalar crossed-homomorphism formula for a conjugate.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_conj (d : ScalarCrossedHom coeff A) (g h : G) :
    d (g * h * g⁻¹) = d g + coeff g • d h - coeff (g * h * g⁻¹) • d g
FoxDifferential.ScalarCrossedHom.map_commutator

The scalar crossed-homomorphism formula for a commutator.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_commutator (d : ScalarCrossedHom coeff A) (g h : G) :
    d ⁅g, h⁆ = d g + coeff g • d h - coeff (g * h * g⁻¹) • d g -
      coeff ⁅g, h⁆ • d h
FoxDifferential.ScalarCrossedHom.map_pow

The value on a positive power is the sum of the translates of the value on its base.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem map_pow (d : ScalarCrossedHom coeff A) (g : G) (n : ℕ) :
    d (g ^ n) = (Finset.range n).sum (fun k => coeff (g ^ k) • d g) := by
  simpa only [scalarCrossedAction_apply] using CrossedHom.map_pow d g n
FoxDifferential.ScalarCrossedHom.restrictTrivialSubgroupAddMonoidHom

Restrict a scalar crossed homomorphism to a subgroup on which its coefficient is trivial.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
def restrictTrivialSubgroupAddMonoidHom
    (d : ScalarCrossedHom coeff A) (N : Subgroup G)
    (hN : ∀ n : N, coeff n = 1) :
    Additive N →+ A where
  toFun n := d ((Additive.toMul n : N) : G)
  map_zero' := by
    change d (1 : G) = 0
    exact map_one d
  map_add' g h := by
    change d (((Additive.toMul g : N) * (Additive.toMul h : N) : N) : G) =
      d ((Additive.toMul g : N) : G) + d ((Additive.toMul h : N) : G)
    have hmul :=
      d.map_mul ((Additive.toMul g : N) : G) ((Additive.toMul h : N) : G)
    simpa only [Subgroup.coe_mul, hN (Additive.toMul g), one_smul] using hmul
FoxDifferential.ScalarCrossedHom.restrictTrivialSubgroupAddMonoidHom_apply

Restriction to a coefficient-trivial subgroup evaluates as the original crossed homomorphism.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem restrictTrivialSubgroupAddMonoidHom_apply
    (d : ScalarCrossedHom coeff A) (N : Subgroup G)
    (hN : ∀ n : N, coeff n = 1) (g : N) :
    restrictTrivialSubgroupAddMonoidHom d N hN (Additive.ofMul g) = d g
FoxDifferential.ScalarCrossedHom.mapLinear

A linear map is equivariant for scalar crossed actions and hence maps scalar crossed homomorphisms to scalar crossed homomorphisms.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
def mapLinear (d : ScalarCrossedHom coeff A) {B : Type*} [AddCommGroup B] [Module R B]
    (f : A →ₗ[R] B) : ScalarCrossedHom coeff B
FoxDifferential.ScalarCrossedHom.mapLinear_apply

Linear pushforward evaluates by applying the linear map to each crossed-homomorphism value.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem mapLinear_apply {B : Type*} [AddCommGroup B] [Module R B]
    (d : ScalarCrossedHom coeff A) (f : A →ₗ[R] B) (g : G) :
    d.mapLinear f g = f (d g)
FoxDifferential.ScalarCrossedHom.compMonoidHom

Pull back a scalar crossed homomorphism while retaining its scalar specialization.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
def compMonoidHom {K : Type*} [Group K]
    (d : ScalarCrossedHom coeff A) (φ : K →* G) : ScalarCrossedHom (coeff.comp φ) A where
  toFun k := d (φ k)
  map_mul' := by
    intro g h
    change d (φ (g * h)) = d (φ g) + coeff (φ g) • d (φ h)
    rw [φ.map_mul]
    exact d.map_mul (φ g) (φ h)
FoxDifferential.ScalarCrossedHom.compMonoidHom_apply

Pullback of a scalar crossed homomorphism evaluates by precomposition.

Source context 5 commands

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

namespace FoxDifferential
open scoped BigOperators commutatorElement
namespace ScalarCrossedHom
variable {R G A : Type*} [Semiring R] [Group G] [AddCommGroup A] [Module R A]
variable {coeff : G →* R}
theorem compMonoidHom_apply {K : Type*} [Group K]
    (d : ScalarCrossedHom coeff A) (φ : K →* G) (k : K) :
    d.compMonoidHom φ k = d (φ k)