# Subfields #

Let `K` be a division ring, for example a field. This file concerns 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)`

- `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 a `GaloisInsertion`.

- `comap f B : Subfield K` : the preimage of a subfield `B` along the ring homomorphism `f`

- `map f A : Subfield L` : the image of a subfield `A` along the ring homomorphism `f`.

- `f.fieldRange : Subfield L` : the range of the ring homomorphism `f`.

- `eqLocusField f g : Subfield K` : given ring homomorphisms `f g : K →+* R`, the subfield of `K` where `f 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

source
theorem Subfield.list_prod_mem {K : Type u} [DivisionRing K] (s : Subfield K) {l : List K} :
(∀ x ∈ l, x ∈ s) → l.prod ∈ s

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

source
theorem Subfield.list_sum_mem {K : Type u} [DivisionRing K] (s : Subfield K) {l : List K} :
(∀ x ∈ l, x ∈ s) → l.sum ∈ s

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

source
theorem Subfield.multiset_sum_mem {K : Type u} [DivisionRing K] (s : Subfield K) (m : Multiset K) :
(∀ a ∈ m, a ∈ s) → m.sum ∈ s

Sum of a multiset of elements in a `Subfield` is in the `Subfield`.

source
theorem Subfield.sum_mem {K : Type u} [DivisionRing K] (s : Subfield K) {ι : Type u_1} {t : Finset ι} {f : ι → K} (h : ∀ c ∈ t, f c ∈ s) :
∑ i ∈ t, f i ∈ s

Sum of elements in a `Subfield` indexed by a `Finset` is in the `Subfield`.

### top #

source
instance Subfield.instTop {K : Type u} [DivisionRing K] :
Top (Subfield K)

The subfield of `K` containing all elements of `K`.

Equations

- Subfield.instTop = { top := let __src := ⊤; { toSubring := __src, inv_mem' := ⋯ } }

source
instance Subfield.instInhabited {K : Type u} [DivisionRing K] :
Inhabited (Subfield K)
Equations

- Subfield.instInhabited = { default := ⊤ }

source
@[simp]
theorem Subfield.mem_top {K : Type u} [DivisionRing K] (x : K) :
x ∈ ⊤
source
@[simp]
theorem Subfield.coe_top {K : Type u} [DivisionRing K] :
↑⊤ = Set.univ
source
def Subfield.topEquiv {K : Type u} [DivisionRing K] :
↥⊤ ≃+* K

The ring equiv between the top element of `Subfield K` and `K`.

Equations

- Subfield.topEquiv = Subsemiring.topEquiv

Instances For

### comap #

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

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

source
@[simp]
theorem Subfield.coe_comap {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Subfield L) :
↑(comap f s) = ⇑f ⁻¹' ↑s
source
@[simp]
theorem Subfield.mem_comap {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {s : Subfield L} {f : K →+* L} {x : K} :
x ∈ comap f s ↔ f x ∈ s
source
theorem Subfield.comap_comap {K : Type u} {L : Type v} {M : Type w} [DivisionRing K] [DivisionRing L] [DivisionRing M] (s : Subfield M) (g : L →+* M) (f : K →+* L) :
comap f (comap g s) = comap (g.comp f) s

### map #

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

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

source
@[simp]
theorem Subfield.coe_map {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (s : Subfield K) (f : K →+* L) :
↑(map f s) = ⇑f '' ↑s
source
@[simp]
theorem Subfield.mem_map {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} {s : Subfield K} {y : L} :
y ∈ map f s ↔ ∃ x ∈ s, f x = y
source
theorem Subfield.map_map {K : Type u} {L : Type v} {M : Type w} [DivisionRing K] [DivisionRing L] [DivisionRing M] (s : Subfield K) (g : L →+* M) (f : K →+* L) :
map g (map f s) = map (g.comp f) s
source
theorem Subfield.map_le_iff_le_comap {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} {s : Subfield K} {t : Subfield L} :
map f s ≤ t ↔ s ≤ comap f t
source
theorem Subfield.gc_map_comap {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
GaloisConnection (map f) (comap f)

### range #

source
def RingHom.fieldRange {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
Subfield L

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

source
@[simp]
theorem RingHom.coe_fieldRange {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
↑f.fieldRange = Set.range ⇑f
source
@[simp]
theorem RingHom.mem_fieldRange {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} {y : L} :
y ∈ f.fieldRange ↔ ∃ (x : K), f x = y
source
theorem RingHom.fieldRange_eq_map {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
f.fieldRange = Subfield.map f ⊤
source
theorem RingHom.map_fieldRange {K : Type u} {L : Type v} {M : Type w} [DivisionRing K] [DivisionRing L] [DivisionRing M] (g : L →+* M) (f : K →+* L) :
Subfield.map g f.fieldRange = (g.comp f).fieldRange
source
theorem RingHom.mem_fieldRange_self {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (x : K) :
f x ∈ f.fieldRange
source
theorem RingHom.fieldRange_eq_top_iff {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} :
f.fieldRange = ⊤ ↔ Function.Surjective ⇑f
source
instance RingHom.fintypeFieldRange {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] [Fintype K] [DecidableEq L] (f : K →+* L) :
Fintype ↥f.fieldRange

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 #

source
instance Subfield.instMin {K : Type u} [DivisionRing K] :
Min (Subfield K)

The inf of two subfields is their intersection.

Equations

- Subfield.instMin = { min := fun (s t : Subfield K) => let __src := s.toSubring ⊓ t.toSubring; { toSubring := __src, inv_mem' := ⋯ } }

source
@[simp]
theorem Subfield.coe_inf {K : Type u} [DivisionRing K] (p p' : Subfield K) :
↑(p ⊓ p') = p.carrier ∩ p'.carrier
source
@[simp]
theorem Subfield.mem_inf {K : Type u} [DivisionRing K] {p p' : Subfield K} {x : K} :
x ∈ p ⊓ p' ↔ x ∈ p ∧ x ∈ p'
source
instance Subfield.instInfSet {K : Type u} [DivisionRing K] :
InfSet (Subfield K)
Equations

- Subfield.instInfSet = { sInf := fun (S : Set (Subfield K)) => let __src := sInf (Subfield.toSubring '' S); { toSubring := __src, inv_mem' := ⋯ } }

source
@[simp]
theorem Subfield.coe_sInf {K : Type u} [DivisionRing K] (S : Set (Subfield K)) :
↑(sInf S) = ⋂ s ∈ S, ↑s
source
theorem Subfield.mem_sInf {K : Type u} [DivisionRing K] {S : Set (Subfield K)} {x : K} :
x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p
source
@[simp]
theorem Subfield.coe_iInf {K : Type u} [DivisionRing K] {ι : Sort u_1} {S : ι → Subfield K} :
↑(⨅ (i : ι), S i) = ⋂ (i : ι), ↑(S i)
source
theorem Subfield.mem_iInf {K : Type u} [DivisionRing K] {ι : Sort u_1} {S : ι → Subfield K} {x : K} :
x ∈ ⨅ (i : ι), S i ↔ ∀ (i : ι), x ∈ S i
source
@[simp]
theorem Subfield.sInf_toSubring {K : Type u} [DivisionRing K] (s : Set (Subfield K)) :
(sInf s).toSubring = ⨅ t ∈ s, t.toSubring
source
theorem Subfield.isGLB_sInf {K : Type u} [DivisionRing K] (S : Set (Subfield K)) :
IsGLB S (sInf S)
source
instance Subfield.instCompleteLattice {K : Type u} [DivisionRing K] :
CompleteLattice (Subfield K)

Subfields of a ring form a complete lattice.

Equations

- One or more equations did not get rendered due to their size.

### subfield closure of a subset #

source
def Subfield.closure {K : Type u} [DivisionRing K] (s : Set K) :
Subfield K

The `Subfield` generated by a set.

Equations

- Subfield.closure s = sInf {S : Subfield K | s ⊆ ↑S}

Instances For

source
theorem Subfield.mem_closure {K : Type u} [DivisionRing K] {x : K} {s : Set K} :
x ∈ closure s ↔ ∀ (S : Subfield K), s ⊆ ↑S → x ∈ S
source
@[simp]
theorem Subfield.subset_closure {K : Type u} [DivisionRing K] {s : Set K} :
s ⊆ ↑(closure s)

The subfield generated by a set includes the set.

source
theorem Subfield.mem_closure_of_mem {K : Type u} [DivisionRing K] {s : Set K} {x : K} (hx : x ∈ s) :
x ∈ closure s
source
theorem Subfield.subring_closure_le {K : Type u} [DivisionRing K] (s : Set K) :
Subring.closure s ≤ (closure s).toSubring
source
theorem Subfield.notMem_of_notMem_closure {K : Type u} [DivisionRing K] {s : Set K} {P : K} (hP : P ∉ closure s) :
P ∉ s
source
@[deprecated Subfield.notMem_of_notMem_closure (since := "2025-05-23")]
theorem Subfield.not_mem_of_not_mem_closure {K : Type u} [DivisionRing K] {s : Set K} {P : K} (hP : P ∉ closure s) :
P ∉ s

Alias of `Subfield.notMem_of_notMem_closure`.

source
@[simp]
theorem Subfield.closure_le {K : Type u} [DivisionRing K] {s : Set K} {t : Subfield K} :
closure s ≤ t ↔ s ⊆ ↑t

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

source
theorem Subfield.closure_mono {K : Type u} [DivisionRing K] ⦃s t : Set K⦄ (h : s ⊆ t) :
closure s ≤ closure t

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

source
theorem Subfield.closure_eq_of_le {K : Type u} [DivisionRing K] {s : Set K} {t : Subfield K} (h₁ : s ⊆ ↑t) (h₂ : t ≤ closure s) :
closure s = t
source
theorem Subfield.closure_induction {K : Type u} [DivisionRing K] {s : Set K} {p : (x : K) → x ∈ closure s → Prop} (mem : ∀ (x : K) (hx : x ∈ s), p x ⋯) (one : p 1 ⋯) (add : ∀ (x y : K) (hx : x ∈ closure s) (hy : y ∈ closure s), p x hx → p y hy → p (x + y) ⋯) (neg : ∀ (x : K) (hx : x ∈ closure s), p x hx → p (-x) ⋯) (inv : ∀ (x : K) (hx : x ∈ closure s), p x hx → p x⁻¹ ⋯) (mul : ∀ (x y : K) (hx : x ∈ closure s) (hy : y ∈ closure s), p x hx → p y hy → p (x * y) ⋯) {x : K} (h : x ∈ closure s) :
p x h

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`.

