Constructible Closure #
(Real or complex) constructible numbers are those that can be built from integers using only the operations of addition, subtraction, multiplication, multiplicative inverse, and square roots. This is equivalent to say that a constructible number lies in a series of quadratic extensions of rational numbers.
We slightly generalize this concept to any base field K and the embient field L,
and define constructibleClosure as the IntermediateField K L that is the union of all
iterated quadratic extension of K.
Main Declarations #
IsIteratedQuadraticExtension K Lis a predicate saying there is a series of quadratic extension fromKtoL.constructibleClosure K Lis the constructible closure ofKwithinL.isPowerOfTwo_natDegree_minpoly_of_mem_constructibleClosure: the degree of a number in the constructible closure is always a power of two.mem_constructibleClosure_complex_iff: the projection of complex constructible numbers on to real and imaginary parts are exactly real constructible numbers.
theorem
IntermediateField.relrank_sup_left_le
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
(M B : IntermediateField K L)
(h : M.relrank B < Cardinal.aleph0)
:
theorem
IntermediateField.relrank_sup
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
(e f g : IntermediateField K L)
(hef : e.relrank f < Cardinal.aleph0)
:
inductive
IsIteratedQuadraticExtension
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
:
IntermediateField K L → Prop
- bot {K : Type u_1} {L : Type u_3} [Field K] [Field L] [Algebra K L] : IsIteratedQuadraticExtension ⊥
- extension {K : Type u_1} {L : Type u_3} [Field K] [Field L] [Algebra K L] (f g : IntermediateField K L) (hf : IsIteratedQuadraticExtension f) (hfg : f ≤ g) (hg : f.relrank g = 2) : IsIteratedQuadraticExtension g
Instances For
theorem
IsIteratedQuadraticExtension.induction
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
(P : IntermediateField K L → Prop)
(bot : P ⊥)
(extension : ∀ (f g : IntermediateField K L), IsIteratedQuadraticExtension f → f ≤ g → f.relrank g = 2 → P f → P g)
{f : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
:
P f
theorem
isIteratedQuadraticExtension_of_exists_tower
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f : IntermediateField K L}
{n : ℕ}
(g : Fin (n + 1) → IntermediateField K L)
(hbot : g 0 = ⊥)
(htop : g (Fin.last n) = f)
(hle : ∀ (k : Fin n), g k.castSucc ≤ g k.succ)
(h : ∀ (k : Fin n), (g k.castSucc).relrank (g k.succ) = 2)
:
theorem
IsIteratedQuadraticExtension.isPowerOfTwo_finrank
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
:
(Module.finrank K ↥f).isPowerOfTwo
theorem
isIteratedQuadraticExtension_iff_isPowerOfTwo_finrank
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f : IntermediateField K L}
(hf : IsGalois K ↥f)
:
theorem
IsIteratedQuadraticExtension.isPowerOfTwo_natDegree_minpoly
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
{x : L}
(hx : x ∈ f)
:
(minpoly K x).natDegree.isPowerOfTwo
theorem
IsIteratedQuadraticExtension.mem_induction
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
(h0 : 2 ≠ 0)
(P : L → Prop)
(bot : ∀ (x : K), P ((algebraMap K L) x))
(add : ∀ (x y : L), P x → P y → P (x + y))
(inv : ∀ (x : L), P x → P x⁻¹)
(mul : ∀ (x y : L), P x → P y → P (x * y))
(sqrt : ∀ (x : L), P (x ^ 2) → P x)
{f : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
(x : L)
:
x ∈ f → P x
theorem
IsIteratedQuadraticExtension.extension'
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f g : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
(hfg : f ≤ g)
(hg : f.relrank g ≤ 2)
:
theorem
IsIteratedQuadraticExtension.sup
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{f g : IntermediateField K L}
(hf : IsIteratedQuadraticExtension f)
(hg : IsIteratedQuadraticExtension g)
:
IsIteratedQuadraticExtension (f ⊔ g)
theorem
IsIteratedQuadraticExtension.finsetSup
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{ι : Type u_4}
(s : Finset ι)
(f : ι → IntermediateField K L)
(h : ∀ i ∈ s, IsIteratedQuadraticExtension (f i))
:
Equations
- constructibleClosure K L = ⨆ (f : IntermediateField K L), ⨆ (_ : IsIteratedQuadraticExtension f), f
Instances For
theorem
mem_constructibleClosure
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{x : L}
:
x ∈ constructibleClosure K L ↔ ∃ (f : IntermediateField K L), IsIteratedQuadraticExtension f ∧ x ∈ f
theorem
isPowerOfTwo_natDegree_minpoly_of_mem_constructibleClosure
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{x : L}
(hx : x ∈ constructibleClosure K L)
:
(minpoly K x).natDegree.isPowerOfTwo
theorem
isPowerOfTwo_finrank_adjoin_of_mem_constructibleClosure
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{x : L}
(hx : x ∈ constructibleClosure K L)
:
(Module.finrank K ↥K⟮x⟯).isPowerOfTwo
theorem
mem_constructibleClosure_of_mem_subfield
{L : Type u_3}
[Field L]
{x : L}
{K : Subfield L}
(h : x ∈ K)
:
theorem
mem_constructibleClosure_of_sq_mem
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
{x : L}
(hx : x ^ 2 ∈ constructibleClosure K L)
:
theorem
constructibleClosure_induction
{K : Type u_1}
{L : Type u_3}
[Field K]
[Field L]
[Algebra K L]
(h0 : 2 ≠ 0)
(P : L → Prop)
(bot : ∀ (x : K), P ((algebraMap K L) x))
(add : ∀ (x y : L), P x → P y → P (x + y))
(inv : ∀ (x : L), P x → P x⁻¹)
(mul : ∀ (x y : L), P x → P y → P (x * y))
(sqrt : ∀ (x : L), P (x ^ 2) → P x)
(x : L)
:
x ∈ constructibleClosure K L → P x
theorem
constructibleClosure_closure_induction
{L : Type u_3}
[Field L]
(h0 : 2 ≠ 0)
{s : Set L}
{P : L → Prop}
(mem : ∀ x ∈ s, P x)
(one : P 1)
(add : ∀ (x y : L), P x → P y → P (x + y))
(neg : ∀ (x : L), P x → P (-x))
(inv : ∀ (x : L), P x → P x⁻¹)
(mul : ∀ (x y : L), P x → P y → P (x * y))
(sqrt : ∀ (x : L), P (x ^ 2) → P x)
(x : L)
:
x ∈ constructibleClosure (↥(Subfield.closure s)) L → P x
theorem
re_im_subset_constructibleClosure
{s : Set ℂ}
{x : ℂ}
(h : x ∈ constructibleClosure ↥(Subfield.closure s) ℂ)
:
x.re ∈ constructibleClosure ↥(Subfield.closure (Complex.re '' s ∪ Complex.im '' s)) ℝ ∧ x.im ∈ constructibleClosure ↥(Subfield.closure (Complex.re '' s ∪ Complex.im '' s)) ℝ
theorem
re_mem_constructibleClosure
{s : Set ℂ}
{x : ℂ}
(h : x ∈ constructibleClosure ↥(Subfield.closure s) ℂ)
:
theorem
im_mem_constructibleClosure
{s : Set ℂ}
{x : ℂ}
(h : x ∈ constructibleClosure ↥(Subfield.closure s) ℂ)
:
theorem
norm_mem_constructibleClosure
{s : Set ℂ}
{x : ℂ}
(h : x ∈ constructibleClosure ↥(Subfield.closure s) ℂ)
:
theorem
mem_constructibleClosure_of_real
{s : Set ℂ}
(h : ∀ x ∈ s, (starRingEnd ℂ) x ∈ s)
{x : ℝ}
(hx : x ∈ constructibleClosure ↥(Subfield.closure (Complex.re '' s ∪ Complex.im '' s)) ℝ)
:
theorem
mem_constructibleClosure_complex_iff
{s : Set ℂ}
(h : ∀ x ∈ s, (starRingEnd ℂ) x ∈ s)
{x : ℂ}
:
x ∈ constructibleClosure ↥(Subfield.closure s) ℂ ↔ x.re ∈ constructibleClosure ↥(Subfield.closure (Complex.re '' s ∪ Complex.im '' s)) ℝ ∧ x.im ∈ constructibleClosure ↥(Subfield.closure (Complex.re '' s ∪ Complex.im '' s)) ℝ
theorem
IsIteratedQuadraticExtension.transfer
{K : Type u_1}
{K' : Type u_2}
{L : Type u_3}
[Field K]
[Field K']
[Field L]
[Algebra K L]
[Algebra K' L]
(hK : (algebraMap K L).fieldRange = (algebraMap K' L).fieldRange)
{f : IntermediateField K L}
{f' : IntermediateField K' L}
(h : IsIteratedQuadraticExtension f)
(hf : f.toSubfield = f'.toSubfield)
:
theorem
IsIteratedQuadraticExtension.transfer_iff
{K : Type u_1}
{K' : Type u_2}
{L : Type u_3}
[Field K]
[Field K']
[Field L]
[Algebra K L]
[Algebra K' L]
(hK : (algebraMap K L).fieldRange = (algebraMap K' L).fieldRange)
{f : IntermediateField K L}
{f' : IntermediateField K' L}
(hf : f.toSubfield = f'.toSubfield)
:
theorem
constructibleClosure_transfer
{K : Type u_1}
{K' : Type u_2}
{L : Type u_3}
[Field K]
[Field K']
[Field L]
[Algebra K L]
[Algebra K' L]
(hK : (algebraMap K L).fieldRange = (algebraMap K' L).fieldRange)
{x : L}
(h : x ∈ constructibleClosure K L)
:
theorem
constructibleClosure_transfer_iff
{K : Type u_1}
{K' : Type u_2}
{L : Type u_3}
[Field K]
[Field K']
[Field L]
[Algebra K L]
[Algebra K' L]
(hK : (algebraMap K L).fieldRange = (algebraMap K' L).fieldRange)
{x : L}
: