Definitions/Def_HopfAlgebra_CartierDual.lean
Cartier dual of a finite free bialgebra or Hopf algebra
For a commutative ring R and a commutative R-bialgebra A, CartierDual R A is the type of R-linear functionals A \to R, i.e. Module.Dual R A under a separate name, with linear equivalences toDual/ofDual to Module.Dual R A. All structure maps are obtained by transposition through the evaluation pairing and the canonical map TensorProduct.dualDistrib. Concretely, dualMul sends f \otimes g to the functional a \mapsto \langle f \otimes g, \Delta a\rangle, i.e. the convolution product; it is identified with Mathlib's convolution on WithConv (Module.Dual R A). The unit dualUnit sends r to r\varepsilon, and dualCounit sends \varphi to \varphi(1) (transpose of the structure map R \to A along the identification dualOneEquiv : Module.Dual R R ≃ₗ[R] R). When A is in addition finite and free over R, dualDistrib is an isomorphism and dualComul is defined as the transpose of multiplication A \otimes_R A \to A followed by its inverse, so that \langle \Delta^{\vee}\varphi, a \otimes b\rangle = \varphi(ab).
The module verifies the resulting laws: associativity and unitality of convolution, coassociativity and the counit laws for dualComul, multiplicativity of dualComul and dualCounit, compatibility of the transposed antipode, and cocommutativity of dualComul (a consequence of commutativity of A). Two Prop-valued structures, DualBialgebraAxioms and DualHopfAxioms, package these identities as fields, and are discharged in the finite free case. From them come a Ring and Algebra R structure on CartierDual R A for any commutative bialgebra A, a CommRing structure when A is cocommutative, and, for A finite and free, Coalgebra, Bialgebra, IsCocomm, Module.Finite, Module.Free with finrank_eq asserting equality of ranks, and HopfAlgebra when A is a Hopf algebra, with antipode the transpose of the antipode of A. Read-off lemmas give the values of the product, one, algebraMap, comultiplication (through the pairing), counit and antipode, together with tmul_eq_of_pairing_eq, a uniqueness criterion for elements of CartierDual R A ⊗[R] CartierDual R A detected by the pairing. Finally, monoid algebras R[\Gamma] are recorded as free, and finite when \Gamma is finite.
Relation to Mathlib
Mathlib supplies Bialgebra, HopfAlgebra, Coalgebra.IsCocomm, the convolution monoid WithConv on a dual module and TensorProduct.dualDistrib/dualDistribEquiv; the Cartier dual as a bialgebra or Hopf algebra in its own right, together with the transposed comultiplication, counit, unit and antipode, is the project's own construction built on those.
Where it is used
Cartier duality is the form in which finite flat commutative group schemes over a base are manipulated in the study of Galois representations attached to elliptic curves and modular forms, for instance in comparing \mu_n with \mathbb{Z}/n and in the local analysis of finite flat models.
References
- J. Tate, Finite flat group schemes, in: Modular Forms and Fermat's Last Theorem, Springer, 1997, 121–154
- W. C. Waterhouse, Introduction to Affine Group Schemes, Graduate Texts in Mathematics 66, Springer, 1979
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 1,107 lines
- 138 declarations
- used in the statements of 185 theorems and imported by 220 proofs
- imports 0 definition modules
Source file: Definitions/Def_HopfAlgebra_CartierDual.lean
Imports
- only Mathlib
Declarations
- def
CartierDual - theorem
CartierDual.dualDistrib_tmul_eq_mul'_comp_map - theorem
CartierDual.convMul_ofConv - theorem
CartierDual.convMul_ofConv_apply - def
CartierDual.dualMul - theorem
CartierDual.dualMul_tmul - theorem
CartierDual.dualMul_pairing - theorem
CartierDual.dualMul_tmul_eq_convMul - theorem
CartierDual.convOne_ofConv_eq_counit - theorem
CartierDual.dualDistribEquiv_apply_eq - def
CartierDual.dualComul - theorem
CartierDual.dualDistrib_dualComul - theorem
CartierDual.dualComul_pairing - theorem
CartierDual.dualComul_eq_of_dualDistrib_eq - theorem
CartierDual.dualDistribEquiv_comp_dualComul - def
CartierDual.dualOneEquiv - theorem
CartierDual.dualOneEquiv_apply - theorem
CartierDual.dualOneEquiv_symm_apply - def
CartierDual.dualCounit - theorem
CartierDual.dualCounit_apply - def
CartierDual.dualUnit - theorem
CartierDual.dualUnit_apply - theorem
CartierDual.dualUnit_eq_smul_counit - theorem
CartierDual.dualUnit_one - theorem
CartierDual.convOne_ofConv_eq_dualUnit_one - theorem
CartierDual.dualCounit_counit - theorem
CartierDual.dualCounit_dualMul - theorem
CartierDual.dualComul_counit - structure
CartierDual.DualBialgebraAxioms - field
CartierDual.DualBialgebraAxioms.coassoc_apply - field
CartierDual.DualBialgebraAxioms.rTensor_counit_comul - field
CartierDual.DualBialgebraAxioms.lTensor_counit_comul - field
CartierDual.DualBialgebraAxioms.dualComul_dualMul - structure
CartierDual.DualHopfAxioms - field
CartierDual.DualHopfAxioms.mul_antipode_rTensor_comul - field
CartierDual.DualHopfAxioms.mul_antipode_lTensor_comul - def
CartierDual.coalgebraOfDualBialgebraAxioms - theorem
CartierDual.dualMul_apply_eq_pairing - theorem
CartierDual.dualDistribEquiv_apply_eq₂ - def
CartierDual.dualDistribEquiv₃ - theorem
CartierDual.dualDistribEquiv₃_tmul_pairing - theorem
CartierDual.eq_of_dualDistribEquiv₃_pairing - theorem
CartierDual.dualDistribEquiv₃_lTensor_dualComul - theorem
CartierDual.dualDistribEquiv₃_assoc_tmul - theorem
CartierDual.dualDistribEquiv₃_assoc_rTensor_dualComul - theorem
CartierDual.coassoc_dualComul - theorem
CartierDual.lid_rTensor_dualCounit_apply - theorem
CartierDual.rid_lTensor_dualCounit_apply - theorem
CartierDual.rTensor_dualCounit_dualComul - theorem
CartierDual.lTensor_dualCounit_dualComul - theorem
CartierDual.dualDistrib_map_dualMul_dualMul - theorem
CartierDual.dualDistrib_map_dualDistrib_ttcomm - theorem
CartierDual.dualDistrib_map_dualDistrib_ttcomm_apply - theorem
CartierDual.dualDistrib_dualMap_mul'_tmul - theorem
CartierDual.map_mul'_mul'_ttcomm - theorem
CartierDual.dualComul_dualMul_tmul - theorem
CartierDual.dualBialgebraAxioms_of_finite_free - def
CartierDual.dualCoalgebraOfFiniteFree - theorem
CartierDual.dualDistrib_rTensor_dualMap - theorem
CartierDual.dualDistrib_lTensor_dualMap - theorem
CartierDual.dualMul_antipode_rTensor_dualComul - theorem
CartierDual.dualMul_antipode_lTensor_dualComul - theorem
CartierDual.dualHopfAxioms_of_finite_free - theorem
CartierDual.dualMul_assoc - theorem
CartierDual.dualMul_counit_tmul - theorem
CartierDual.dualMul_tmul_counit - theorem
CartierDual.dualMul_dualUnit_tmul - theorem
CartierDual.dualMul_tmul_dualUnit - theorem
CartierDual.dualUnit_mul - def
CartierDual.dualConvRing - theorem
CartierDual.dualConvRing_one - theorem
CartierDual.dualConvRing_mul - theorem
CartierDual.dualConvRing_mul_eq_convMul - def
CartierDual.dualConvCommRing - def
CartierDual.dualConvAlgebra - theorem
CartierDual.dualConvAlgebra_algebraMap - theorem
CartierDual.dualConvAlgebra_algebraMap_eq_smul_counit - theorem
CartierDual.dualComul_counit_eq_tensorOne - theorem
CartierDual.dualComul_dualMul_eq_mul - def
CartierDual.dualBialgebraOfFiniteFree - theorem
CartierDual.dualBialgebraOfFiniteFree_toAlgebra - theorem
CartierDual.dualBialgebraOfFiniteFree_toCoalgebra - theorem
CartierDual.dualConv_mul'_antipode_rTensor_dualComul - theorem
CartierDual.dualConv_mul'_antipode_lTensor_dualComul - def
CartierDual.dualHopfAlgebraOfFiniteFree - theorem
CartierDual.dualHopfAlgebraOfFiniteFree_antipode - theorem
CartierDual.dualDistrib_comm_apply - theorem
CartierDual.dualDistrib_comm_dualComul_pairing - theorem
CartierDual.comm_dualComul - theorem
CartierDual.comm_comp_dualComul - theorem
CartierDual.dualCoalgebraOfFiniteFree_isCocomm - def
CartierDual.dualCommBialgebraOfFiniteFree - theorem
CartierDual.dualCommBialgebraOfFiniteFree_toAlgebra - theorem
CartierDual.dualCommBialgebraOfFiniteFree_toCoalgebra - theorem
CartierDual.dualCommBialgebraOfFiniteFree_eq_dualBialgebraOfFiniteFree - theorem
CartierDual.dualCommBialgebraOfFiniteFree_isCocomm - def
CartierDual.dualCommHopfAlgebraOfFiniteFree - theorem
CartierDual.dualCommHopfAlgebraOfFiniteFree_toBialgebra - theorem
CartierDual.dualCommHopfAlgebraOfFiniteFree_eq_dualHopfAlgebraOfFiniteFree - theorem
CartierDual.dualCommHopfAlgebraOfFiniteFree_antipode - instance
CartierDual.instAddCommGroup - instance
CartierDual.instModule - instance
CartierDual.instRing - instance
CartierDual.instCommRing - instance
CartierDual.instAlgebra - instance
CartierDual.instFunLike - instance
CartierDual.instLinearMapClass - def
CartierDual.toDual - def
CartierDual.ofDual - theorem
CartierDual.toDual_apply - theorem
CartierDual.ofDual_apply - theorem
CartierDual.toDual_ofDual - theorem
CartierDual.ofDual_toDual - theorem
CartierDual.ext - theorem
CartierDual.mul_def - theorem
CartierDual.mul_apply - theorem
CartierDual.mul_eq_convMul - theorem
CartierDual.toDual_mul - theorem
CartierDual.one_def - theorem
CartierDual.one_apply - theorem
CartierDual.algebraMap_def - theorem
CartierDual.algebraMap_apply - instance
CartierDual.instModuleFinite - instance
CartierDual.instModuleFree - theorem
CartierDual.finrank_eq - instance
CartierDual.instCoalgebra - instance
CartierDual.instBialgebra - instance
CartierDual.instIsCocomm - theorem
CartierDual.comul_def - theorem
CartierDual.comul_pairing - theorem
CartierDual.comul_eq_dualComul - theorem
CartierDual.counit_eq_dualCounit - theorem
CartierDual.tmul_eq_of_pairing_eq - theorem
CartierDual.counit_apply - instance
CartierDual.instHopfAlgebra - theorem
CartierDual.antipode_apply - instance
MonoidAlgebra.instModuleFreeOfCartier - instance
MonoidAlgebra.instModuleFiniteOfCartier
Source
import Mathlib set_option autoImplicit false set_option maxHeartbeats 1600000 set_option synthInstance.maxHeartbeats 400000 open Coalgebra open scoped TensorProduct universe u v def CartierDual (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] : Type (max u v) := Module.Dual R A namespace CartierDual noncomputable section section TransposeOfComul variable (R : Type u) (A : Type v) [CommRing R] [AddCommMonoid A] [Module R A] [Coalgebra R A] omit [Coalgebra R A] in theorem dualDistrib_tmul_eq_mul'_comp_map (f g : Module.Dual R A) : TensorProduct.dualDistrib R A A (f ⊗ₜ[R] g) = LinearMap.mul' R R ∘ₗ TensorProduct.map f g := by apply TensorProduct.ext' intro a b rw [TensorProduct.dualDistrib_apply, LinearMap.comp_apply, TensorProduct.map_tmul, LinearMap.mul'_apply] theorem convMul_ofConv (f g : Module.Dual R A) : (WithConv.toConv f * WithConv.toConv g).ofConv = LinearMap.mul' R R ∘ₗ TensorProduct.map f g ∘ₗ Coalgebra.comul := congrArg WithConv.ofConv (LinearMap.convMul_def (WithConv.toConv f) (WithConv.toConv g)) theorem convMul_ofConv_apply (f g : Module.Dual R A) (a : A) : (WithConv.toConv f * WithConv.toConv g).ofConv a = TensorProduct.dualDistrib R A A (f ⊗ₜ[R] g) (Coalgebra.comul a) := by rw [convMul_ofConv, dualDistrib_tmul_eq_mul'_comp_map] rfl def dualMul : Module.Dual R A ⊗[R] Module.Dual R A →ₗ[R] Module.Dual R A := (Coalgebra.comul (R := R) (A := A)).dualMap ∘ₗ TensorProduct.dualDistrib R A A theorem dualMul_tmul (f g : Module.Dual R A) : dualMul R A (f ⊗ₜ[R] g) = (Coalgebra.comul (R := R) (A := A)).dualMap (TensorProduct.dualDistrib R A A (f ⊗ₜ[R] g)) := rfl theorem dualMul_pairing (f g : Module.Dual R A) (a : A) : dualMul R A (f ⊗ₜ[R] g) a = TensorProduct.dualDistrib R A A (f ⊗ₜ[R] g) (Coalgebra.comul a) := by rw [dualMul_tmul, LinearMap.dualMap_apply] theorem dualMul_tmul_eq_convMul (f g : Module.Dual R A) : dualMul R A (f ⊗ₜ[R] g) = (WithConv.toConv f * WithConv.toConv g).ofConv := by ext a rw [convMul_ofConv_apply, dualMul_pairing] theorem convOne_ofConv_eq_counit : ((1 : WithConv (Module.Dual R A))).ofConv = Coalgebra.counit (R := R) (A := A) := by ext a show algebraMap R R (Coalgebra.counit a) = Coalgebra.counit a simp end TransposeOfComul section TransposeOfMul variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] variable [Module.Finite R A] [Module.Free R A] theorem dualDistribEquiv_apply_eq (w : Module.Dual R A ⊗[R] Module.Dual R A) : TensorProduct.dualDistribEquiv R A A w = TensorProduct.dualDistrib R A A w := rfl def dualComul : Module.Dual R A →ₗ[R] Module.Dual R A ⊗[R] Module.Dual R A := (TensorProduct.dualDistribEquiv R A A).symm.toLinearMap ∘ₗ (LinearMap.mul' R A).dualMap theorem dualDistrib_dualComul (φ : Module.Dual R A) : TensorProduct.dualDistrib R A A (dualComul R A φ) = (LinearMap.mul' R A).dualMap φ := by have h : dualComul R A φ = (TensorProduct.dualDistribEquiv R A A).symm ((LinearMap.mul' R A).dualMap φ) := rfl rw [h, ← dualDistribEquiv_apply_eq, LinearEquiv.apply_symm_apply] theorem dualComul_pairing (φ : Module.Dual R A) (a b : A) : TensorProduct.dualDistrib R A A (dualComul R A φ) (a ⊗ₜ[R] b) = φ (a * b) := by rw [dualDistrib_dualComul, LinearMap.dualMap_apply, LinearMap.mul'_apply] theorem dualComul_eq_of_dualDistrib_eq {φ : Module.Dual R A} {w : Module.Dual R A ⊗[R] Module.Dual R A} (h : TensorProduct.dualDistrib R A A w = (LinearMap.mul' R A).dualMap φ) : dualComul R A φ = w := by apply (TensorProduct.dualDistribEquiv R A A).injective rw [dualDistribEquiv_apply_eq, dualDistribEquiv_apply_eq, dualDistrib_dualComul, h] theorem dualDistribEquiv_comp_dualComul : (TensorProduct.dualDistribEquiv R A A).toLinearMap ∘ₗ dualComul R A = (LinearMap.mul' R A).dualMap := by refine LinearMap.ext fun φ => ?_ rw [LinearMap.comp_apply, LinearEquiv.coe_toLinearMap, dualDistribEquiv_apply_eq, dualDistrib_dualComul] end TransposeOfMul section UnitCounit variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] def dualOneEquiv : Module.Dual R R ≃ₗ[R] R := LinearMap.ringLmapEquivSelf R R R theorem dualOneEquiv_apply (ψ : Module.Dual R R) : dualOneEquiv R ψ = ψ 1 := rfl theorem dualOneEquiv_symm_apply (r x : R) : (dualOneEquiv R).symm r x = x * r := by have h1 : ((dualOneEquiv R).symm r) 1 = r := by have h := (dualOneEquiv R).apply_symm_apply r rwa [dualOneEquiv_apply] at h calc ((dualOneEquiv R).symm r) x = ((dualOneEquiv R).symm r) (x • (1 : R)) := by rw [smul_eq_mul, mul_one] _ = x • ((dualOneEquiv R).symm r) 1 := map_smul _ x 1 _ = x * r := by rw [h1, smul_eq_mul] def dualCounit : Module.Dual R A →ₗ[R] R := (dualOneEquiv R).toLinearMap ∘ₗ (Algebra.linearMap R A).dualMap theorem dualCounit_apply (φ : Module.Dual R A) : dualCounit R A φ = φ 1 := by have h : dualCounit R A φ = ((Algebra.linearMap R A).dualMap φ) 1 := rfl rw [h, LinearMap.dualMap_apply, Algebra.linearMap_apply, map_one] def dualUnit : R →ₗ[R] Module.Dual R A := (Coalgebra.counit (R := R) (A := A)).dualMap ∘ₗ (dualOneEquiv R).symm.toLinearMap theorem dualUnit_apply (r : R) (a : A) : dualUnit R A r a = Coalgebra.counit (R := R) a * r := by have h : dualUnit R A r a = ((dualOneEquiv R).symm r) (Coalgebra.counit (R := R) a) := rfl rw [h, dualOneEquiv_symm_apply] theorem dualUnit_eq_smul_counit (r : R) : dualUnit R A r = r • Coalgebra.counit (R := R) (A := A) := by ext a rw [dualUnit_apply, LinearMap.smul_apply, smul_eq_mul, mul_comm] theorem dualUnit_one : dualUnit R A 1 = Coalgebra.counit (R := R) (A := A) := by rw [dualUnit_eq_smul_counit, one_smul] theorem convOne_ofConv_eq_dualUnit_one : ((1 : WithConv (Module.Dual R A))).ofConv = dualUnit R A 1 := by rw [dualUnit_one, convOne_ofConv_eq_counit] end UnitCounit section DerivableAxioms variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] theorem dualCounit_counit : dualCounit R A (Coalgebra.counit (R := R) (A := A)) = 1 := by rw [dualCounit_apply] exact Bialgebra.counit_one theorem dualCounit_dualMul (f g : Module.Dual R A) : dualCounit R A (dualMul R A (f ⊗ₜ[R] g)) = dualCounit R A f * dualCounit R A g := by rw [dualCounit_apply, dualCounit_apply, dualCounit_apply, dualMul_pairing, Bialgebra.comul_one, Algebra.TensorProduct.one_def, TensorProduct.dualDistrib_apply] variable [Module.Finite R A] [Module.Free R A] theorem dualComul_counit : dualComul R A (Coalgebra.counit (R := R) (A := A)) = (Coalgebra.counit (R := R) (A := A)) ⊗ₜ[R] (Coalgebra.counit (R := R) (A := A)) := by apply dualComul_eq_of_dualDistrib_eq apply TensorProduct.ext' intro a b rw [TensorProduct.dualDistrib_apply, LinearMap.dualMap_apply, LinearMap.mul'_apply, Bialgebra.counit_mul] end DerivableAxioms section HeldLayer variable (R : Type u) (A : Type v) structure DualBialgebraAxioms [CommRing R] [CommRing A] [Bialgebra R A] [Module.Finite R A] [Module.Free R A] : Prop where coassoc_apply : ∀ φ : Module.Dual R A, TensorProduct.assoc R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) ((dualComul R A).rTensor (Module.Dual R A) (dualComul R A φ)) = (dualComul R A).lTensor (Module.Dual R A) (dualComul R A φ) rTensor_counit_comul : ∀ φ : Module.Dual R A, (dualCounit R A).rTensor (Module.Dual R A) (dualComul R A φ) = (1 : R) ⊗ₜ[R] φ lTensor_counit_comul : ∀ φ : Module.Dual R A, (dualCounit R A).lTensor (Module.Dual R A) (dualComul R A φ) = φ ⊗ₜ[R] (1 : R) dualComul_dualMul : ∀ f g : Module.Dual R A, dualComul R A (dualMul R A (f ⊗ₜ[R] g)) = TensorProduct.map (dualMul R A) (dualMul R A) (TensorProduct.tensorTensorTensorComm R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) ((dualComul R A f) ⊗ₜ[R] (dualComul R A g))) structure DualHopfAxioms [CommRing R] [CommRing A] [HopfAlgebra R A] [Module.Finite R A] [Module.Free R A] : Prop extends DualBialgebraAxioms R A where mul_antipode_rTensor_comul : ∀ φ : Module.Dual R A, dualMul R A (((HopfAlgebra.antipode R (A := A)).dualMap).rTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) mul_antipode_lTensor_comul : ∀ φ : Module.Dual R A, dualMul R A (((HopfAlgebra.antipode R (A := A)).dualMap).lTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) @[implicit_reducible] def coalgebraOfDualBialgebraAxioms [CommRing R] [CommRing A] [Bialgebra R A] [Module.Finite R A] [Module.Free R A] (h : DualBialgebraAxioms R A) : Coalgebra R (Module.Dual R A) where comul := dualComul R A counit := dualCounit R A coassoc := by apply LinearMap.ext intro φ simpa using h.coassoc_apply φ rTensor_counit_comp_comul := by apply LinearMap.ext intro φ simpa using h.rTensor_counit_comul φ lTensor_counit_comp_comul := by apply LinearMap.ext intro φ simpa using h.lTensor_counit_comul φ end HeldLayer end noncomputable section variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] section PairingToolkit variable [Bialgebra R A] [Module.Finite R A] [Module.Free R A] omit [Module.Finite R A] [Module.Free R A] in theorem dualMul_apply_eq_pairing (w : Module.Dual R A ⊗[R] Module.Dual R A) (a : A) : dualMul R A w a = TensorProduct.dualDistrib R A A w (Coalgebra.comul a) := by show ((Coalgebra.comul (R := R) (A := A)).dualMap (TensorProduct.dualDistrib R A A w)) a = _ rw [LinearMap.dualMap_apply] theorem dualDistribEquiv_apply_eq₂ (w : Module.Dual R A ⊗[R] Module.Dual R (A ⊗[R] A)) : TensorProduct.dualDistribEquiv R A (A ⊗[R] A) w = TensorProduct.dualDistrib R A (A ⊗[R] A) w := rfl def dualDistribEquiv₃ : Module.Dual R A ⊗[R] (Module.Dual R A ⊗[R] Module.Dual R A) ≃ₗ[R] Module.Dual R (A ⊗[R] (A ⊗[R] A)) := (TensorProduct.congr (LinearEquiv.refl R (Module.Dual R A)) (TensorProduct.dualDistribEquiv R A A)).trans (TensorProduct.dualDistribEquiv R A (A ⊗[R] A)) theorem dualDistribEquiv₃_tmul_pairing (f : Module.Dual R A) (v : Module.Dual R A ⊗[R] Module.Dual R A) (a : A) (z : A ⊗[R] A) : dualDistribEquiv₃ R A (f ⊗ₜ[R] v) (a ⊗ₜ[R] z) = f a * TensorProduct.dualDistrib R A A v z := by unfold dualDistribEquiv₃ rw [LinearEquiv.trans_apply, TensorProduct.congr_tmul, LinearEquiv.refl_apply, dualDistribEquiv_apply_eq, dualDistribEquiv_apply_eq₂, TensorProduct.dualDistrib_apply] theorem eq_of_dualDistribEquiv₃_pairing {x y : Module.Dual R A ⊗[R] (Module.Dual R A ⊗[R] Module.Dual R A)} (h : ∀ a b c : A, dualDistribEquiv₃ R A x (a ⊗ₜ[R] (b ⊗ₜ[R] c)) = dualDistribEquiv₃ R A y (a ⊗ₜ[R] (b ⊗ₜ[R] c))) : x = y := by apply (dualDistribEquiv₃ R A).injective apply TensorProduct.ext_threefold' exact h end PairingToolkit section Coassoc variable [Bialgebra R A] [Module.Finite R A] [Module.Free R A] theorem dualDistribEquiv₃_lTensor_dualComul (w : Module.Dual R A ⊗[R] Module.Dual R A) (a b c : A) : dualDistribEquiv₃ R A ((dualComul R A).lTensor (Module.Dual R A) w) (a ⊗ₜ[R] (b ⊗ₜ[R] c)) = TensorProduct.dualDistrib R A A w (a ⊗ₜ[R] (b * c)) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => rw [LinearMap.lTensor_tmul, dualDistribEquiv₃_tmul_pairing, dualComul_pairing, TensorProduct.dualDistrib_apply] | add w₁ w₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] theorem dualDistribEquiv₃_assoc_tmul (u : Module.Dual R A ⊗[R] Module.Dual R A) (h : Module.Dual R A) (a b c : A) : dualDistribEquiv₃ R A (TensorProduct.assoc R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) (u ⊗ₜ[R] h)) (a ⊗ₜ[R] (b ⊗ₜ[R] c)) = TensorProduct.dualDistrib R A A u (a ⊗ₜ[R] b) * h c := by induction u using TensorProduct.induction_on with | zero => simp | tmul p q => rw [TensorProduct.assoc_tmul, dualDistribEquiv₃_tmul_pairing, TensorProduct.dualDistrib_apply, TensorProduct.dualDistrib_apply, mul_assoc] | add u₁ u₂ ih₁ ih₂ => simp only [TensorProduct.add_tmul, map_add, LinearMap.add_apply, add_mul, ih₁, ih₂] theorem dualDistribEquiv₃_assoc_rTensor_dualComul (w : Module.Dual R A ⊗[R] Module.Dual R A) (a b c : A) : dualDistribEquiv₃ R A (TensorProduct.assoc R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) ((dualComul R A).rTensor (Module.Dual R A) w)) (a ⊗ₜ[R] (b ⊗ₜ[R] c)) = TensorProduct.dualDistrib R A A w ((a * b) ⊗ₜ[R] c) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => rw [LinearMap.rTensor_tmul, dualDistribEquiv₃_assoc_tmul, dualComul_pairing, TensorProduct.dualDistrib_apply] | add w₁ w₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] theorem coassoc_dualComul (φ : Module.Dual R A) : TensorProduct.assoc R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) ((dualComul R A).rTensor (Module.Dual R A) (dualComul R A φ)) = (dualComul R A).lTensor (Module.Dual R A) (dualComul R A φ) := by apply eq_of_dualDistribEquiv₃_pairing intro a b c rw [dualDistribEquiv₃_assoc_rTensor_dualComul, dualDistribEquiv₃_lTensor_dualComul, dualComul_pairing, dualComul_pairing, mul_assoc] end Coassoc section CounitLaws variable [Bialgebra R A] [Module.Finite R A] [Module.Free R A] omit [Module.Finite R A] [Module.Free R A] in theorem lid_rTensor_dualCounit_apply (w : Module.Dual R A ⊗[R] Module.Dual R A) (a : A) : TensorProduct.lid R (Module.Dual R A) ((dualCounit R A).rTensor (Module.Dual R A) w) a = TensorProduct.dualDistrib R A A w ((1 : A) ⊗ₜ[R] a) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => simp only [LinearMap.rTensor_tmul, TensorProduct.lid_tmul, dualCounit_apply, LinearMap.smul_apply, smul_eq_mul, TensorProduct.dualDistrib_apply] | add w₁ w₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] omit [Module.Finite R A] [Module.Free R A] in theorem rid_lTensor_dualCounit_apply (w : Module.Dual R A ⊗[R] Module.Dual R A) (a : A) : TensorProduct.rid R (Module.Dual R A) ((dualCounit R A).lTensor (Module.Dual R A) w) a = TensorProduct.dualDistrib R A A w (a ⊗ₜ[R] (1 : A)) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => simp only [LinearMap.lTensor_tmul, TensorProduct.rid_tmul, dualCounit_apply, LinearMap.smul_apply, smul_eq_mul, TensorProduct.dualDistrib_apply] ring | add w₁ w₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] theorem rTensor_dualCounit_dualComul (φ : Module.Dual R A) : (dualCounit R A).rTensor (Module.Dual R A) (dualComul R A φ) = (1 : R) ⊗ₜ[R] φ := by apply (TensorProduct.lid R (Module.Dual R A)).injective ext a rw [lid_rTensor_dualCounit_apply, dualComul_pairing, one_mul, TensorProduct.lid_tmul, one_smul] theorem lTensor_dualCounit_dualComul (φ : Module.Dual R A) : (dualCounit R A).lTensor (Module.Dual R A) (dualComul R A φ) = φ ⊗ₜ[R] (1 : R) := by apply (TensorProduct.rid R (Module.Dual R A)).injective ext a rw [rid_lTensor_dualCounit_apply, dualComul_pairing, mul_one, TensorProduct.rid_tmul, one_smul] end CounitLaws section Multiplicativity variable [Bialgebra R A] [Module.Finite R A] [Module.Free R A] omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_map_dualMul_dualMul (T : (Module.Dual R A ⊗[R] Module.Dual R A) ⊗[R] (Module.Dual R A ⊗[R] Module.Dual R A)) (a b : A) : TensorProduct.dualDistrib R A A (TensorProduct.map (dualMul R A) (dualMul R A) T) (a ⊗ₜ[R] b) = TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A) (TensorProduct.map (TensorProduct.dualDistrib R A A) (TensorProduct.dualDistrib R A A) T) (Coalgebra.comul a ⊗ₜ[R] Coalgebra.comul b) := by induction T using TensorProduct.induction_on with | zero => simp | tmul s t => simp only [TensorProduct.map_tmul, TensorProduct.dualDistrib_apply, dualMul_apply_eq_pairing] | add T₁ T₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_map_dualDistrib_ttcomm : (TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A)) ∘ₗ (TensorProduct.map (TensorProduct.dualDistrib R A A) (TensorProduct.dualDistrib R A A)) ∘ₗ (TensorProduct.tensorTensorTensorComm R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) (Module.Dual R A)).toLinearMap = ((TensorProduct.tensorTensorTensorComm R A A A A).toLinearMap.dualMap) ∘ₗ (TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A)) ∘ₗ (TensorProduct.map (TensorProduct.dualDistrib R A A) (TensorProduct.dualDistrib R A A)) := by apply TensorProduct.ext_fourfold' intro p q r s apply TensorProduct.ext_fourfold' intro x₁ x₂ y₁ y₂ simp only [LinearMap.comp_apply, LinearEquiv.coe_coe, LinearMap.dualMap_apply, TensorProduct.tensorTensorTensorComm_tmul, TensorProduct.map_tmul, TensorProduct.dualDistrib_apply] ring omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_map_dualDistrib_ttcomm_apply (T : (Module.Dual R A ⊗[R] Module.Dual R A) ⊗[R] (Module.Dual R A ⊗[R] Module.Dual R A)) (W : (A ⊗[R] A) ⊗[R] (A ⊗[R] A)) : TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A) (TensorProduct.map (TensorProduct.dualDistrib R A A) (TensorProduct.dualDistrib R A A) (TensorProduct.tensorTensorTensorComm R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) T)) W = TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A) (TensorProduct.map (TensorProduct.dualDistrib R A A) (TensorProduct.dualDistrib R A A) T) (TensorProduct.tensorTensorTensorComm R A A A A W) := by have h := LinearMap.congr_fun (LinearMap.congr_fun (dualDistrib_map_dualDistrib_ttcomm R A) T) W simpa only [LinearMap.comp_apply, LinearEquiv.coe_coe, LinearEquiv.coe_toLinearMap, LinearMap.dualMap_apply] using h omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_dualMap_mul'_tmul (f g : Module.Dual R A) (W : (A ⊗[R] A) ⊗[R] (A ⊗[R] A)) : TensorProduct.dualDistrib R (A ⊗[R] A) (A ⊗[R] A) (((LinearMap.mul' R A).dualMap f) ⊗ₜ[R] ((LinearMap.mul' R A).dualMap g)) W = TensorProduct.dualDistrib R A A (f ⊗ₜ[R] g) (TensorProduct.map (LinearMap.mul' R A) (LinearMap.mul' R A) W) := by induction W using TensorProduct.induction_on with | zero => simp | tmul Z W' => simp only [TensorProduct.dualDistrib_apply, LinearMap.dualMap_apply, TensorProduct.map_tmul] | add W₁ W₂ ih₁ ih₂ => simp only [map_add, ih₁, ih₂] omit [Module.Finite R A] [Module.Free R A] in theorem map_mul'_mul'_ttcomm (X Y : A ⊗[R] A) : TensorProduct.map (LinearMap.mul' R A) (LinearMap.mul' R A) (TensorProduct.tensorTensorTensorComm R A A A A (X ⊗ₜ[R] Y)) = X * Y := by induction X using TensorProduct.induction_on with | zero => simp | tmul x₁ x₂ => induction Y using TensorProduct.induction_on with | zero => simp | tmul y₁ y₂ => rw [TensorProduct.tensorTensorTensorComm_tmul, TensorProduct.map_tmul, LinearMap.mul'_apply, LinearMap.mul'_apply, Algebra.TensorProduct.tmul_mul_tmul] | add Y₁ Y₂ ihY₁ ihY₂ => rw [TensorProduct.tmul_add, map_add, map_add, ihY₁, ihY₂, mul_add] | add X₁ X₂ ihX₁ ihX₂ => rw [TensorProduct.add_tmul, map_add, map_add, ihX₁, ihX₂, add_mul] theorem dualComul_dualMul_tmul (f g : Module.Dual R A) : dualComul R A (dualMul R A (f ⊗ₜ[R] g)) = TensorProduct.map (dualMul R A) (dualMul R A) (TensorProduct.tensorTensorTensorComm R (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) (Module.Dual R A) ((dualComul R A f) ⊗ₜ[R] (dualComul R A g))) := by apply dualComul_eq_of_dualDistrib_eq apply TensorProduct.ext' intro a b rw [dualDistrib_map_dualMul_dualMul, dualDistrib_map_dualDistrib_ttcomm_apply, TensorProduct.map_tmul, dualDistrib_dualComul, dualDistrib_dualComul, dualDistrib_dualMap_mul'_tmul, map_mul'_mul'_ttcomm, LinearMap.dualMap_apply, LinearMap.mul'_apply, dualMul_pairing, Bialgebra.comul_mul] end Multiplicativity section BialgebraBundle variable [Bialgebra R A] [Module.Finite R A] [Module.Free R A] theorem dualBialgebraAxioms_of_finite_free : DualBialgebraAxioms R A where coassoc_apply := coassoc_dualComul R A rTensor_counit_comul := rTensor_dualCounit_dualComul R A lTensor_counit_comul := lTensor_dualCounit_dualComul R A dualComul_dualMul := dualComul_dualMul_tmul R A @[implicit_reducible] def dualCoalgebraOfFiniteFree : Coalgebra R (Module.Dual R A) := coalgebraOfDualBialgebraAxioms R A (dualBialgebraAxioms_of_finite_free R A) end BialgebraBundle section HopfDischarge variable [HopfAlgebra R A] [Module.Finite R A] [Module.Free R A] omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_rTensor_dualMap (S : A →ₗ[R] A) (w : Module.Dual R A ⊗[R] Module.Dual R A) : TensorProduct.dualDistrib R A A ((S.dualMap).rTensor (Module.Dual R A) w) = (TensorProduct.dualDistrib R A A w) ∘ₗ (S.rTensor A) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => apply TensorProduct.ext' intro x y simp only [LinearMap.rTensor_tmul, TensorProduct.dualDistrib_apply, LinearMap.comp_apply, LinearMap.dualMap_apply] | add w₁ w₂ ih₁ ih₂ => simp only [map_add, ih₁, ih₂, LinearMap.add_comp] omit [Module.Finite R A] [Module.Free R A] in theorem dualDistrib_lTensor_dualMap (S : A →ₗ[R] A) (w : Module.Dual R A ⊗[R] Module.Dual R A) : TensorProduct.dualDistrib R A A ((S.dualMap).lTensor (Module.Dual R A) w) = (TensorProduct.dualDistrib R A A w) ∘ₗ (S.lTensor A) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => apply TensorProduct.ext' intro x y simp only [LinearMap.lTensor_tmul, TensorProduct.dualDistrib_apply, LinearMap.comp_apply, LinearMap.dualMap_apply] | add w₁ w₂ ih₁ ih₂ => simp only [map_add, ih₁, ih₂, LinearMap.add_comp] theorem dualMul_antipode_rTensor_dualComul (φ : Module.Dual R A) : dualMul R A (((HopfAlgebra.antipode R (A := A)).dualMap).rTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) := by ext a rw [dualMul_apply_eq_pairing, dualDistrib_rTensor_dualMap, LinearMap.comp_apply, dualDistrib_dualComul, LinearMap.dualMap_apply, HopfAlgebra.mul_antipode_rTensor_comul_apply, Algebra.algebraMap_eq_smul_one, map_smul, smul_eq_mul, dualUnit_apply, dualCounit_apply] theorem dualMul_antipode_lTensor_dualComul (φ : Module.Dual R A) : dualMul R A (((HopfAlgebra.antipode R (A := A)).dualMap).lTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) := by ext a rw [dualMul_apply_eq_pairing, dualDistrib_lTensor_dualMap, LinearMap.comp_apply, dualDistrib_dualComul, LinearMap.dualMap_apply, HopfAlgebra.mul_antipode_lTensor_comul_apply, Algebra.algebraMap_eq_smul_one, map_smul, smul_eq_mul, dualUnit_apply, dualCounit_apply] theorem dualHopfAxioms_of_finite_free : DualHopfAxioms R A where toDualBialgebraAxioms := dualBialgebraAxioms_of_finite_free R A mul_antipode_rTensor_comul := dualMul_antipode_rTensor_dualComul R A mul_antipode_lTensor_comul := dualMul_antipode_lTensor_dualComul R A end HopfDischarge end noncomputable section section ConvIdentities variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] theorem dualMul_assoc (f g h : Module.Dual R A) : dualMul R A (dualMul R A (f ⊗ₜ[R] g) ⊗ₜ[R] h) = dualMul R A (f ⊗ₜ[R] dualMul R A (g ⊗ₜ[R] h)) := by simp only [dualMul_tmul_eq_convMul, WithConv.toConv_ofConv] exact congrArg WithConv.ofConv (mul_assoc (WithConv.toConv f) (WithConv.toConv g) (WithConv.toConv h)) theorem dualMul_counit_tmul (f : Module.Dual R A) : dualMul R A ((Coalgebra.counit (R := R) (A := A)) ⊗ₜ[R] f) = f := by rw [dualMul_tmul_eq_convMul, ← convOne_ofConv_eq_counit R A, WithConv.toConv_ofConv] exact congrArg WithConv.ofConv (one_mul (WithConv.toConv f)) theorem dualMul_tmul_counit (f : Module.Dual R A) : dualMul R A (f ⊗ₜ[R] (Coalgebra.counit (R := R) (A := A))) = f := by rw [dualMul_tmul_eq_convMul, ← convOne_ofConv_eq_counit R A, WithConv.toConv_ofConv] exact congrArg WithConv.ofConv (mul_one (WithConv.toConv f)) theorem dualMul_dualUnit_tmul (r : R) (f : Module.Dual R A) : dualMul R A (dualUnit R A r ⊗ₜ[R] f) = r • f := by rw [dualUnit_eq_smul_counit, ← TensorProduct.smul_tmul', map_smul, dualMul_counit_tmul] theorem dualMul_tmul_dualUnit (f : Module.Dual R A) (r : R) : dualMul R A (f ⊗ₜ[R] dualUnit R A r) = r • f := by rw [dualUnit_eq_smul_counit, TensorProduct.tmul_smul, map_smul, dualMul_tmul_counit] theorem dualUnit_mul (r s : R) : dualUnit R A (r * s) = dualMul R A (dualUnit R A r ⊗ₜ[R] dualUnit R A s) := by rw [dualMul_tmul_dualUnit R A (dualUnit R A r) s, dualUnit_eq_smul_counit R A r, dualUnit_eq_smul_counit R A (r * s), smul_smul, mul_comm s r] end ConvIdentities section RingCarrier variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] @[reducible] def dualConvRing : Ring (Module.Dual R A) where __ := (inferInstance : AddCommMonoid (Module.Dual R A)) __ := (inferInstance : AddCommGroup (Module.Dual R A)) mul f g := dualMul R A (f ⊗ₜ[R] g) one := Coalgebra.counit (R := R) (A := A) mul_assoc := dualMul_assoc R A one_mul := dualMul_counit_tmul R A mul_one := dualMul_tmul_counit R A left_distrib f g h := by show dualMul R A (f ⊗ₜ[R] (g + h)) = dualMul R A (f ⊗ₜ[R] g) + dualMul R A (f ⊗ₜ[R] h) rw [TensorProduct.tmul_add, map_add] right_distrib f g h := by show dualMul R A ((f + g) ⊗ₜ[R] h) = dualMul R A (f ⊗ₜ[R] h) + dualMul R A (g ⊗ₜ[R] h) rw [TensorProduct.add_tmul, map_add] zero_mul f := by show dualMul R A ((0 : Module.Dual R A) ⊗ₜ[R] f) = 0 rw [TensorProduct.zero_tmul, map_zero] mul_zero f := by show dualMul R A (f ⊗ₜ[R] (0 : Module.Dual R A)) = 0 rw [TensorProduct.tmul_zero, map_zero] theorem dualConvRing_one : letI : Ring (Module.Dual R A) := dualConvRing R A; (1 : Module.Dual R A) = Coalgebra.counit (R := R) (A := A) := rfl theorem dualConvRing_mul (f g : Module.Dual R A) : letI : Ring (Module.Dual R A) := dualConvRing R A; f * g = dualMul R A (f ⊗ₜ[R] g) := rfl theorem dualConvRing_mul_eq_convMul (f g : Module.Dual R A) : letI : Ring (Module.Dual R A) := dualConvRing R A; f * g = (WithConv.toConv f * WithConv.toConv g).ofConv := Eq.trans (dualConvRing_mul R A f g) (dualMul_tmul_eq_convMul R A f g) @[reducible] def dualConvCommRing [IsCocomm R A] : CommRing (Module.Dual R A) where __ := dualConvRing R A mul_comm f g := by show dualMul R A (f ⊗ₜ[R] g) = dualMul R A (g ⊗ₜ[R] f) simp only [dualMul_tmul_eq_convMul] exact congrArg WithConv.ofConv (mul_comm (WithConv.toConv f) (WithConv.toConv g)) end RingCarrier section AlgebraCarrier variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] attribute [local instance] dualConvRing @[reducible] def dualConvAlgebra : Algebra R (Module.Dual R A) where toSMul := (inferInstance : SMul R (Module.Dual R A)) algebraMap := { toFun := fun r => dualUnit R A r map_one' := dualUnit_one R A map_mul' := fun r s => dualUnit_mul R A r s map_zero' := map_zero (dualUnit R A) map_add' := fun r s => map_add (dualUnit R A) r s } commutes' := fun r f => (dualMul_dualUnit_tmul R A r f).trans (dualMul_tmul_dualUnit R A f r).symm smul_def' := fun r f => (dualMul_dualUnit_tmul R A r f).symm attribute [local instance] dualConvAlgebra theorem dualConvAlgebra_algebraMap (r : R) : algebraMap R (Module.Dual R A) r = dualUnit R A r := rfl theorem dualConvAlgebra_algebraMap_eq_smul_counit (r : R) : algebraMap R (Module.Dual R A) r = r • Coalgebra.counit (R := R) (A := A) := (dualConvAlgebra_algebraMap R A r).trans (dualUnit_eq_smul_counit R A r) end AlgebraCarrier section BialgebraPackage variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] variable [Module.Finite R A] [Module.Free R A] attribute [local instance] dualConvRing dualConvAlgebra dualCoalgebraOfFiniteFree theorem dualComul_counit_eq_tensorOne : dualComul R A (Coalgebra.counit (R := R) (A := A)) = (1 : Module.Dual R A ⊗[R] Module.Dual R A) := by rw [Algebra.TensorProduct.one_def] exact dualComul_counit R A theorem dualComul_dualMul_eq_mul (f g : Module.Dual R A) : dualComul R A (dualMul R A (f ⊗ₜ[R] g)) = dualComul R A f * dualComul R A g := by rw [dualComul_dualMul_tmul R A f g] generalize dualComul R A f = X generalize dualComul R A g = Y induction X using TensorProduct.induction_on with | zero => simp | tmul p q => induction Y using TensorProduct.induction_on with | zero => simp | tmul r s => rw [TensorProduct.tensorTensorTensorComm_tmul, TensorProduct.map_tmul] exact (Algebra.TensorProduct.tmul_mul_tmul p r q s).symm | add Y₁ Y₂ ih₁ ih₂ => rw [TensorProduct.tmul_add, map_add, map_add, mul_add, ih₁, ih₂] | add X₁ X₂ ih₁ ih₂ => rw [TensorProduct.add_tmul, map_add, map_add, add_mul, ih₁, ih₂] @[reducible] def dualBialgebraOfFiniteFree : Bialgebra R (Module.Dual R A) := Bialgebra.mk' R (Module.Dual R A) (dualCounit_counit R A) (fun {f g} => dualCounit_dualMul R A f g) (dualComul_counit_eq_tensorOne R A) (fun {f g} => dualComul_dualMul_eq_mul R A f g) theorem dualBialgebraOfFiniteFree_toAlgebra : (dualBialgebraOfFiniteFree R A).toAlgebra = dualConvAlgebra R A := rfl theorem dualBialgebraOfFiniteFree_toCoalgebra : (dualBialgebraOfFiniteFree R A).toCoalgebra = dualCoalgebraOfFiniteFree R A := rfl end BialgebraPackage section HopfPackage variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [HopfAlgebra R A] variable [Module.Finite R A] [Module.Free R A] attribute [local instance] dualConvRing dualConvAlgebra dualCoalgebraOfFiniteFree theorem dualConv_mul'_antipode_rTensor_dualComul : LinearMap.mul' R (Module.Dual R A) ∘ₗ ((HopfAlgebra.antipode R (A := A)).dualMap).rTensor (Module.Dual R A) ∘ₗ dualComul R A = Algebra.linearMap R (Module.Dual R A) ∘ₗ dualCounit R A := by refine LinearMap.ext fun φ => ?_ simp only [LinearMap.comp_apply] show LinearMap.mul' R (Module.Dual R A) (((HopfAlgebra.antipode R (A := A)).dualMap).rTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) have hmul' : ∀ w : Module.Dual R A ⊗[R] Module.Dual R A, LinearMap.mul' R (Module.Dual R A) w = dualMul R A w := by intro w induction w using TensorProduct.induction_on with | zero => simp | tmul f g => exact LinearMap.mul'_apply | add w₁ w₂ ih₁ ih₂ => rw [map_add, map_add, ih₁, ih₂] rw [hmul'] exact dualMul_antipode_rTensor_dualComul R A φ theorem dualConv_mul'_antipode_lTensor_dualComul : LinearMap.mul' R (Module.Dual R A) ∘ₗ ((HopfAlgebra.antipode R (A := A)).dualMap).lTensor (Module.Dual R A) ∘ₗ dualComul R A = Algebra.linearMap R (Module.Dual R A) ∘ₗ dualCounit R A := by refine LinearMap.ext fun φ => ?_ simp only [LinearMap.comp_apply] show LinearMap.mul' R (Module.Dual R A) (((HopfAlgebra.antipode R (A := A)).dualMap).lTensor (Module.Dual R A) (dualComul R A φ)) = dualUnit R A (dualCounit R A φ) have hmul' : ∀ w : Module.Dual R A ⊗[R] Module.Dual R A, LinearMap.mul' R (Module.Dual R A) w = dualMul R A w := by intro w induction w using TensorProduct.induction_on with | zero => simp | tmul f g => exact LinearMap.mul'_apply | add w₁ w₂ ih₁ ih₂ => rw [map_add, map_add, ih₁, ih₂] rw [hmul'] exact dualMul_antipode_lTensor_dualComul R A φ @[reducible] def dualHopfAlgebraOfFiniteFree : HopfAlgebra R (Module.Dual R A) where toBialgebra := dualBialgebraOfFiniteFree R A antipode := (HopfAlgebra.antipode R (A := A)).dualMap mul_antipode_rTensor_comul := dualConv_mul'_antipode_rTensor_dualComul R A mul_antipode_lTensor_comul := dualConv_mul'_antipode_lTensor_dualComul R A attribute [local instance] dualHopfAlgebraOfFiniteFree theorem dualHopfAlgebraOfFiniteFree_antipode : HopfAlgebra.antipode R (A := Module.Dual R A) = (HopfAlgebra.antipode R (A := A)).dualMap := rfl end HopfPackage end noncomputable section section PairingSwap variable (R : Type u) (A : Type v) [CommRing R] [AddCommMonoid A] [Module R A] theorem dualDistrib_comm_apply (w : Module.Dual R A ⊗[R] Module.Dual R A) (a b : A) : TensorProduct.dualDistrib R A A (TensorProduct.comm R (Module.Dual R A) (Module.Dual R A) w) (a ⊗ₜ[R] b) = TensorProduct.dualDistrib R A A w (b ⊗ₜ[R] a) := by induction w using TensorProduct.induction_on with | zero => simp | tmul f g => rw [TensorProduct.comm_tmul, TensorProduct.dualDistrib_apply, TensorProduct.dualDistrib_apply] exact mul_comm (g a) (f b) | add w₁ w₂ ih₁ ih₂ => simp only [map_add, LinearMap.add_apply, ih₁, ih₂] end PairingSwap section Cocomm variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] variable [Module.Finite R A] [Module.Free R A] theorem dualDistrib_comm_dualComul_pairing (φ : Module.Dual R A) (a b : A) : TensorProduct.dualDistrib R A A (TensorProduct.comm R (Module.Dual R A) (Module.Dual R A) (dualComul R A φ)) (a ⊗ₜ[R] b) = φ (b * a) := by rw [dualDistrib_comm_apply, dualComul_pairing] theorem comm_dualComul (φ : Module.Dual R A) : TensorProduct.comm R (Module.Dual R A) (Module.Dual R A) (dualComul R A φ) = dualComul R A φ := by symm apply dualComul_eq_of_dualDistrib_eq apply TensorProduct.ext' intro a b rw [dualDistrib_comm_dualComul_pairing, LinearMap.dualMap_apply, LinearMap.mul'_apply] exact congrArg φ (mul_comm b a) theorem comm_comp_dualComul : (TensorProduct.comm R (Module.Dual R A) (Module.Dual R A)).toLinearMap ∘ₗ dualComul R A = dualComul R A := LinearMap.ext fun φ => comm_dualComul R A φ theorem dualCoalgebraOfFiniteFree_isCocomm : letI : Coalgebra R (Module.Dual R A) := dualCoalgebraOfFiniteFree R A Coalgebra.IsCocomm R (Module.Dual R A) := by letI : Coalgebra R (Module.Dual R A) := dualCoalgebraOfFiniteFree R A refine ⟨LinearMap.ext fun φ => ?_⟩ simp only [LinearMap.comp_apply, LinearEquiv.coe_coe] show TensorProduct.comm R (Module.Dual R A) (Module.Dual R A) (dualComul R A φ) = dualComul R A φ exact comm_dualComul R A φ end Cocomm section CommBialgebraPackage variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] variable [Module.Finite R A] [Module.Free R A] [IsCocomm R A] attribute [local instance] dualConvCommRing dualConvAlgebra dualCoalgebraOfFiniteFree @[reducible] def dualCommBialgebraOfFiniteFree : Bialgebra R (Module.Dual R A) := Bialgebra.mk' R (Module.Dual R A) (dualCounit_counit R A) (fun {f g} => dualCounit_dualMul R A f g) (dualComul_counit_eq_tensorOne R A) (fun {f g} => dualComul_dualMul_eq_mul R A f g) theorem dualCommBialgebraOfFiniteFree_toAlgebra : (dualCommBialgebraOfFiniteFree R A).toAlgebra = dualConvAlgebra R A := rfl theorem dualCommBialgebraOfFiniteFree_toCoalgebra : (dualCommBialgebraOfFiniteFree R A).toCoalgebra = dualCoalgebraOfFiniteFree R A := rfl theorem dualCommBialgebraOfFiniteFree_eq_dualBialgebraOfFiniteFree : dualCommBialgebraOfFiniteFree R A = dualBialgebraOfFiniteFree R A := rfl theorem dualCommBialgebraOfFiniteFree_isCocomm : letI : Coalgebra R (Module.Dual R A) := (dualCommBialgebraOfFiniteFree R A).toCoalgebra Coalgebra.IsCocomm R (Module.Dual R A) := by letI : Coalgebra R (Module.Dual R A) := (dualCommBialgebraOfFiniteFree R A).toCoalgebra refine ⟨LinearMap.ext fun φ => ?_⟩ simp only [LinearMap.comp_apply, LinearEquiv.coe_coe] show TensorProduct.comm R (Module.Dual R A) (Module.Dual R A) (dualComul R A φ) = dualComul R A φ exact comm_dualComul R A φ end CommBialgebraPackage section CommHopfPackage variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [HopfAlgebra R A] variable [Module.Finite R A] [Module.Free R A] [IsCocomm R A] attribute [local instance] dualConvCommRing dualConvAlgebra dualCoalgebraOfFiniteFree @[reducible] def dualCommHopfAlgebraOfFiniteFree : HopfAlgebra R (Module.Dual R A) where toBialgebra := dualCommBialgebraOfFiniteFree R A antipode := (HopfAlgebra.antipode R (A := A)).dualMap mul_antipode_rTensor_comul := dualConv_mul'_antipode_rTensor_dualComul R A mul_antipode_lTensor_comul := dualConv_mul'_antipode_lTensor_dualComul R A theorem dualCommHopfAlgebraOfFiniteFree_toBialgebra : (dualCommHopfAlgebraOfFiniteFree R A).toBialgebra = dualCommBialgebraOfFiniteFree R A := rfl theorem dualCommHopfAlgebraOfFiniteFree_eq_dualHopfAlgebraOfFiniteFree : dualCommHopfAlgebraOfFiniteFree R A = dualHopfAlgebraOfFiniteFree R A := rfl attribute [local instance] dualCommHopfAlgebraOfFiniteFree theorem dualCommHopfAlgebraOfFiniteFree_antipode : HopfAlgebra.antipode R (A := Module.Dual R A) = (HopfAlgebra.antipode R (A := A)).dualMap := rfl end CommHopfPackage end noncomputable section section Instances variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] instance instAddCommGroup : AddCommGroup (CartierDual R A) := inferInstanceAs (AddCommGroup (Module.Dual R A)) instance instModule : Module R (CartierDual R A) := inferInstanceAs (Module R (Module.Dual R A)) instance instRing : Ring (CartierDual R A) := { instAddCommGroup R A, dualConvRing R A with } instance instCommRing [IsCocomm R A] : CommRing (CartierDual R A) := { instRing R A with mul_comm := fun f g => (dualConvCommRing R A).mul_comm f g } instance instAlgebra : Algebra R (CartierDual R A) := { dualConvAlgebra R A with toSMul := (instModule R A).toDistribMulAction.toMulAction.toSMul } instance instFunLike : FunLike (CartierDual R A) A R := inferInstanceAs (FunLike (A →ₗ[R] R) A R) instance instLinearMapClass : LinearMapClass (CartierDual R A) R A R := inferInstanceAs (LinearMapClass (A →ₗ[R] R) R A R) def toDual : CartierDual R A ≃ₗ[R] Module.Dual R A where toFun φ := φ invFun φ := φ map_add' _ _ := rfl map_smul' _ _ := rfl left_inv _ := rfl right_inv _ := rfl def ofDual : Module.Dual R A ≃ₗ[R] CartierDual R A := (toDual R A).symm variable {R A} @[simp] theorem toDual_apply (φ : CartierDual R A) (a : A) : toDual R A φ a = φ a := rfl @[simp] theorem ofDual_apply (φ : Module.Dual R A) (a : A) : ofDual R A φ a = φ a := rfl @[simp] theorem toDual_ofDual (φ : Module.Dual R A) : toDual R A (ofDual R A φ) = φ := rfl @[simp] theorem ofDual_toDual (φ : CartierDual R A) : ofDual R A (toDual R A φ) = φ := rfl @[ext] theorem ext {φ ψ : CartierDual R A} (h : ∀ a, φ a = ψ a) : φ = ψ := LinearMap.ext (M := A) (f := (φ : Module.Dual R A)) (g := (ψ : Module.Dual R A)) h theorem mul_def (φ ψ : CartierDual R A) : φ * ψ = ofDual R A (dualMul R A (toDual R A φ ⊗ₜ[R] toDual R A ψ)) := rfl theorem mul_apply (φ ψ : CartierDual R A) (a : A) : (φ * ψ) a = TensorProduct.dualDistrib R A A (toDual R A φ ⊗ₜ[R] toDual R A ψ) (Coalgebra.comul a) := dualMul_pairing R A _ _ a theorem mul_eq_convMul (φ ψ : CartierDual R A) : toDual R A (φ * ψ) = (WithConv.toConv (toDual R A φ) * WithConv.toConv (toDual R A ψ)).ofConv := dualMul_tmul_eq_convMul R A _ _ theorem toDual_mul (φ ψ : CartierDual R A) : toDual R A (φ * ψ) = (WithConv.toConv (toDual R A φ) * WithConv.toConv (toDual R A ψ)).ofConv := mul_eq_convMul φ ψ theorem one_def : (1 : CartierDual R A) = ofDual R A (Coalgebra.counit (R := R) (A := A)) := rfl @[simp] theorem one_apply (a : A) : (1 : CartierDual R A) a = Coalgebra.counit (R := R) a := rfl theorem algebraMap_def (r : R) : algebraMap R (CartierDual R A) r = ofDual R A (dualUnit R A r) := rfl @[simp] theorem algebraMap_apply (r : R) (a : A) : algebraMap R (CartierDual R A) r a = Coalgebra.counit (R := R) a * r := dualUnit_apply R A r a variable (R A) variable [Module.Finite R A] [Module.Free R A] instance instModuleFinite : Module.Finite R (CartierDual R A) := inferInstanceAs (Module.Finite R (Module.Dual R A)) instance instModuleFree : Module.Free R (CartierDual R A) := inferInstanceAs (Module.Free R (Module.Dual R A)) theorem finrank_eq [Nontrivial R] : Module.finrank R (CartierDual R A) = Module.finrank R A := Module.finrank_linearMap_self R R A instance instCoalgebra : Coalgebra R (CartierDual R A) := { dualCoalgebraOfFiniteFree R A with } instance instBialgebra : Bialgebra R (CartierDual R A) := { instAlgebra R A, instCoalgebra R A, dualBialgebraOfFiniteFree R A with } instance instIsCocomm : IsCocomm R (CartierDual R A) := ⟨(dualCoalgebraOfFiniteFree_isCocomm R A).comm_comp_comul⟩ variable {R A} theorem comul_def (φ : CartierDual R A) : TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap (Coalgebra.comul (R := R) φ) = dualComul R A (toDual R A φ) := by have hid : TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap = (LinearMap.id : Module.Dual R A ⊗[R] Module.Dual R A →ₗ[R] Module.Dual R A ⊗[R] Module.Dual R A) := TensorProduct.ext' fun _ _ => rfl rw [hid] rfl theorem comul_pairing (φ : CartierDual R A) (a b : A) : TensorProduct.dualDistrib R A A (TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap (Coalgebra.comul (R := R) φ)) (a ⊗ₜ[R] b) = φ (a * b) := by rw [comul_def] exact dualComul_pairing R A _ a b theorem comul_eq_dualComul (φ : CartierDual R A) : (Coalgebra.comul (R := R) φ : CartierDual R A ⊗[R] CartierDual R A) = dualComul R A (toDual R A φ) := rfl theorem counit_eq_dualCounit (φ : CartierDual R A) : Coalgebra.counit (R := R) φ = dualCounit R A (toDual R A φ) := rfl theorem tmul_eq_of_pairing_eq {x y : CartierDual R A ⊗[R] CartierDual R A} (h : ∀ a b : A, TensorProduct.dualDistrib R A A (TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap x) (a ⊗ₜ[R] b) = TensorProduct.dualDistrib R A A (TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap y) (a ⊗ₜ[R] b)) : x = y := by have hid : TensorProduct.map (toDual R A).toLinearMap (toDual R A).toLinearMap = (LinearMap.id : Module.Dual R A ⊗[R] Module.Dual R A →ₗ[R] Module.Dual R A ⊗[R] Module.Dual R A) := TensorProduct.ext' fun _ _ => rfl rw [hid] at h have hinj : Function.Injective (TensorProduct.dualDistrib R A A) := (TensorProduct.dualDistribEquiv R A A).injective exact hinj (TensorProduct.ext' fun a b => h a b) @[simp] theorem counit_apply (φ : CartierDual R A) : Coalgebra.counit (R := R) φ = φ 1 := dualCounit_apply R A _ end Instances section HopfInstance variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [HopfAlgebra R A] variable [Module.Finite R A] [Module.Free R A] instance instHopfAlgebra : HopfAlgebra R (CartierDual R A) := { instBialgebra R A, dualHopfAlgebraOfFiniteFree R A with } variable {R A} @[simp] theorem antipode_apply (φ : CartierDual R A) (a : A) : (HopfAlgebra.antipode R (A := CartierDual R A) φ) a = φ (HopfAlgebra.antipode R (A := A) a) := rfl end HopfInstance section BidualSanity variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [Bialgebra R A] variable [Module.Finite R A] [Module.Free R A] [IsCocomm R A] example : Ring (CartierDual R (CartierDual R A)) := inferInstance example : CommRing (CartierDual R (CartierDual R A)) := inferInstance example : Bialgebra R (CartierDual R (CartierDual R A)) := inferInstance example : IsCocomm R (CartierDual R (CartierDual R A)) := inferInstance end BidualSanity section BidualSanityHopf variable (R : Type u) (A : Type v) [CommRing R] [CommRing A] [HopfAlgebra R A] variable [Module.Finite R A] [Module.Free R A] [IsCocomm R A] example : HopfAlgebra R (CartierDual R (CartierDual R A)) := inferInstance end BidualSanityHopf end end CartierDual namespace MonoidAlgebra instance instModuleFreeOfCartier {R : Type*} [CommSemiring R] {Γ : Type*} : Module.Free R (MonoidAlgebra R Γ) := .of_equiv (MonoidAlgebra.coeffLinearEquiv R).symm instance instModuleFiniteOfCartier {R : Type*} [CommSemiring R] {Γ : Type*} [Finite Γ] : Module.Finite R (MonoidAlgebra R Γ) := .equiv (MonoidAlgebra.coeffLinearEquiv R).symm end MonoidAlgebra section variable (R : Type*) [CommRing R] (Γ : Type*) [CommGroup Γ] [Fintype Γ] noncomputable example : CommRing (CartierDual R (MonoidAlgebra R Γ)) := inferInstance noncomputable example : HopfAlgebra R (CartierDual R (MonoidAlgebra R Γ)) := inferInstance example : Coalgebra.IsCocomm R (CartierDual R (MonoidAlgebra R Γ)) := inferInstance end
Statements phrased using this module (185)
- The Cartier dual of R[M] is étale for finite M
CartierDual.algebraEtale_addMonoidAlgebra0 below · depth 13 - Rigidity for bialgebras with étale Cartier dual
HopfAlgebra.bialgHom_apply_eq_algebraMap_counit_of_etale_cartierDual_of_sub_mem_map_maximalIdeal0 below · depth 13 - No μₚ-type point when the Cartier dual is local
HopfAlgebra.point_eq_one_of_forall_mem_inertiaSubgroupIn_eq_pow_of_isLocalRing_cartierDual28 below · depth 13 - Degeneracy morphisms kill the ℚ̄-points of the toric lift
ModularCurve.JZeroNeronObjectAtP.muPt_toricLift_degeneracyHom_eq_one303 below · depth 13 - Cartier duality commutes with base change: finite free case
CartierDual.dualBaseChangeLin_bijective_integral0 below · depth 14 - Cartier dual of R[Γ] is Map(Γ,R)
CartierDual.exists_algEquiv_monoidAlgebra_pi0 below · depth 14 - Cartier dual corepresents group-like elements
CartierDual.exists_algHomEquiv_groupLike0 below · depth 14 - Cartier biduality for finite free cocommutative bialgebras
CartierDual.exists_bialgEquiv_bidual0 below · depth 14 - Evaluation at convolution points identifies A with R[Γ]^∨
CartierDual.exists_bialgEquiv_monoidAlgebra_of_points0 below · depth 14 - Local-local criterion from Ft=F² and Vt=V²
HopfAlgebra.isLocalRing_and_isLocalRing_cartierDual_of_pow_eq_counit_of_frobenius_congr0 below · depth 14 - Bialgebra comorphism of the toric lift through the m-torsion
ModularCurve.JZeroNeronObjectAtP.exists_bialgHom_muCoord_forall_torsionPoint_comp_fst_eq11 below · depth 14 - Degeneracy maps kill the toric lift over the residue field
ModularCurve.JZeroNeronObjectAtP.muBaseChange_toricLift_degeneracyHom_eq_one21 below · depth 14 - Points of the Cartier dual as characters of the points
FinFlatHopf.dualPoints_equiv_monoidHom0 below · depth 15 - Generic-fibre character algebra: annihilator description and Hopf stability
HopfAlgebra.characterGenericFibre_eq_and_isComulStable_and_isAntipodeStable2 below · depth 15 - Points of the character closure are L-valued characters of S
HopfAlgebra.exists_characterClosure_points_equiv3 below · depth 15 - Unipotent, connected or ordinary trichotomy at p for finite flat ρ̄
ResidualGaloisRep.exists_unipotent_or_connected_model_or_ordinary_of_isLocallyFlatCocycleAd45 below · depth 15 - Flat local bound for connected models of ad ρ̄
ResidualGaloisRep.finiteDimensional_localFlatClassesAd_and_finrank_le_of_isLocalRing_baseChange446 below · depth 15 - Unipotent flat local bound: dim H¹_f ≤ h⁰ + 1
ResidualGaloisRep.finiteDimensional_localFlatClassesAd_and_finrank_le_of_isLocalRing_cartierDual438 below · depth 15 - Flat local bound for ordinary ρ̄ at p
ResidualGaloisRep.finiteDimensional_localFlatClassesAd_and_finrank_le_of_ordinary332 below · depth 15 - Cartier duality commutes with base change to a field
CartierDual.dualBaseChangeLin_bijective0 below · depth 16 - Annihilator of I_S as a Hopf subalgebra of the Cartier dual
CartierDual.exists_subalgebra_eq_annihilator_vanishingIdealOfPoints0 below · depth 16 - Bialgebra maps to a group algebra are determined modulo 𝔪
HopfAlgebra.bialgHom_addMonoidAlgebra_eq_of_mapAlgHom_residueField_comp_eq2 below · depth 16 - Index-two triviality criterion for points of the character closure
HopfAlgebra.characterClosure_point_eq_trivial_of_restrict_of_congr_two25 below · depth 16 - Honda-system model bounding local flat classes of ad ρ̄
ResidualGaloisRep.exists_hondaSystem_finrank_endHonda_le_injective_of_isLocalRing_cartierDual433 below · depth 16 - Cyclotomic inertia subspace, or a model with local Cartier dual
ResidualGaloisRep.exists_submodule_inertia_eq_smul_and_unipotent_model_of_eq_bot37 below · depth 16 - Connectedness criterion for a finite flat model of ̄ V⊕̄ V
ResidualGaloisRep.exists_submodule_inertia_sub_mem_and_connected_model_of_eq_top33 below · depth 16 - Cartier-dual unipotent model and isomorphic local flat classes
ResidualGaloisRep.exists_unipotent_model_and_linearEquiv_localFlatClassesAd_of_isLocalRing_baseChange20 below · depth 16 - Dimension bound for ordinary unit classes in H¹(ℚₚ,ad ρ̄)
ResidualGaloisRep.finiteDimensional_ordinaryUnitClassesAd_and_finrank_le281 below · depth 16 - Flat classes are ordinary unit classes at p
ResidualGaloisRep.unitRootInertia_trivial_and_localFlatClassesAd_le_ordinaryUnitClassesAd81 below · depth 16 - Galois-equivariant Cartier duality over ℚ̄ₚ
CartierDual.exists_equiv_algHom_padicAlgCl_monoidHom_units11 below · depth 17 - Cartier duality commutes with base change
CartierDual.nonempty_ringEquiv_baseChange0 below · depth 17 - Honda system of a unipotent k-vector space scheme over ℤₚ
Deformation.DieudonneModule.exists_hondaSystem_addEquiv_smul_eq_map_of_isLocalRing_cartierDual63 below · depth 17 - Local finite level implies global finite level
ExtCitation.exists_finiteDimensional_fixingSubgroup_comap_primeLocalToGlobal_le6 below · depth 17 - Kummer-type splitting of inertia for p-torsion Hopf algebras over ℤₚ
HopfAlgebra.exists_units_forall_inertia_apply_eq_of_inertiaCyclotomic_submonoid_padicInt48 below · depth 17 - Group-like elements reduce to 1; dual has no nontrivial idempotents
HopfAlgebra.groupLike_characterClosure_mem_and_sub_one_mem_of_reduction3 below · depth 17 - Unramified additive characters of G_{ℚ_p} span at most a line
PadicAlgCl.finrank_span_addChar_inertia_eq_zero_finiteLevel_le_one5 below · depth 17 - ℚ̄ₚ-points of a module-finite ℤₚ-algebra lie in one finite extension
PadicInt.exists_intermediateField_finiteDimensional_forall_algHom_apply_mem0 below · depth 17 - The cyclotomically twisted dual of a residual representation
ResidualGaloisRep.exists_dualTwist_linearEquiv_dual0 below · depth 17 - Local flat classes inject into Honda self-extensions
ResidualGaloisRep.exists_injective_localFlatClassesAd_selfExt_of_hondaSystem_model428 below · depth 17 - Flat cocycles are cohomologous to ordinary flat cocycles
ResidualGaloisRep.exists_isOrdinaryCocycleAd_of_isLocallyFlatCocycleAd58 below · depth 17 - Unipotent finite flat model of ̄ V from one of ̄ V⊕̄ V
ResidualGaloisRep.exists_unipotent_model_V_of_isLocalRing_cartierDual97 below · depth 17 - Unipotent flat model for the twisted dual ̄ V^∨(1)
ResidualGaloisRep.exists_unipotent_model_dualTwist_of_isLocalRing_baseChange16 below · depth 17 - Honda system endomorphisms bounded by local invariants of ad ρ̄
ResidualGaloisRep.finrank_endHonda_le_finrank_invariants_of_hondaSystem_model362 below · depth 17 - Local invariants of ad ρ̄ under Cartier dual twist
ResidualGaloisRep.finrank_invariants_adRep_eq_of_dualTwist0 below · depth 17 - Flat classes in ad ρ̄ and in its cyclotomic dual twist
ResidualGaloisRep.nonempty_localFlatClassesAd_linearEquiv_of_dualTwist13 below · depth 17 - Unit-root inertia classes in H¹ span at most a line
groupCohomology.finrank_span_H1_unitRootInertia_le_one279 below · depth 17 - Orthogonal idempotents in the Cartier dual give a coalgebra map
CartierDual.exists_coalgHom_addMonoidAlgebra_eq_sum_single_of_isIdempotentElem0 below · depth 18 - Coalgebra maps B → S[M] give orthogonal idempotents in the Cartier dual
CartierDual.exists_isIdempotentElem_eq_sum_single_of_coalgHom_addMonoidAlgebra0 below · depth 18 - Reduction of the Cartier dual modulo 𝔪
CartierDual.exists_ringHom_apply_eq_dualBaseChangeLin_tmul_of_isLocalRing1 below · depth 18 - Order of the Dieudonné module of a unipotent group scheme
Deformation.DieudonneModule.exists_finrank_eq_pow_and_natCard_eq_pow_of_isLocalRing_cartierDual53 below · depth 18 - Fontaine full faithfulness for unipotent p-group schemes
Deformation.DieudonneModule.map_baseChange_injective_and_exists_map_baseChange_eq280 below · depth 18 - Exactness of Fontaine's functor along a Hopf-kernel extension
Deformation.DieudonneModule.map_baseChange_surjective_injective_fontaineHodge_of_range_eq_hopfKer57 below · depth 18 - Points of the Cartier dual of a multiplicative-type Hopf algebra
GaloisRep.cartierDual_points_of_galoisCyclotomic0 below · depth 18 - Cyclotomic finite flat Hopf algebras over ℤ_{(q)} are monoid algebras
GaloisRep.exists_bialgEquiv_monoidAlgebra_of_finiteFlatHopf_of_galoisCyclotomic11 below · depth 18 - Locality of the Cartier dual passes to bialgebra quotients
HopfAlgebra.isLocalRing_cartierDual_of_surjective0 below · depth 18 - Flat classes in H¹(ℚₚ,adρ̄) inject into Honda self-extensions
ResidualGaloisRep.exists_injective_flatClassSet_selfExt_of_hondaSystem_model423 below · depth 18 - Finite-level 1-cocycles of a non-cyclotomic line have dimension ≤ 2
groupCohomology.finrank_cocycles_level_le_two_of_finrank_eq_one_of_not_cyclotomic255 below · depth 18 - Unit-inertia finite-level cocycles in 𝔽ₚ(ω) span at most a plane
groupCohomology.finrank_cocycles_ofChar_cycloChar_level_unitRootInertia_le_two55 below · depth 18 - Cartier duality commutes with base change
CartierDual.exists_bialgEquiv_baseChange_forall_pairing_symm_tmul0 below · depth 19 - Cartier duality on L-points, Galois-equivariantly
CartierDual.exists_equiv_algHom_monoidHom_units_of_isAlgClosed_of_charZero11 below · depth 19 - Fontaine's submodule is exact along a Hopf-algebra surjection
Deformation.DieudonneModule.fontaineHodge_map_surjective_and_exists_of_mem_range_of_surjective56 below · depth 19 - Full faithfulness of the Dieudonné functor over Fₚ
Deformation.DieudonneModule.map_injective_and_exists_map_eq_of_isLocalRing_cartierDual60 below · depth 19 - Self-dual local–local Dieudonné modules: #ker F=#cokerV
Deformation.DieudonneModule.natCard_ker_frobenius_eq_natCard_quot_range_verschiebung_of_nonempty_bialgEquiv_cartierDual_zmodp67 below · depth 19 - Fontaine's criterion for lifting special-fibre points, residue field mathbf Fₚ
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_zmodp279 below · depth 19 - Reduction mod p is injective on points: unipotent case
HopfAlgebra.algHom_eq_of_forall_sub_mem_span_of_isLocalRing_cartierDual1 below · depth 19 - Non-zero primitive element in a finite unipotent bialgebra
HopfAlgebra.exists_ne_zero_comul_eq_tmul_one_add_one_tmul_of_isLocalRing_cartierDual0 below · depth 19 - Unit-root inertia moves p-th roots of valuation prime to p
PadicAlgCl.exists_mem_unitRootInertia_apply_ne_of_not_dvd_valuation26 below · depth 19 - Fontaine–Conrad presentation of a locally flat ad-cocycle
ResidualGaloisRep.exists_fontaineConradPresentation_of_isLocallyFlatCocycleAd206 below · depth 19 - Local–local is inherited by bialgebra quotients
CartierDual.isLocalRing_and_isLocalRing_cartierDual_of_bialgHom_surjective_univ0 below · depth 20 - Faithfulness of the Dieudonné module map
Deformation.DieudonneModule.eq_of_map_eq_of_isLocalRing_cartierDual51 below · depth 20 - Fullness of the Dieudonné module functor over 𝔽ₚ
Deformation.DieudonneModule.exists_map_eq_of_isLocalRing_cartierDual56 below · depth 20 - Cokernel of Frobenius counts the Dieudonné module of B
Deformation.DieudonneModule.natCard_quot_range_frobenius_eq_natCard_of_ker_eq_map_frobenius_ker_counit_zmodp50 below · depth 20 - Lifting Fontaine-compatible points of unipotent p-divisible groups over ℤₚ
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_of_forall_ker_eq_torsionIdeal_zmodp169 below · depth 20 - Fontaine's theorem: unipotent p-group schemes as kernels over ℤₚ
Deformation.exists_pDivisibleTower_surjective_ker_eq_map_of_isLocalRing_cartierDual_zmodp278 below · depth 20 - Primitives of the Cartier dual compute the cotangent rank
HopfAlgebra.finrank_primitives_cartierDual_eq_finrank_cotangentSpace0 below · depth 20 - Unipotent models of locally flat first-order deformations of ρ̄
ResidualGaloisRep.exists_unipotent_model_of_isLocallyFlatCocycleAd_of_isLocalRing_cartierDual71 below · depth 20 - Unipotent Hopf algebras: order p^L and Dieudonné module bound
Deformation.DieudonneModule.exists_finrank_eq_pow_and_natCard_le_pow_of_isLocalRing_cartierDual15 below · depth 21 - Fontaine's submodule surjects along a Hopf algebra quotient
Deformation.DieudonneModule.exists_mem_fontaineHodge_map_eq_of_isLocalRing_cartierDual56 below · depth 21 - Exactness of the Dieudonné module functor at a kernel
Deformation.DieudonneModule.map_surjective_and_exact_map_of_ker_eq_map_ker_counit49 below · depth 21 - Witt coordinates generate a unipotent finite Hopf algebra
Deformation.adjoin_coeff_wittHom_eq_top_of_isLocalRing_cartierDual49 below · depth 21 - Fontaine's lifting criterion for maps from F[p^v]
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_of_mvFormalGroup40 below · depth 21 - Fontaine's fourth step for unipotent groups over mathbf Zₚ
Deformation.exists_pDivisibleTower_ker_eq_map_bijective_baseChange_of_isLocalRing_cartierDual_zmodp275 below · depth 21 - Fontaine's fifth step: isomorphism detected on the special fibre
HopfAlgebra.bijective_and_exists_bialgHom_eq_of_baseChange_eq_of_isLocalRing_cartierDual2 below · depth 21 - Connected–étale splitting in Hopf form over p-adically complete 𝒪
HopfAlgebra.exists_formallyEtale_bialgHom_faithfullyFlat_ker_eq_map_ker_counit_zmodp23 below · depth 21 - Tangent–cotangent duality with operators for finite Hopf algebras
HopfAlgebra.finrank_primitives_quot_iSup_map_eq_finrank_iInf_ker_mapCotangent_cartierDual0 below · depth 21 - No cyclotomic p-torsion point with unipotent special fibre
HopfAlgebra.point_eq_one_of_forall_mem_inertiaSubgroupIn_eq_pow_of_isLocalRing_cartierDual_padicInt45 below · depth 21 - Hecke-equivariant Cartier self-duality of J₀(N)[p]
ModularCurve.exists_bialgEquiv_cartierDual_baseChange_model_jZero_torsion_comp_map_eq692 below · depth 21 - Integral rescaled exponential under a local Cartier dual
MvFormalGroup.exists_rescaledExp_tendsto_zero_of_isLocalRing_cartierDual25 below · depth 21 - Connected component of a level as formal group p^v-torsion
PDivisibleGroup.exists_connectedComponent_mvFormalGroup_of_isLocalRing_cartierDual77 below · depth 21 - Fontaine's fourth step for unipotent groups over 𝒪
Deformation.exists_pDivisibleTower_ker_eq_map_bijective_map_comp_mem_fontaineKer_of_isLocalRing_cartierDual_zmodp274 below · depth 22 - Rescaled-logarithm Witt vectors lie in `wittHom` and `fontaineKer`
Deformation.exists_wittVector_ghostComponent_truncate_map_mem_wittHom_fontaineKer_of_mvFormalGroup37 below · depth 22 - Witt-orthogonal and unipotent parts of a finite commutative Hopf algebra
HopfAlgebra.exists_wittOrthogonal_unipotent_splitting_of_perfectField1 below · depth 22 - Triviality of the Gal(L/ℚ)-action on the toric part
ModularCurve.XOneP.eq_of_galois_of_postComp_eq_one_points_specialFibre_of_gaussReading_twoChartModel_x1_mul_of_abelJacobi1,268 below · depth 22 - Uₚ on the étale component J_E of the special fibre
ModularCurve.XOneP.exists_addEquiv_proj_snd_eq_of_pts_reduction_heckeGenOne_of_normFreePart_of_eichlerShimura_twoChartModel_x1_mul2 below · depth 22 - Uₚ on the second Picard factor of the special fibre
ModularCurve.XOneP.exists_postComp_heckeGenOne_eq_apply_postComp_and_map_mul_and_bijective_points_snd_specialFibre_of_factors_normFreePart_of_gaussReading_twoChartModel_x1_mul3,528 below · depth 22 - Galois acts trivially on C₁, through a diamond on C₂
ModularCurve.XOneP.postComp_pullbackHom_galois_eq_and_postComp_diamond_comp_galoisInv_eq_of_gaussReading_specialFibre_twoChartModel_x1_mul_of_abelJacobi1,265 below · depth 22 - Integral rescaled exponential for unipotent p^v-torsion, case p=2
MvFormalGroup.exists_rescaledExp_tendsto_zero_of_isLocalRing_cartierDual_of_eq_two22 below · depth 22 - Connected part of a unipotent p-divisible tower as a formal group
PDivisibleGroup.exists_mvFormalGroup_connectedComponent_tower_of_isLocalRing_cartierDual76 below · depth 22 - Dieudonné isomorphisms over Fₚ come from bialgebra isomorphisms
Deformation.DieudonneModule.exists_bijective_map_eq_of_addEquiv_of_isLocalRing_cartierDual61 below · depth 23 - Realising Honda systems by unipotent p-divisible towers
Deformation.HondaSystem.exists_pDivisibleTower_dieudonneModule_of_range_pow_le180 below · depth 23 - Morphisms of Honda systems come from p-divisible towers
Deformation.HondaSystem.exists_towerHom_map_comp_eq_comp_of_map_L_le181 below · depth 23 - Honda system of an isogeny kernel as a cokernel
Deformation.HondaSystem.map_comp_surjective_and_ker_and_fontaineHodge_eq_of_ker_eq_map_ker_counit62 below · depth 23 - Scaled truncations of the logarithm land in p^N R
Deformation.map_scaledLogTrunc_mem_span_pow_of_mvFormalGroup1 below · depth 23 - Truncated logarithm covectors are additive modulo p
Deformation.truncate_map_mem_wittHom_of_forall_coeff_ghostComponent_eq_logCovector35 below · depth 23 - Pinned Galois transport on relative Pic⁰ equals τ(s)
ModularCurve.XOneP.galoisHom_eq_of_classifies_rigidify_pullback_of_modelHom_inv_twoChartModel_x1_mul_of_abelJacobi173 below · depth 23 - Nilpotence of the Hasse–Witt matrix of [p]_F
MvFormalGroup.isNilpotent_hasseWittMatrix_nthSeries_of_isLocalRing_cartierDual11 below · depth 23 - Connected components of a unipotent p-divisible tower
PDivisibleGroup.exists_connectedComponent_tower_of_isLocalRing_cartierDual17 below · depth 23 - Realising a Dieudonné datum by a p-divisible tower over Fₚ
Deformation.DieudonneDatum.exists_pDivisibleTower_zmod_dieudonneModule_of_range_pow_le71 below · depth 24 - Fontaine lifting of a unipotent p-divisible tower over mathbf Fₚ
Deformation.HondaSystem.exists_pDivisibleTower_bijective_map_mem_fontaineHodge_of_pDivisibleTower_zmod159 below · depth 24 - Far Witt components of the logarithm covector lie in pR
Deformation.map_coeff_mem_span_of_forall_coeff_ghostComponent_eq_logCovector26 below · depth 24 - Lifting a bialgebra map along a unipotent finite flat Hopf algebra
HopfAlgebra.exists_bialgHom_eq_of_baseChange_eq_of_isLocalRing_cartierDual2 below · depth 24 - Connected component of a unipotent finite flat Hopf algebra over ℤₚ
HopfAlgebra.exists_connectedComponent_of_isLocalRing_cartierDual_zmodp8 below · depth 24 - Hasse–Witt relation for point derivations on the Cartier dual
MvFormalGroup.exists_cartierDual_derivation_pow_eq_sum_hasseWitt_smul9 below · depth 24 - Basis independence, naturality and bimultiplicativity of the Cartier pairing
CartierDual.basisPairing_eq_and_map_convMul_and_comp_and_transpose0 below · depth 25 - Exactness of Cartier duality for a Hopf quotient
CartierDual.forall_hopfKer_apply_eq_zero_iff_mem_map_ker_counit5 below · depth 25 - p-th convolution power of an ε-derivation
CartierDual.pow_char_apply_mul_of_apply_mul0 below · depth 25 - Finite Dieudonné datum with nilpotent V comes from a Hopf algebra
Deformation.DieudonneDatum.exists_hopfAlgebra_zmod_addEquiv_dieudonneModule_of_isNilpotent69 below · depth 25 - Unique split coordinates of a continuous point of Fontaine's functor
Deformation.HondaSystem.existsUnique_coords_of_mem_fontaineFunctor_of_splitCoordinates70 below · depth 25 - Existence in Fontaine's functor with prescribed split coordinates
Deformation.HondaSystem.exists_mem_fontaineFunctor_of_coords_of_splitCoordinates61 below · depth 25 - Lifted formal group law and its extension cocycle
Deformation.HondaSystem.exists_mvFormalGroup_cocycle_of_splitCoordinates66 below · depth 25 - Fontaine's lifting theorem from split coordinates and a cocycle
Deformation.HondaSystem.exists_pDivisibleTower_bijective_map_mem_fontaineHodge_of_splitCoordinates_of_cocycle35 below · depth 25 - Existence of lawful split coordinates in normal form
Deformation.HondaSystem.exists_splitCoordinates_lawful_normalForm111 below · depth 25 - Uniqueness of a point derivation from its values on coordinates
MvFormalGroup.cartierDual_eq_of_forall_apply_tmul_eq_of_map_mul0 below · depth 25 - Convolution powers of a point derivation as iterated invariant derivatives
MvFormalGroup.cartierDual_pow_apply_tmul_eq_algebraMap_constantCoeff_iterate3 below · depth 25 - Coordinate point derivations in the Cartier dual of 𝔽ₚ ⊗ R
MvFormalGroup.exists_cartierDual_apply_tmul_eq_and_map_mul_of_ker_eq_span_nthSeries3 below · depth 25 - Points of a unipotent group scheme as F,V-maps of Dieudonné modules
Deformation.DieudonneModule.eval_injective_and_exists_eval_eq_of_isLocalRing_cartierDual58 below · depth 26 - Reduction of Φ modulo p equals Φ₀
Deformation.HondaSystem.SplitCoordinates.map_eq_phi0_of_forall_exists_convMul_apply_kappa_X0 below · depth 26 - Naturality of the Fontaine functor in the test algebra
Deformation.HondaSystem.SplitCoordinates.map_mem_fontaineFunctor_and_described2 below · depth 26 - Special fibre of the twisted tower: Gᶜᵥ⊗ G^eᵥ≅𝔽ₚ⊗ Lᵥ
Deformation.HondaSystem.exists_bijective_tensorProduct_specialFibre_of_cocycle2 below · depth 26 - Fontaine's normalised coordinates on the connected factor
Deformation.HondaSystem.exists_mvFormalGroup_basis_coeff_eq_normalForm93 below · depth 26 - Rank of the connected Fitting summand equals connected height
Deformation.HondaSystem.finrank_eq_of_isCompl_of_bijective_tensorProduct_comul59 below · depth 26 - Fontaine–Hodge membership at a twisted Tate level
Deformation.HondaSystem.map_apply_basis_mem_fontaineHodge_of_cocycle3 below · depth 26 - Bialgebras generated by Witt coordinates have local Cartier dual
Deformation.convPow_eq_zero_and_isLocalRing_cartierDual_of_adjoin_coeff_wittHom_eq_top1 below · depth 26 - Maximal multiplicative-type quotient of a finite flat Hopf algebra
HopfAlgebra.exists_bialgHom_surjective_etale_cartierDual_forall_existsUnique_comp_eq_of_henselianLocalRing17 below · depth 26 - Idempotents in the ideal (F,V) have ordinary image
HopfAlgebra.exists_split_idempotent_bijective_tensorProduct_isReduced_cartierDual_of_cartierDualMap_eq_frobenius_conv_verschiebung7 below · depth 26 - Two-step special-fibre tower of the Raynaud quotient with descended Uₚ
ModularCurve.exists_twoStepTower_raynaudQuotient_descent_finPts_jHNeronObjectAtP_of_finPtsWitness_of_bridgePins2,702 below · depth 26 - A Frobenius–Verschiebung identity for φ^∨ on the special fibre
PDivisibleGroup.cartierDualMap_pow_eq_frobenius_conv_verschiebung_of_multiplicative_sub_of_verschiebung_sub_frobenius_quotient6 below · depth 26 - Ordinarity of a p-divisible tower detected at level one
PDivisibleGroup.forall_exists_bijective_tensorProduct_isReduced_cartierDual_of_level_one_zmodp50 below · depth 26 - Fontaine's linear parts λ₀,λ₁ with nilpotent C
Deformation.HondaSystem.exists_linearMap_surjective_mulVec_isNilpotent_coeff_eq65 below · depth 27 - Trivial Cartier pairing with points factoring through an étale dual
HopfAlgebra.apply_ofDual_eq_one_of_eq_comp_of_forall_sub_apply_one_mem_maximalIdeal_of_henselianLocalRing1 below · depth 27 - Dualising an étale quotient of the Cartier dual
HopfAlgebra.exists_bialgHom_surjective_etale_cartierDual_forall_existsUnique_comp_eq_of_bialgHom_injective_cartierDual2 below · depth 27 - Identity-component Hopf quotient over a henselian local base
HopfAlgebra.exists_bialgHom_surjective_isLocalRing_tensorProduct_forall_point_comp_eq_of_henselianLocalRing3 below · depth 27 - Ordinary normal form descends to the residue field of P
HopfAlgebra.exists_bijective_tensorProduct_isReduced_cartierDual_residueField_of_zmodp_valuationSubring_of_isCocomm1 below · depth 27 - Formal P-points factor through the multiplicative quotient
HopfAlgebra.exists_eq_comp_of_forall_sub_counit_mem_maximalIdeal_of_bijective_tensorProduct_isReduced_valuationSubring16 below · depth 27 - Ordinarity forces the unit component to be of multiplicative type
HopfAlgebra.isReduced_cartierDual_of_bijective_tensorProduct_isReduced_cartierDual_of_bijective_tensorProduct_comul_zmodp1 below · depth 27 - Connected Hopf quotients of ordinary Hopf algebras over 𝔽ₚ
HopfAlgebra.isReduced_cartierDual_of_surjective_of_isLocalRing_of_bijective_tensorProduct_isReduced0 below · depth 27 - Dual of a Hopf order is a Hopf order of the Cartier dual
HopfOrder.exists_dual_hopfOrder0 below · depth 27 - The predual of a Hopf order of the Cartier dual
HopfOrder.exists_predual_hopfOrder0 below · depth 27 - Integrality against the dual lattice forces membership
HopfOrder.mem_of_forall_mem_dual_apply_mem_range0 below · depth 27 - Frobenius and Verschiebung on the p-divisible levels mod p
ModularCurve.JHNeronObjectAtP.LevelData.restrict_frobenius_eq_pow_and_cartierDual_map_restrict_verschiebung_eq_pow_of_abelianSchemePropertyBundle9 below · depth 27
… and 35 more statements (search for the module name to find them).