source
def Subfield.gi (K : Type u) [DivisionRing K] :
GaloisInsertion closure SetLike.coe

`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

source
@[simp]
theorem Subfield.closure_eq {K : Type u} [DivisionRing K] (s : Subfield K) :
closure ↑s = s

Closure of a subfield `S` equals `S`.

source
@[simp]
theorem Subfield.closure_empty {K : Type u} [DivisionRing K] :
closure ∅ = ⊥
source
@[simp]
theorem Subfield.closure_univ {K : Type u} [DivisionRing K] :
closure Set.univ = ⊤
source
theorem Subfield.closure_union {K : Type u} [DivisionRing K] (s t : Set K) :
closure (s ∪ t) = closure s ⊔ closure t
source
theorem Subfield.closure_iUnion {K : Type u} [DivisionRing K] {ι : Sort u_1} (s : ι → Set K) :
closure (⋃ (i : ι), s i) = ⨆ (i : ι), closure (s i)
source
theorem Subfield.closure_sUnion {K : Type u} [DivisionRing K] (s : Set (Set K)) :
closure (⋃₀ s) = ⨆ t ∈ s, closure t
source
theorem Subfield.map_sup {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (s t : Subfield K) (f : K →+* L) :
map f (s ⊔ t) = map f s ⊔ map f t
source
theorem Subfield.map_iSup {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {ι : Sort u_1} (f : K →+* L) (s : ι → Subfield K) :
map f (iSup s) = ⨆ (i : ι), map f (s i)
source
theorem Subfield.map_inf {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (s t : Subfield K) (f : K →+* L) :
map f (s ⊓ t) = map f s ⊓ map f t
source
theorem Subfield.map_iInf {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {ι : Sort u_1} [Nonempty ι] (f : K →+* L) (s : ι → Subfield K) :
map f (iInf s) = ⨅ (i : ι), map f (s i)
source
theorem Subfield.comap_inf {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (s t : Subfield L) (f : K →+* L) :
comap f (s ⊓ t) = comap f s ⊓ comap f t
source
theorem Subfield.comap_iInf {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {ι : Sort u_1} (f : K →+* L) (s : ι → Subfield L) :
comap f (iInf s) = ⨅ (i : ι), comap f (s i)
source
@[simp]
theorem Subfield.map_bot {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
map f ⊥ = ⊥
source
@[simp]
theorem Subfield.comap_top {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
comap f ⊤ = ⊤
source
theorem Subfield.mem_iSup_of_directed {K : Type u} [DivisionRing K] {ι : Sort u_1} [hι : Nonempty ι] {S : ι → Subfield K} (hS : Directed (fun (x1 x2 : Subfield K) => x1 ≤ x2) S) {x : K} :
x ∈ ⨆ (i : ι), S i ↔ ∃ (i : ι), x ∈ S i

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)

source
theorem Subfield.coe_iSup_of_directed {K : Type u} [DivisionRing K] {ι : Sort u_1} [hι : Nonempty ι] {S : ι → Subfield K} (hS : Directed (fun (x1 x2 : Subfield K) => x1 ≤ x2) S) :
↑(⨆ (i : ι), S i) = ⋃ (i : ι), ↑(S i)
source
theorem Subfield.mem_sSup_of_directedOn {K : Type u} [DivisionRing K] {S : Set (Subfield K)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : Subfield K) => x1 ≤ x2) S) {x : K} :
x ∈ sSup S ↔ ∃ s ∈ S, x ∈ s
source
theorem Subfield.coe_sSup_of_directedOn {K : Type u} [DivisionRing K] {S : Set (Subfield K)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : Subfield K) => x1 ≤ x2) S) :
↑(sSup S) = ⋃ s ∈ S, ↑s
source
def RingHom.rangeRestrictField {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
K →+* ↥f.fieldRange

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

Equations

- f.rangeRestrictField = f.rangeSRestrict

Instances For

source
@[simp]
theorem RingHom.coe_rangeRestrictField {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (x : K) :
↑(f.rangeRestrictField x) = f x
source
theorem RingHom.rangeRestrictField_bijective {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
Function.Bijective ⇑f.rangeRestrictField
source
noncomputable def RingHom.rangeRestrictFieldEquiv {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) :
K ≃+* ↥f.fieldRange

`RingHom.rangeRestrictField` as a `RingEquiv`.

Equations

- f.rangeRestrictFieldEquiv = RingEquiv.ofBijective f.rangeRestrictField ⋯

Instances For

source
@[simp]
theorem RingHom.rangeRestrictFieldEquiv_apply_coe {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (a : K) :
↑(f.rangeRestrictFieldEquiv a) = f a
source
@[simp]
theorem RingHom.rangeRestrictFieldEquiv_apply_symm_apply {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (x : ↥f.fieldRange) :
f (f.rangeRestrictFieldEquiv.symm x) = ↑x
source
def RingHom.eqLocusField {K : Type u} [DivisionRing K] {L : Type v} [Semiring L] (f g : K →+* L) :
Subfield K

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

- f.eqLocusField g = { carrier := {x : K | f x = g x}, mul_mem' := ⋯, one_mem' := ⋯, add_mem' := ⋯, zero_mem' := ⋯, neg_mem' := ⋯, inv_mem' := ⋯ }

Instances For

source
@[simp]
theorem RingHom.mem_eqLocusField {K : Type u} [DivisionRing K] {L : Type v} [Semiring L] {f g : K →+* L} {x : K} :
x ∈ f.eqLocusField g ↔ f x = g x
source
theorem RingHom.eqOn_field_closure {K : Type u} [DivisionRing K] {L : Type v} [Semiring L] {f g : K →+* L} {s : Set K} (h : Set.EqOn (⇑f) (⇑g) s) :
Set.EqOn ⇑f ⇑g ↑(Subfield.closure s)

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

source
theorem RingHom.eq_of_eqOn_subfield_top {K : Type u} [DivisionRing K] {L : Type v} [Semiring L] {f g : K →+* L} (h : Set.EqOn ⇑f ⇑g ↑⊤) :
f = g
source
theorem RingHom.eq_of_eqOn_of_field_closure_eq_top {K : Type u} [DivisionRing K] {L : Type v} [Semiring L] {s : Set K} (hs : Subfield.closure s = ⊤) {f g : K →+* L} (h : Set.EqOn (⇑f) (⇑g) s) :
f = g
source
theorem RingHom.field_closure_preimage_le {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Set L) :
Subfield.closure (⇑f ⁻¹' s) ≤ Subfield.comap f (Subfield.closure s)
source
theorem RingHom.map_field_closure {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Set K) :
Subfield.map f (Subfield.closure s) = Subfield.closure (⇑f '' s)

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

source
def Subfield.inclusion {K : Type u} [DivisionRing K] {S T : Subfield K} (h : S ≤ T) :
↥S →+* ↥T

The ring homomorphism associated to an inclusion of subfields.

Equations

- Subfield.inclusion h = S.subtype.codRestrict T ⋯

Instances For

source
@[simp]
theorem Subfield.fieldRange_subtype {K : Type u} [DivisionRing K] (s : Subfield K) :
s.subtype.fieldRange = s
source
def RingEquiv.subfieldCongr {K : Type u} [DivisionRing K] {s t : Subfield K} (h : s = t) :
↥s ≃+* ↥t

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

source
theorem Subfield.closure_preimage_le {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Set L) :
closure (⇑f ⁻¹' s) ≤ comap f (closure s)
source
theorem Subfield.multiset_prod_mem {K : Type u} [Field K] (s : Subfield K) (m : Multiset K) :
(∀ a ∈ m, a ∈ s) → m.prod ∈ s

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

source
theorem Subfield.prod_mem {K : Type u} [Field K] (s : Subfield K) {ι : Type u_1} {t : Finset ι} {f : ι → K} (h : ∀ c ∈ t, f c ∈ s) :
∏ i ∈ t, f i ∈ s

Product of elements of a subfield indexed by a `Finset` is in the subfield.

source
instance Subfield.toAlgebra {K : Type u} [Field K] (s : Subfield K) :
Algebra (↥s) K
Equations

- s.toAlgebra = s.subtype.toAlgebra

source
theorem Subfield.mem_closure_iff {K : Type u} [Field K] {s : Set K} {x : K} :
x ∈ closure s ↔ ∃ y ∈ Subring.closure s, ∃ z ∈ Subring.closure s, y / z = x
source
theorem Subfield.map_comap_eq {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Subfield L) :
map f (comap f s) = s ⊓ f.fieldRange
source
theorem Subfield.map_comap_eq_self {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} {s : Subfield L} (h : s ≤ f.fieldRange) :
map f (comap f s) = s
source
theorem Subfield.map_comap_eq_self_of_surjective {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] {f : K →+* L} (hf : Function.Surjective ⇑f) (s : Subfield L) :
map f (comap f s) = s
source
theorem Subfield.comap_map {K : Type u} {L : Type v} [DivisionRing K] [DivisionRing L] (f : K →+* L) (s : Subfield K) :
comap f (map f s) = s

### Actions by `Subfield`s #

These are just copies of the definitions about `Subsemiring` starting from `Subsemiring.MulAction`.

source
instance Subfield.instSMulSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [SMul K X] (F : Subfield K) :
SMul (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instSMulSubtypeMem = inferInstanceAs (SMul (↥F.toSubsemiring) X)

source
theorem Subfield.smul_def {K : Type u} [DivisionRing K] {X : Type u_1} [SMul K X] {F : Subfield K} (g : ↥F) (m : X) :
g • m = ↑g • m
source
instance Subfield.smulCommClass_left {K : Type u} [DivisionRing K] {X : Type u_2} {Y : Type u_1} [SMul K Y] [SMul X Y] [SMulCommClass K X Y] (F : Subfield K) :
SMulCommClass (↥F) X Y
source
instance Subfield.smulCommClass_right {K : Type u} [DivisionRing K] {X : Type u_1} {Y : Type u_2} [SMul X Y] [SMul K Y] [SMulCommClass X K Y] (F : Subfield K) :
SMulCommClass X (↥F) Y
source
instance Subfield.instIsScalarTowerSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} {Y : Type u_2} [SMul X Y] [SMul K X] [SMul K Y] [IsScalarTower K X Y] (F : Subfield K) :
IsScalarTower (↥F) X Y

Note that this provides `IsScalarTower F K K` which is needed by `smul_mul_assoc`.

source
instance Subfield.instFaithfulSMulSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [SMul K X] [FaithfulSMul K X] (F : Subfield K) :
FaithfulSMul (↥F) X
source
instance Subfield.instMulActionSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [MulAction K X] (F : Subfield K) :
MulAction (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instMulActionSubtypeMem = inferInstanceAs (MulAction (↥F.toSubsemiring) X)

source
instance Subfield.instDistribMulActionSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [AddMonoid X] [DistribMulAction K X] (F : Subfield K) :
DistribMulAction (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instDistribMulActionSubtypeMem = inferInstanceAs (DistribMulAction (↥F.toSubsemiring) X)

source
instance Subfield.instMulDistribMulActionSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [Monoid X] [MulDistribMulAction K X] (F : Subfield K) :
MulDistribMulAction (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instMulDistribMulActionSubtypeMem = inferInstanceAs (MulDistribMulAction (↥F.toSubsemiring) X)

source
instance Subfield.instSMulWithZeroSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [Zero X] [SMulWithZero K X] (F : Subfield K) :
SMulWithZero (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instSMulWithZeroSubtypeMem = inferInstanceAs (SMulWithZero (↥F.toSubsemiring) X)

source
instance Subfield.instMulActionWithZeroSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [Zero X] [MulActionWithZero K X] (F : Subfield K) :
MulActionWithZero (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instMulActionWithZeroSubtypeMem = inferInstanceAs (MulActionWithZero (↥F.toSubsemiring) X)

source
instance Subfield.instModuleSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [AddCommMonoid X] [Module K X] (F : Subfield K) :
Module (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instModuleSubtypeMem = inferInstanceAs (Module (↥F.toSubsemiring) X)

source
instance Subfield.instMulSemiringActionSubtypeMem {K : Type u} [DivisionRing K] {X : Type u_1} [Semiring X] [MulSemiringAction K X] (F : Subfield K) :
MulSemiringAction (↥F) X

The action by a subfield is the action by the underlying field.

Equations

- F.instMulSemiringActionSubtypeMem = inferInstanceAs (MulSemiringAction (↥F.toSubsemiring) X)