The lattice structure on submodule
s #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines the lattice structure on submodules, submodule.complete_lattice
, with ⊥
defined as {0}
and ⊓
defined as intersection of the underlying carrier.
If p
and q
are submodules of a module, p ≤ q
means that p ⊆ q
.
Many results about operations on this lattice structure are defined in linear_algebra/basic.lean
,
most notably those which use span
.
Implementation notes #
This structure should match the add_submonoid.complete_lattice
structure, and we should try
to unify the APIs where possible.
The set {0}
is the bottom element of the lattice of submodules.
Equations
Equations
- submodule.unique_bot = {to_inhabited := infer_instance ⊥.inhabited, uniq := _}
The bottom submodule is linearly equivalent to punit as an R
-module.
The universal set is the top element of the lattice of submodules.
The top submodule is linearly equivalent to the module.
This is the module version of add_submonoid.top_equiv
.
Equations
- submodule.complete_lattice = {sup := λ (a b : submodule R M), has_Inf.Inf {x : submodule R M | a ≤ x ∧ b ≤ x}, le := partial_order.le set_like.partial_order, lt := partial_order.lt set_like.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := has_inf.inf submodule.has_inf, inf_le_left := _, inf_le_right := _, le_inf := _, Sup := λ (tt : set (submodule R M)), has_Inf.Inf {t : submodule R M | ∀ (t' : submodule R M), t' ∈ tt → t' ≤ t}, le_Sup := _, Sup_le := _, Inf := has_Inf.Inf submodule.has_Inf, Inf_le := _, le_Inf := _, top := order_top.top submodule.order_top, bot := order_bot.bot submodule.order_bot, le_top := _, bot_le := _}
Note that submodule.mem_supr
is provided in linear_algebra/basic.lean
.
An additive submonoid is equivalent to a ℕ-submodule.
Equations
- add_submonoid.to_nat_submodule = {to_equiv := {to_fun := λ (S : add_submonoid M), {carrier := S.carrier, add_mem' := _, zero_mem' := _, smul_mem' := _}, inv_fun := submodule.to_add_submonoid add_comm_monoid.nat_module, left_inv := _, right_inv := _}, map_rel_iff' := _}
An additive subgroup is equivalent to a ℤ-submodule.
Equations
- add_subgroup.to_int_submodule = {to_equiv := {to_fun := λ (S : add_subgroup M), {carrier := S.carrier, add_mem' := _, zero_mem' := _, smul_mem' := _}, inv_fun := submodule.to_add_subgroup (add_comm_group.int_module M), left_inv := _, right_inv := _}, map_rel_iff' := _}