Fractional ideals
This file defines fractional ideals of an integral domain and proves basic facts about them.
Main definitions
Let S
be a submonoid of an integral domain R
, P
the localization of R
at S
, and f
the
natural ring hom from R
to P
.
is_fractional
defines whichR
-submodules ofP
are fractional idealsfractional_ideal f
is the type of fractional ideals inP
has_coe (ideal R) (fractional_ideal f)
instancecomm_semiring (fractional_ideal f)
instance: the typical ideal operations generalized to fractional idealslattice (fractional_ideal f)
instancemap
is the pushforward of a fractional ideal along an algebra morphism
Let K
be the localization of R
at R \ {0}
and g
the natural ring hom from R
to K
.
has_div (fractional_ideal g)
instance: the ideal quotientI / J
(typically written $I : J$, but a:
operator cannot be defined)
Main statements
mul_left_mono
andmul_right_mono
state that ideal multiplication is monotoneright_inverse_eq
states that1 / I
is the inverse ofI
if one exists
Implementation notes
Fractional ideals are considered equal when they contain the same elements,
independent of the denominator a : R
such that a I ⊆ R
.
Thus, we define fractional_ideal
to be the subtype of the predicate is_fractional
,
instead of having fractional_ideal
be a structure of which a
is a field.
Most definitions in this file specialize operations from submodules to fractional ideals,
proving that the result of this operation is fractional if the input is fractional.
Exceptions to this rule are defining (+) := (⊔)
and ⊥ := 0
,
in order to re-use their respective proof terms.
We can still use simp
to show I.1 + J.1 = (I + J).1
and ⊥.1 = 0.1
.
In ring_theory.localization
, we define a copy of the localization map f
's codomain P
(f.codomain
) so that the R
-algebra instance on P
can 'know' the map needed to induce
the R
-algebra structure.
We don't assume that the localization is a field until we need it to define ideal quotients.
When this assumption is needed, we replace S
with non_zero_divisors R
, making the localization
a field.
References
- https://en.wikipedia.org/wiki/Fractional_ideal
Tags
fractional ideal, fractional ideals, invertible ideal
A submodule I
is a fractional ideal if a I ⊆ R
for some a ≠ 0
.
Equations
- ring.is_fractional f I = ∃ (a : R) (H : a ∈ S), ∀ (b : P), b ∈ I → f.is_integer (⇑(f.to_map) a * b)
The fractional ideals of a domain R
are ideals of R
divided by some a ∈ R
.
More precisely, let P
be a localization of R
at some submonoid S
,
then a fractional ideal I ⊆ P
is an R
-submodule of P
,
such that there is a nonzero a : R
with a I ⊆ R
.
Equations
- ring.fractional_ideal f = {I // ring.is_fractional f I}
Equations
- ring.fractional_ideal.has_coe = {coe := λ (I : ring.fractional_ideal f), I.val}
Equations
- ring.fractional_ideal.has_mem = {mem := λ (x : P) (I : ring.fractional_ideal f), x ∈ ↑I}
Fractional ideals are equal if their submodules are equal.
Combined with submodule.ext
this gives that fractional ideals are equal if
they have the same elements.
Equations
- ring.fractional_ideal.coe_to_fractional_ideal = {coe := λ (I : ideal R), ⟨f.coe_submodule I, _⟩}
Equations
Equations
Equations
lattice
section
Defines the order on fractional ideals as inclusion of their underlying sets, and ports the lattice structure on submodules to fractional ideals.
Equations
- ring.fractional_ideal.partial_order = {le := λ (I J : ring.fractional_ideal f), I.val ≤ J.val, lt := preorder.lt._default (λ (I J : ring.fractional_ideal f), I.val ≤ J.val), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _}
Equations
- ring.fractional_ideal.order_bot = {bot := 0, le := partial_order.le ring.fractional_ideal.partial_order, lt := partial_order.lt ring.fractional_ideal.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _}
Equations
- ring.fractional_ideal.lattice = {sup := λ (I J : ring.fractional_ideal f), ⟨I.val ⊔ J.val, _⟩, le := partial_order.le ring.fractional_ideal.partial_order, lt := partial_order.lt ring.fractional_ideal.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (I J : ring.fractional_ideal f), ⟨I.val ⊓ J.val, _⟩, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- ring.fractional_ideal.semilattice_sup_bot = {bot := order_bot.bot ring.fractional_ideal.order_bot, le := order_bot.le ring.fractional_ideal.order_bot, lt := order_bot.lt ring.fractional_ideal.order_bot, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _, sup := lattice.sup ring.fractional_ideal.lattice, le_sup_left := _, le_sup_right := _, sup_le := _}
Equations
Equations
- ring.fractional_ideal.has_mul = {mul := λ (I J : ring.fractional_ideal f), ⟨I.val * J.val, _⟩}
Equations
- ring.fractional_ideal.add_comm_monoid = {add := has_add.add ring.fractional_ideal.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, add_comm := _}
Equations
- ring.fractional_ideal.comm_monoid = {mul := has_mul.mul ring.fractional_ideal.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, mul_comm := _}
Equations
- ring.fractional_ideal.comm_semiring = {add := add_comm_monoid.add ring.fractional_ideal.add_comm_monoid, add_assoc := _, zero := add_comm_monoid.zero ring.fractional_ideal.add_comm_monoid, zero_add := _, add_zero := _, add_comm := _, mul := comm_monoid.mul ring.fractional_ideal.comm_monoid, mul_assoc := _, one := comm_monoid.one ring.fractional_ideal.comm_monoid, one_mul := _, mul_one := _, zero_mul := _, mul_zero := _, left_distrib := _, right_distrib := _, mul_comm := _}
I.map g
is the pushforward of the fractional ideal I
along the algebra morphism g
Equations
- ring.fractional_ideal.map g = λ (I : ring.fractional_ideal f), ⟨submodule.map g.to_linear_map I.val, _⟩
If g
is an equivalence, map g
is an isomorphism
Equations
- ring.fractional_ideal.map_equiv g = {to_fun := ring.fractional_ideal.map ↑g, inv_fun := ring.fractional_ideal.map ↑(g.symm), left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
canonical_equiv f f'
is the canonical equivalence between the fractional
ideals in f.codomain
and in f'.codomain
Equations
- ring.fractional_ideal.canonical_equiv f f' = ring.fractional_ideal.map_equiv {to_fun := (f.ring_equiv_of_ring_equiv f' (ring_equiv.refl R) ring.fractional_ideal.canonical_equiv._proof_1).to_fun, inv_fun := (f.ring_equiv_of_ring_equiv f' (ring_equiv.refl R) ring.fractional_ideal.canonical_equiv._proof_1).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _, commutes' := _}
quotient
section
This section defines the ideal quotient of fractional ideals.
In this section we need that each non-zero y : R
has an inverse in
the localization, i.e. that the localization is a field. We satisfy this
assumption by taking S = non_zero_divisors R
, R
's localization at which
is a field because R
is a domain.
Equations
Equations
- ring.fractional_ideal.has_inv = {inv := λ (I : ring.fractional_ideal g), 1 / I}
I⁻¹
is the inverse of I
if I
has an inverse.
span_singleton x
is the fractional ideal generated by x
if 0 ∉ S
Equations
- ring.fractional_ideal.span_singleton x = ⟨submodule.span R {x}, _⟩
Equations
- _ = _