Zulip Chat Archive

Stream: Is there code for X?

Topic: Finite extension over Real


Edison Xie (Oct 27 2024 at 18:57):

Do we have the theorem that for any finite extension over is either or ?

Daniel Weber (Oct 28 2024 at 02:53):

@loogle Algebra, FiniteDimensional, Real

loogle (Oct 28 2024 at 02:53):

:shrug: nothing found

Daniel Weber (Oct 28 2024 at 02:55):

Doesn't look like it

Riccardo Brasca (Oct 28 2024 at 05:32):

Even if the literal result is maybe missing, we can surely prove it very quickly, the math is there

Daniel Weber (Oct 28 2024 at 06:47):

@loogle FiniteDimensional, IsAlgebraicClosure

loogle (Oct 28 2024 at 06:47):

:exclamation: unknown identifier 'IsAlgebraicClosure'
Did you mean FiniteDimensional, "IsAlgebraicClosure"?

Riccardo Brasca (Oct 28 2024 at 07:41):

Let me see if I can prove it quickyl

Riccardo Brasca (Oct 28 2024 at 07:44):

Is this statement what you want?

import Mathlib

variable (K : Type) [Field K] [Algebra  K] [FiniteDimensional  K]

example : Nonempty ( ≃ₐ[] K)  Nonempty ( ≃ₐ[] K) := sorry

Kevin Buzzard (Oct 28 2024 at 09:41):

You could state it using ROrCLike :-)

Riccardo Brasca (Oct 28 2024 at 10:20):

Yeah, that is another possibility. Anyway here is a proof

import Mathlib

variable (K : Type*) [Field K] [Algebra  K] [FiniteDimensional  K]

open Polynomial Module Algebra Subalgebra

example : Nonempty (K ≃ₐ[] )  Nonempty (K ≃ₐ[] ) := by
  obtain α,  := Field.exists_primitive_element  K
  have halg : IsIntegral  α := IsIntegral.isIntegral α
  match h : (minpoly  α).natDegree with
  | 0 => simpa [h] using (minpoly.natDegree_pos halg).ne'
  | 1 =>
    left
    refine IntermediateField.topEquiv.symm.trans ?_⟩
    rw [ , IntermediateField.adjoin_simple_eq_bot_iff.2 (minpoly.natDegree_eq_one_iff.1 h)]
    exact IntermediateField.botEquiv  K
  | 2 =>
    right
    let φ : K →ₐ[]  := IsAlgClosed.lift
    refine AlgEquiv.ofBijective φ RingHom.injective _, (range_top_iff_surjective _).1 ?_⟩⟩
    refine eq_of_le_of_finrank_le le_top ?_
    by_contra! H
    change _ < finrank  ( : Submodule  ) at H
    simp only [finrank_top, Complex.finrank_real_complex] at H
    have : finrank  φ.range = 1 := by
      refine le_antisymm (Nat.le_of_lt_succ H) (Nat.succ_le_of_lt (finrank_pos_iff.2 ?_))
      infer_instance
    rw [ bot_eq_top_iff_finrank_eq_one] at this
    have : φ α, Set.mem_range_self α  ( : Subalgebra  φ.range) := this  trivial
    obtain x, hx := mem_bot.1 this
    simp only [ Subtype.coe_inj, SubalgebraClass.coe_algebraMap, Complex.coe_algebraMap] at hx
    simp [ minpoly.algHom_eq φ (RingHom.injective _) α,  hx,  Complex.coe_algebraMap,
      minpoly.natDegree_eq_one_iff.2 (Set.mem_range_self x)] at h
  | n+3 => linarith [(minpoly.irreducible halg).natDegree_le_two]

Riccardo Brasca (Oct 28 2024 at 10:21):

I guess Frobenius theorem should also be doable

Riccardo Brasca (Oct 28 2024 at 10:26):

The

  have : P.natDegree = 1  P.natDegree = 2 := by
    match h : P.natDegree with
    | 0 => simpa [h] using (minpoly.natDegree_pos halg).ne'
    | 1 => exact Or.inl rfl
    | 2 => exact Or.inr rfl
    | n+3 => linarith

