{-# OPTIONS --safe #-}
module Cubical.Algebra.Module.Submodule where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Powerset
open import Cubical.Foundations.Structure
open import Cubical.Data.Unit
open import Cubical.Algebra.Module
open import Cubical.Algebra.Ring
open import Cubical.Algebra.AbGroup
private
variable
ℓ ℓ' : Level
module _ (R : Ring ℓ) (M : LeftModule R ℓ') where
open ModuleTheory R M
open LeftModuleStr (snd M)
private
module R = RingStr (snd R)
record isSubmodule (N : ℙ ⟨ M ⟩) : Type (ℓ-max ℓ ℓ') where
field
+-closed : {x y : ⟨ M ⟩} → x ∈ N → y ∈ N → x + y ∈ N
0r-closed : 0m ∈ N
⋆-closed : {x : ⟨ M ⟩} (r : ⟨ R ⟩) → x ∈ N → r ⋆ x ∈ N
-closed : {x : ⟨ M ⟩} → x ∈ N → - x ∈ N
-closed {x = x} x∈N =
subst (_∈ N)
(((R.- R.1r) ⋆ x) ≡⟨ minusByMult x ⟩
(- x) ∎)
(⋆-closed (R.- R.1r) x∈N)
Submodule : Type _
Submodule = Σ[ N ∈ ℙ ⟨ M ⟩ ] isSubmodule N
open isSubmodule
zeroSubmodule : Submodule
fst zeroSubmodule x = (x ≡ 0m) , is-set x 0m
+-closed (snd zeroSubmodule) x≡0 y≡0 = (λ i → x≡0 i + y≡0 i) ∙ +IdL 0m
0r-closed (snd zeroSubmodule) = refl
⋆-closed (snd zeroSubmodule) r x≡0 = (λ i → r ⋆ x≡0 i) ∙ ⋆AnnihilR r
allSubmodule : Submodule
fst allSubmodule x = Unit* , isOfHLevelUnit* 1
+-closed (snd allSubmodule) _ _ = tt*
0r-closed (snd allSubmodule) = tt*
⋆-closed (snd allSubmodule) _ _ = tt*