mathlib documentation

field_theory.subfield

Subfields

Let K be a field. This file defines the "bundled" subfield type subfield K, a type whose terms correspond to subfields of K. This is the preferred way to talk about subfields in mathlib. Unbundled subfields (s : set K and is_subfield 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 R to subfield R, sending a subset of R to the subfield it generates, and prove that it is a Galois insertion.

Main definitions

Notation used here:

(K : Type u) [field K] (L : Type u) [field L] (f g : K →+* L) (A : subfield K) (B : subfield L) (s : set K)

Implementation notes

A subfield is implemented as a subring which is 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

def subfield.to_subring {K : Type u} [field K] (s : subfield K) :

Reinterpret a subfield as a subring.

structure subfield (K : Type u) [field K] :
Type u

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.

def subfield.to_add_subgroup {K : Type u} [field K] (s : subfield K) :

The underlying add_subgroup of a subfield.

Equations
def subfield.to_submonoid {K : Type u} [field K] (s : subfield K) :

The underlying submonoid of a subfield.

Equations
@[instance]
def subfield.has_coe {K : Type u} [field K] :

Equations
@[simp]
theorem subfield.coe_to_subring {K : Type u} [field K] (s : subfield K) :

@[instance]

Equations
@[instance]
def subfield.has_mem {K : Type u} [field K] :

Equations
@[simp]
theorem subfield.mem_mk {K : Type u} [field K] (s : set K) (ho : 1 ∈ s) (hm : ∀ {a b : K}, a ∈ s → b ∈ s → a * b ∈ s) (hz : 0 ∈ s) (ha : ∀ {a b : K}, a ∈ s → b ∈ s → a + b ∈ s) (hn : ∀ {x : K}, x ∈ s → -x ∈ s) (hi : ∀ (x : K), x ∈ s → x⁻¹ ∈ s) (x : K) :
x ∈ {carrier := s, one_mem' := ho, mul_mem' := hm, zero_mem' := hz, add_mem' := ha, neg_mem' := hn, inv_mem' := hi} ↔ x ∈ s

@[simp]
theorem subfield.mem_to_subring {K : Type u} [field K] (s : subfield K) (x : K) :

theorem subfield.exists {K : Type u} [field K] {s : subfield K} {p : ↥s → Prop} :
(∃ (x : ↥s), p x) ↔ ∃ (x : K) (H : x ∈ s), p ⟨x, H⟩

theorem subfield.forall {K : Type u} [field K] {s : subfield K} {p : ↥s → Prop} :
(∀ (x : ↥s), p x) ↔ ∀ (x : K) (H : x ∈ s), p ⟨x, H⟩

def subring.to_subfield {K : Type u} [field K] (s : subring K) (hinv : ∀ (x : K), x ∈ s → x⁻¹ ∈ s) :

A subring containing inverses is a subfield.

Equations
theorem subfield.ext' {K : Type u} [field K] ⦃s t : subfield K⦄ (h : ↑s = ↑t) :
s = t

Two subfields are equal if the underlying subsets are equal.

theorem subfield.ext'_iff {K : Type u} [field K] {s t : subfield K} :
s = t ↔ ↑s = ↑t

Two subfields are equal if and only if the underlying subsets are equal.

@[ext]
theorem subfield.ext {K : Type u} [field K] {S T : subfield K} (h : ∀ (x : K), x ∈ S ↔ x ∈ T) :
S = T

Two subfields are equal if they have the same elements.

theorem subfield.one_mem {K : Type u} [field K] (s : subfield K) :
1 ∈ s

A subfield contains the ring's 1.

theorem subfield.zero_mem {K : Type u} [field K] (s : subfield K) :
0 ∈ s

A subfield contains the ring's 0.

theorem subfield.mul_mem {K : Type u} [field K] (s : subfield K) {x y : K} (a : x ∈ s) (a_1 : y ∈ s) :
x * y ∈ s

A subfield is closed under multiplication.

theorem subfield.add_mem {K : Type u} [field K] (s : subfield K) {x y : K} (a : x ∈ s) (a_1 : y ∈ s) :
x + y ∈ s

A subfield is closed under addition.

theorem subfield.neg_mem {K : Type u} [field K] (s : subfield K) {x : K} (a : x ∈ s) :
-x ∈ s

A subfield is closed under negation.

theorem subfield.sub_mem {K : Type u} [field K] (s : subfield K) {x y : K} (a : x ∈ s) (a_1 : y ∈ s) :
x - y ∈ s

A subfield is closed under subtraction.

theorem subfield.inv_mem {K : Type u} [field K] (s : subfield K) {x : K} (a : x ∈ s) :

A subfield is closed under inverses.

theorem subfield.div_mem {K : Type u} [field K] (s : subfield K) {x y : K} (hx : x ∈ s) (hy : y ∈ s) :
x / y ∈ s

A subfield is closed under division.

theorem subfield.list_prod_mem {K : Type u} [field K] (s : subfield K) {l : list K} (a : ∀ (x : K), x ∈ l → x ∈ s) :
l.prod ∈ s

Product of a list of elements in a subfield is in the subfield.

theorem subfield.list_sum_mem {K : Type u} [field K] (s : subfield K) {l : list K} (a : ∀ (x : K), x ∈ l → x ∈ s) :
l.sum ∈ s

Sum of a list of elements in a subfield is in the subfield.

theorem subfield.multiset_prod_mem {K : Type u} [field K] (s : subfield K) (m : multiset K) (a : ∀ (a : K), a ∈ m → a ∈ s) :
m.prod ∈ s

Product of a multiset of elements in a subfield is in the subfield.

theorem subfield.multiset_sum_mem {K : Type u} [field K] (s : subfield K) (m : multiset K) (a : ∀ (a : K), a ∈ m → a ∈ s) :
m.sum ∈ s

Sum of a multiset of elements in a subfield is in the subfield.

theorem subfield.prod_mem {K : Type u} [field K] (s : subfield K) {ι : Type u_1} {t : finset ι} {f : ι → K} (h : ∀ (c : ι), c ∈ t → f c ∈ s) :
∏ (i : ι) in t, f i ∈ s

Product of elements of a subfield indexed by a finset is in the subfield.

theorem subfield.sum_mem {K : Type u} [field K] (s : subfield K) {ι : Type u_1} {t : finset ι} {f : ι → K} (h : ∀ (c : ι), c ∈ t → f c ∈ s) :
∑ (i : ι) in t, f i ∈ s

Sum of elements in a subfield indexed by a finset is in the subfield.

theorem subfield.pow_mem {K : Type u} [field K] (s : subfield K) {x : K} (hx : x ∈ s) (n : ℕ) :
x ^ n ∈ s

theorem subfield.gsmul_mem {K : Type u} [field K] (s : subfield K) {x : K} (hx : x ∈ s) (n : ℤ) :
n •ℤ x ∈ s

theorem subfield.coe_int_mem {K : Type u} [field K] (s : subfield K) (n : ℤ) :
↑n ∈ s

@[simp]
theorem subfield.coe_add {K : Type u} [field K] (s : subfield K) (x y : ↥s) :
↑(x + y) = ↑x + ↑y

@[simp]
theorem subfield.coe_neg {K : Type u} [field K] (s : subfield K) (x : ↥s) :

@[simp]
theorem subfield.coe_mul {K : Type u} [field K] (s : subfield K) (x y : ↥s) :
↑x * y = (↑x) * ↑y

@[simp]
theorem subfield.coe_inv {K : Type u} [field K] (s : subfield K) (x : ↥s) :

@[simp]
theorem subfield.coe_zero {K : Type u} [field K] (s : subfield K) :
↑0 = 0

@[simp]
theorem subfield.coe_one {K : Type u} [field K] (s : subfield K) :
↑1 = 1

def subfield.subtype {K : Type u} [field K] (s : subfield K) :

The embedding from a subfield of the field K to K.

Equations
@[simp]
theorem subfield.coe_subtype {K : Type u} [field K] (s : subfield K) :

Partial order

@[instance]
def subfield.partial_order {K : Type u} [field K] :

Equations
theorem subfield.le_def {K : Type u} [field K] {s t : subfield K} :
s ≤ t ↔ ∀ ⦃x : K⦄, x ∈ s → x ∈ t

@[simp]
theorem subfield.coe_subset_coe {K : Type u} [field K] {s t : subfield K} :
↑s ⊆ ↑t ↔ s ≤ t

@[simp]
theorem subfield.coe_ssubset_coe {K : Type u} [field K] {s t : subfield K} :
↑s ⊂ ↑t ↔ s < t

@[simp]
theorem subfield.mem_coe {K : Type u} [field K] {s : subfield K} {m : K} :
m ∈ ↑s ↔ m ∈ s

@[simp]
theorem subfield.coe_coe {K : Type u} [field K] (s : subfield K) :

@[simp]
theorem subfield.mem_to_submonoid {K : Type u} [field K] {s : subfield K} {x : K} :

@[simp]
theorem subfield.coe_to_submonoid {K : Type u} [field K] (s : subfield K) :

@[simp]
theorem subfield.mem_to_add_subgroup {K : Type u} [field K] {s : subfield K} {x : K} :

@[simp]
theorem subfield.coe_to_add_subgroup {K : Type u} [field K] (s : subfield K) :

top

@[instance]
def subfield.has_top {K : Type u} [field K] :

The subfield of K containing all elements of K.

Equations
@[instance]
def subfield.inhabited {K : Type u} [field K] :

Equations
@[simp]
theorem subfield.mem_top {K : Type u} [field K] (x : K) :

@[simp]
theorem subfield.coe_top {K : Type u} [field K] :

comap

def subfield.comap {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : subfield L) :

The preimage of a subfield along a ring homomorphism is a subfield.

Equations
@[simp]
theorem subfield.coe_comap {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : subfield L) :

@[simp]
theorem subfield.mem_comap {K : Type u} {L : Type v} [field K] [field L] {s : subfield L} {f : K →+* L} {x : K} :

theorem subfield.comap_comap {K : Type u} {L : Type v} {M : Type w} [field K] [field L] [field M] (s : subfield M) (g : L →+* M) (f : K →+* L) :

map

def subfield.map {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : subfield K) :

The image of a subfield along a ring homomorphism is a subfield.

Equations
@[simp]
theorem subfield.coe_map {K : Type u} {L : Type v} [field K] [field L] (s : subfield K) (f : K →+* L) :

@[simp]
theorem subfield.mem_map {K : Type u} {L : Type v} [field K] [field L] {f : K →+* L} {s : subfield K} {y : L} :
y ∈ subfield.map f s ↔ ∃ (x : K) (H : x ∈ s), ⇑f x = y

theorem subfield.map_map {K : Type u} {L : Type v} {M : Type w} [field K] [field L] [field M] (s : subfield K) (g : L →+* M) (f : K →+* L) :

theorem subfield.map_le_iff_le_comap {K : Type u} {L : Type v} [field K] [field L] {f : K →+* L} {s : subfield K} {t : subfield L} :

theorem subfield.gc_map_comap {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

range

def ring_hom.field_range {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

The range of a ring homomorphism, as a subfield of the target.

Equations
@[simp]
theorem ring_hom.coe_field_range {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

@[simp]
theorem ring_hom.mem_field_range {K : Type u} {L : Type v} [field K] [field L] {f : K →+* L} {y : L} :
y ∈ f.range ↔ ∃ (x : K), ⇑f x = y

theorem ring_hom.map_field_range {K : Type u} {L : Type v} {M : Type w} [field K] [field L] [field M] (g : L →+* M) (f : K →+* L) :

inf

@[instance]
def subfield.has_inf {K : Type u} [field K] :

The inf of two subfields is their intersection.

Equations
@[simp]
theorem subfield.coe_inf {K : Type u} [field K] (p p' : subfield K) :
↑(p ⊓ p') = ↑p ∩ ↑p'

@[simp]
theorem subfield.mem_inf {K : Type u} [field K] {p p' : subfield K} {x : K} :
x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p'

@[instance]
def subfield.has_Inf {K : Type u} [field K] :

Equations
@[simp]
theorem subfield.coe_Inf {K : Type u} [field K] (S : set (subfield K)) :
↑(Inf S) = ⋂ (s : subfield K) (H : s ∈ S), ↑s

theorem subfield.mem_Inf {K : Type u} [field K] {S : set (subfield K)} {x : K} :
x ∈ Inf S ↔ ∀ (p : subfield K), p ∈ S → x ∈ p

@[simp]
theorem subfield.Inf_to_subring {K : Type u} [field K] (s : set (subfield K)) :
(Inf s).to_subring = ⨅ (t : subfield K) (H : t ∈ s), t.to_subring

theorem subfield.is_glb_Inf {K : Type u} [field K] (S : set (subfield K)) :
is_glb S (Inf S)

subfield closure of a subset

def subfield.closure {K : Type u} [field K] (s : set K) :

The subfield generated by a set.

Equations
theorem subfield.mem_closure_iff {K : Type u} [field K] {s : set K} {x : K} :
x ∈ subfield.closure s ↔ ∃ (y : K) (H : y ∈ subring.closure s) (z : K) (H : z ∈ subring.closure s), y / z = x

@[simp]
theorem subfield.subset_closure {K : Type u} [field K] {s : set K} :

The subfield generated by a set includes the set.

theorem subfield.mem_closure {K : Type u} [field K] {x : K} {s : set K} :
x ∈ subfield.closure s ↔ ∀ (S : subfield K), s ⊆ ↑S → x ∈ S

@[simp]
theorem subfield.closure_le {K : Type u} [field K] {s : set K} {t : subfield K} :

A subfield t includes closure s if and only if it includes s.

theorem subfield.closure_mono {K : Type u} [field K] ⦃s t : set K⦄ (h : s ⊆ t) :

Subfield closure of a set is monotone in its argument: if s ⊆ t, then closure s ≤ closure t.

theorem subfield.closure_eq_of_le {K : Type u} [field K] {s : set K} {t : subfield K} (h₁ : s ⊆ ↑t) (h₂ : t ≤ subfield.closure s) :

theorem subfield.closure_induction {K : Type u} [field K] {s : set K} {p : K → Prop} {x : K} (h : x ∈ subfield.closure s) (Hs : ∀ (x : K), x ∈ s → p x) (H1 : p 1) (Hadd : ∀ (x y : K), p x → p y → p (x + y)) (Hneg : ∀ (x : K), p x → p (-x)) (Hinv : ∀ (x : K), p x → p x⁻¹) (Hmul : ∀ (x y : K), p x → p y → p (x * y)) :
p x

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
theorem subfield.closure_eq {K : Type u} [field K] (s : subfield K) :

Closure of a subfield S equals S.

@[simp]
theorem subfield.closure_empty {K : Type u} [field K] :

@[simp]

theorem subfield.closure_Union {K : Type u} [field K] {ι : Sort u_1} (s : ι → set K) :
subfield.closure (⋃ (i : ι), s i) = ⨆ (i : ι), subfield.closure (s i)

theorem subfield.closure_sUnion {K : Type u} [field K] (s : set (set K)) :
subfield.closure (⋃₀s) = ⨆ (t : set K) (H : t ∈ s), subfield.closure t

theorem subfield.map_sup {K : Type u} {L : Type v} [field K] [field L] (s t : subfield K) (f : K →+* L) :

theorem subfield.map_supr {K : Type u} {L : Type v} [field K] [field L] {ι : Sort u_1} (f : K →+* L) (s : ι → subfield K) :
subfield.map f (supr s) = ⨆ (i : ι), subfield.map f (s i)

theorem subfield.comap_inf {K : Type u} {L : Type v} [field K] [field L] (s t : subfield L) (f : K →+* L) :

theorem subfield.comap_infi {K : Type u} {L : Type v} [field K] [field L] {ι : Sort u_1} (f : K →+* L) (s : ι → subfield L) :
subfield.comap f (infi s) = ⨅ (i : ι), subfield.comap f (s i)

@[simp]
theorem subfield.map_bot {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

@[simp]
theorem subfield.comap_top {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

theorem subfield.mem_supr_of_directed {K : Type u} [field K] {ι : Sort u_1} [hι : nonempty ι] {S : ι → subfield K} (hS : directed has_le.le S) {x : K} :
(x ∈ ⨆ (i : ι), S i) ↔ ∃ (i : ι), x ∈ S i

The underlying set of a non-empty directed Sup 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)

theorem subfield.coe_supr_of_directed {K : Type u} [field K] {ι : Sort u_1} [hι : nonempty ι] {S : ι → subfield K} (hS : directed has_le.le S) :
(↑⨆ (i : ι), S i) = ⋃ (i : ι), ↑(S i)

theorem subfield.mem_Sup_of_directed_on {K : Type u} [field K] {S : set (subfield K)} (Sne : S.nonempty) (hS : directed_on has_le.le S) {x : K} :
x ∈ Sup S ↔ ∃ (s : subfield K) (H : s ∈ S), x ∈ s

theorem subfield.coe_Sup_of_directed_on {K : Type u} [field K] {S : set (subfield K)} (Sne : S.nonempty) (hS : directed_on has_le.le S) :
↑(Sup S) = ⋃ (s : subfield K) (H : s ∈ S), ↑s

def ring_hom.cod_restrict_field {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : subfield L) (h : ∀ (x : K), ⇑f x ∈ s) :

Restrict the codomain of a ring homomorphism to a subfield that includes the range.

Equations
def ring_hom.restrict_field {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : subfield K) :

Restriction of a ring homomorphism to a subfield of the domain.

Equations
@[simp]
theorem ring_hom.restrict_field_apply {K : Type u} {L : Type v} [field K] [field L] {s : subfield K} (f : K →+* L) (x : ↥s) :

def ring_hom.range_restrict_field {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) :

Restriction of a ring homomorphism to its range interpreted as a subfield.

Equations
@[simp]
theorem ring_hom.coe_range_restrict_field {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (x : K) :

def ring_hom.eq_locus_field {K : Type u} {L : Type v} [field K] [field L] (f g : K →+* L) :

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
theorem ring_hom.eq_on_field_closure {K : Type u} {L : Type v} [field K] [field L] {f g : K →+* L} {s : set K} (h : set.eq_on ⇑f ⇑g s) :

If two ring homomorphisms are equal on a set, then they are equal on its subfield closure.

theorem ring_hom.eq_of_eq_on_subfield_top {K : Type u} {L : Type v} [field K] [field L] {f g : K →+* L} (h : set.eq_on ⇑f ⇑g ↑⊤) :
f = g

theorem ring_hom.eq_of_eq_on_of_field_closure_eq_top {K : Type u} {L : Type v} [field K] [field L] {s : set K} (hs : subfield.closure s = ⊤) {f g : K →+* L} (h : set.eq_on ⇑f ⇑g s) :
f = g

theorem ring_hom.field_closure_preimage_le {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : set L) :

theorem ring_hom.map_field_closure {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : set K) :

The image under a ring homomorphism of the subfield generated by a set equals the subfield generated by the image of the set.

def subfield.inclusion {K : Type u} [field K] {S T : subfield K} (h : S ≤ T) :

The ring homomorphism associated to an inclusion of subfields.

Equations
@[simp]
theorem subfield.field_range_subtype {K : Type u} [field K] (s : subfield K) :

def ring_equiv.subfield_congr {K : Type u} [field K] {s t : subfield K} (h : s = t) :

Makes the identity isomorphism from a proof two subfields of a multiplicative monoid are equal.

Equations
theorem subfield.closure_preimage_le {K : Type u} {L : Type v} [field K] [field L] (f : K →+* L) (s : set L) :