makes me a little sad. Is there a way to golf it with fin_cases or something else?

Riccardo Brasca (Oct 28 2024 at 10:27):

Well, maybe I can just to the long proof inside the various cases

Daniel Weber (Oct 28 2024 at 10:29):

There is interval_cases

Riccardo Brasca (Oct 28 2024 at 10:31):

I've updated the above proof working directly inside the match.

Daniel Weber (Oct 28 2024 at 10:33):

Another approach might be to show that K must be equivalent to an IntermediateField ℝ ℂ and then use docs#IsGalois.intermediateFieldEquivSubgroup and the fact that the fixing subgroup of is C2C_2, but I'm not sure if that'll be easier

Riccardo Brasca (Oct 28 2024 at 10:38):

The above proof is really simple, and very similar to what we'd do on paper: K is generated by α, and the degree of the minimal polynomial of α must be 1 or 2. The first case is done via minpoly.natDegree_eq_one_iff and IntermediateField.adjoin_simple_eq_bot_iff. The second one is a little more annoying, the fasted way I found is to embed K in and prove that the embedding is also surjective. This is because if the dimension of the image is 1 then any element is real, and so the image of α would have minimal polynomial of degree 1.

Edison Xie (Oct 28 2024 at 11:01):

Thanks guys, really helpful! Appreciate the proof! :)

Andrew Yang (Oct 28 2024 at 11:31):

Another approach:

import Mathlib

variable (K : Type*) [Field K] [Algebra  K] [FiniteDimensional  K]

open Polynomial Module Algebra Subalgebra

lemma isSimpleOrder_subalgebra_of_finrank_eq_two
    {L K} [Field K] [Ring L] [Nontrivial L] [Algebra K L] (h : finrank K L = 2) :
    IsSimpleOrder (Subalgebra K L) := by
  have : Module.Finite K L := finite_of_finrank_eq_succ h
  have : Nontrivial (Subalgebra K L) :=
    ⟨⊥, , bot_eq_top_iff_finrank_eq_one (F := K) (E := L).not.mpr (by simp [h])
  constructor
  intros S
  have : finrank K S  Finset.Ioc 0 2 := Finset.mem_Ioc.mpr finrank_pos, h  S.toSubmodule.finrank_le
  match h' : finrank K S with
  | 0 => exact (finrank_pos.ne' h').elim
  | 1 => exact .inl (Subalgebra.finrank_eq_one_iff.mp h')
  | 2 => exact .inr (Subalgebra.eq_of_le_of_finrank_eq le_top ((h'.trans h.symm).trans (finrank_top _ _).symm))
  | n + 3 => simpa using h'.symm.trans_le (S.toSubmodule.finrank_le.trans_eq h)

instance : IsSimpleOrder (Subalgebra  ) :=
  isSimpleOrder_subalgebra_of_finrank_eq_two Complex.finrank_real_complex

example : Nonempty (K ≃ₐ[] )  Nonempty (K ≃ₐ[] ) := by
  let φ : K →ₐ[]  := IsAlgClosed.lift
  refine (IsSimpleOrder.eq_bot_or_eq_top φ.range).imp ?_ ?_
  · exact ((AlgEquiv.ofInjectiveField φ).trans <| ·  botEquiv  )
  · exact ((AlgEquiv.ofInjectiveField φ).trans <| ·  topEquiv)

(we probably want the first two in mathlib)

Daniel Weber (Oct 28 2024 at 15:47):

I think the last result should also be in Mathlib, perhaps in the docs#RCLike form Kevin suggested

Ruben Van de Velde (Oct 28 2024 at 15:48):

Weren't we going to have a Prop version of ROrCLike?

Daniel Weber (Oct 28 2024 at 15:49):

There's docs#IsRCLikeNormedField, but it requires an existing normed field structure


Last updated: May 02 2025 at 03:31 UTC