22-- The Agda standard library
33--
44-- Definition of sub-bimodules
5+ --
6+ -- This is based on Nathan van Doorn (Taneb)'s PR
7+ -- https://github.com/agda/agda-stdlib/pull/2852
8+ -- but uses the `Algebra.Construct.Sub.AbelianGroup` module
9+ -- to plumb in that any sub-bimodule of a `Bimodule` defines
10+ -- a sub-AbelianGroup, hence a `NormalSubgroup`, so that when
11+ -- an ideal in a `Ring` is defined as a suitable sub-bimodule,
12+ -- the quotient structure of the additive subgroup is immediate,
13+ -- on which the quotient `Ring` structure may then be defined.
514------------------------------------------------------------------------
615
716{-# OPTIONS --cubical-compatible --safe #-}
@@ -32,9 +41,21 @@ open import Algebra.Construct.Sub.AbelianGroup M.+ᴹ-abelianGroup
3241record Subbimodule cm′ ℓm′ : Set (cr ⊔ cs ⊔ cm ⊔ ℓm ⊔ suc (cm′ ⊔ ℓm′)) where
3342 field
3443 domain : RawBimodule R.Carrier S.Carrier cm′ ℓm′
35- ι : _ → M.Carrierᴹ
44+
45+ -- As with `Algebra.Construct.Sub.Group{.Normal}`, we refrain from explicit
46+ -- naming of the source type of the underlying function. In terms of the
47+ -- `RawBimodule` signature, this is `Carrierᴹ`, which will also be,
48+ -- definitionally, the `Carrier` of the associated `(Abelian)Group` sub-bundle
49+ -- defined by `ι.+ᴹ-isGroupMonomorphism` below.
50+
51+ ι : _ → M.Carrierᴹ -- where _ = RawBimodule.Carrierᴹ domain
52+
3653 ι-monomorphism : IsBimoduleMonomorphism domain M.rawBimodule ι
3754
55+ -- As with `Algebra.Construct.Sub.Group`, we create a module out of the
56+ -- `IsBimoduleMonomorphism` field, allowing us to expose its rich derived
57+ -- substructures, here specifically, the `+ᴹ-isGroupMonomorphism` definition.
58+
3859 module ι = IsBimoduleMonomorphism ι-monomorphism
3960
4061 bimodule : Bimodule R S _ _
@@ -48,6 +69,12 @@ record Subbimodule cm′ ℓm′ : Set (cr ⊔ cs ⊔ cm ⊔ ℓm ⊔ suc (cm′
4869 subgroup : Subgroup cm′ ℓm′
4970 subgroup = record { ι-monomorphism = ι.+ᴹ-isGroupMonomorphism }
5071
72+ -- Exporting these two fields, but *without* their types, allows us to
73+ -- avoid explicit import of `Algebra.Construct.Sub.Group.Normal`, in
74+ -- favour of their encapsulation in `Algebra.Construct.Sub.AbelianGroup`.
75+
76+ -- isNormal : Algebra.Construct.Sub.Group.Normal.IsNormal M.+ᴹ-group subgroup
5177 isNormal = AbelianSubgroup.isNormal subgroup
5278
79+ -- normalSubgroup : Algebra.Construct.Sub.Group.Normal.NormalSubgroup M.+ᴹ-group _ _
5380 normalSubgroup = AbelianSubgroup.normalSubgroup subgroup
0 commit comments