Subfields #
Let K
be a division ring, for example a field.
This file defines the "bundled" subfield type Subfield K
, a type
whose terms correspond to subfields of K
. Note we do not require the "subfields" to be
commutative, so they are really sub-division rings / skew fields. This is the preferred way to talk
about subfields in mathlib. Unbundled subfields (s : Set K
and IsSubfield s
)
are not in this file, and they will ultimately be deprecated.
We prove that subfields are a complete lattice, and that you can map
(pushforward) and
comap
(pull back) them along ring homomorphisms.
We define the closure
construction from Set K
to Subfield K
, sending a subset of K
to the subfield it generates, and prove that it is a Galois insertion.
Main definitions #
Notation used here:
(K : Type u) [DivisionRing K] (L : Type u) [DivisionRing L] (f g : K →+* L)
(A : Subfield K) (B : Subfield L) (s : Set K)
Subfield K
: the type of subfields of a division ringK
.instance : CompleteLattice (Subfield K)
: the complete lattice structure on the subfields.Subfield.closure
: subfield closure of a set, i.e., the smallest subfield that includes the set.Subfield.gi
:closure : Set M → Subfield M
and coercion(↑) : Subfield M → Set M
form aGaloisInsertion
.comap f B : Subfield K
: the preimage of a subfieldB
along the ring homomorphismf
map f A : Subfield L
: the image of a subfieldA
along the ring homomorphismf
.f.fieldRange : Subfield L
: the range of the ring homomorphismf
.eqLocusField f g : Subfield K
: given ring homomorphismsf g : K →+* R
, the subfield ofK
wheref x = g x
Implementation notes #
A subfield is implemented as a subring which is closed under ⁻¹
.
Lattice inclusion (e.g. ≤
and ⊓
) is used rather than set notation (⊆
and ∩
), although
∈
is defined as membership of a subfield's underlying set.
Tags #
subfield, subfields
SubfieldClass S K
states S
is a type of subsets s ⊆ K
closed under field operations.
Instances
A subfield contains 1
, products and inverses.
Be assured that we're not actually proving that subfields are subgroups:
SubgroupClass
is really an abbreviation of SubgroupWithOrWithoutZeroClass
.
Equations
- ⋯ = ⋯
Equations
- SubfieldClass.instNNRatCast s = { nnratCast := fun (q : ℚ≥0) => ⟨↑q, ⋯⟩ }
Equations
- SubfieldClass.instRatCast s = { ratCast := fun (q : ℚ) => ⟨↑q, ⋯⟩ }
Alias of SubfieldClass.coe_ratCast
.
Alias of SubfieldClass.ratCast_mem
.
Alias of SubfieldClass.qsmul_mem
.
Equations
- SubfieldClass.instSMulNNRat s = { smul := fun (q : ℚ≥0) (x : ↥s) => ⟨q • ↑x, ⋯⟩ }
Equations
- SubfieldClass.instSMulRat s = { smul := fun (q : ℚ) (x : ↥s) => ⟨q • ↑x, ⋯⟩ }
A subfield inherits a division ring structure
Equations
- SubfieldClass.toDivisionRing S s = Function.Injective.divisionRing Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
A subfield of a field inherits a field structure
Equations
- SubfieldClass.toField S s = Function.Injective.field Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Subfield R
is the type of subfields of R
. A subfield of R
is a subset s
that is a
multiplicative submonoid and an additive subgroup. Note in particular that it shares the
same 0 and 1 as R.
Instances For
A subfield is closed under multiplicative inverses.
The underlying AddSubgroup
of a subfield.
Equations
- s.toAddSubgroup = { toAddSubmonoid := s.toAddSubgroup.toAddSubmonoid, neg_mem' := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Two subfields are equal if they have the same elements.
Copy of a subfield with a new carrier
equal to the old one. Useful to fix definitional
equalities.
Equations
- S.copy s hs = { carrier := s, mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, neg_mem' := ⋯, inv_mem' := ⋯ }
Instances For
A subfield contains the field's 1.
A subfield contains the field's 0.
A subfield is closed under multiplication.
A subfield is closed under addition.
A subfield is closed under negation.
A subfield is closed under subtraction.
A subfield is closed under inverses.
A subfield is closed under division.
Product of a list of elements in a subfield is in the subfield.
Sum of a list of elements in a subfield is in the subfield.
Sum of a multiset of elements in a Subfield
is in the Subfield
.
Alias of intCast_mem
.
Equations
- s.instRingSubtypeMem = s.toRing
Equations
- s.toDivisionRing = Function.Injective.divisionRing Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
A subfield inherits a field structure
Equations
- s.toField = Function.Injective.field Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The embedding from a subfield of the field K
to K
.
Equations
- s.subtype = { toFun := Subtype.val, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Partial order #
top #
The subfield of K
containing all elements of K
.
comap #
The preimage of a subfield along a ring homomorphism is a subfield.
Equations
- Subfield.comap f s = { toSubring := Subring.comap f s.toSubring, inv_mem' := ⋯ }
Instances For
map #
The image of a subfield along a ring homomorphism is a subfield.
Equations
- Subfield.map f s = { toSubring := Subring.map f s.toSubring, inv_mem' := ⋯ }
Instances For
range #
The range of a ring homomorphism, as a subfield of the target. See Note [range copy pattern].
Equations
- f.fieldRange = (Subfield.map f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The range of a morphism of fields is a fintype, if the domain is a fintype.
Note that this instance can cause a diamond with Subtype.Fintype
if L
is also a fintype.
Equations
- f.fintypeFieldRange = Set.fintypeRange ⇑f
inf #
The inf of two subfields is their intersection.
Subfields of a ring form a complete lattice.
Equations
- Subfield.instCompleteLattice = CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
subfield closure of a subset #
The subfield generated by a set includes the set.
A subfield t
includes closure s
if and only if it includes s
.
Subfield closure of a set is monotone in its argument: if s ⊆ t
,
then closure s ≤ closure t
.
An induction principle for closure membership. If p
holds for 1
, and all elements
of s
, and is preserved under addition, negation, and multiplication, then p
holds for all
elements of the closure of s
.
closure
forms a Galois insertion with the coercion to set.
Equations
- Subfield.gi K = { choice := fun (s : Set K) (x : ↑(Subfield.closure s) ≤ s) => Subfield.closure s, gc := ⋯, le_l_u := ⋯, choice_eq := ⋯ }
Instances For
Closure of a subfield S
equals S
.
The underlying set of a non-empty directed sSup of subfields is just a union of the subfields. Note that this fails without the directedness assumption (the union of two subfields is typically not a subfield)
Restriction of a ring homomorphism to its range interpreted as a subfield.
Equations
- f.rangeRestrictField = f.rangeSRestrict
Instances For
The subfield of elements x : R
such that f x = g x
, i.e.,
the equalizer of f and g as a subfield of R
Equations
Instances For
If two ring homomorphisms are equal on a set, then they are equal on its subfield closure.
The image under a ring homomorphism of the subfield generated by a set equals the subfield generated by the image of the set.
The ring homomorphism associated to an inclusion of subfields.
Equations
- Subfield.inclusion h = S.subtype.codRestrict T ⋯
Instances For
Makes the identity isomorphism from a proof two subfields of a multiplicative monoid are equal.
Equations
- RingEquiv.subfieldCongr h = { toEquiv := Equiv.setCongr ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Actions by Subfield
s #
These are just copies of the definitions about Subsemiring
starting from
Subsemiring.MulAction
.
The action by a subfield is the action by the underlying field.
Equations
- F.instSMulSubtypeMem = inferInstanceAs (SMul (↥F.toSubsemiring) X)
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Note that this provides IsScalarTower F K K
which is needed by smul_mul_assoc
.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
The action by a subfield is the action by the underlying field.
Equations
- F.instMulActionSubtypeMem = inferInstanceAs (MulAction (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instDistribMulActionSubtypeMem = inferInstanceAs (DistribMulAction (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instMulDistribMulActionSubtypeMem = inferInstanceAs (MulDistribMulAction (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instSMulWithZeroSubtypeMem = inferInstanceAs (SMulWithZero (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instMulActionWithZeroSubtypeMem = inferInstanceAs (MulActionWithZero (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instModuleSubtypeMem = inferInstanceAs (Module (↥F.toSubsemiring) X)
The action by a subfield is the action by the underlying field.
Equations
- F.instMulSemiringActionSubtypeMem = inferInstanceAs (MulSemiringAction (↥F.toSubsemiring) X)