Zulip Chat Archive

Stream: Is there code for X?

Topic: Relative algebraic closure


Michael Stoll (Jun 23 2024 at 13:16):

Does Mathlib have the notion of the algebraic closure of F within F' when F and F' are fields and F' is an F-algebra (i.e., the subfield of F' consisting of all elements of F' tha are algebraic over F)?

Adam Topaz (Jun 23 2024 at 13:21):

You could take the integral closure. I’m not sure if it will have a field instance in the appropriate cases

Adam Topaz (Jun 23 2024 at 13:21):

docs#integralClosure

Michael Stoll (Jun 23 2024 at 13:24):

OK; that's what I would have fallen back on, too. We may have to add the conversion to a docs#Subfield ...

Michael Stoll (Jun 23 2024 at 13:35):

Somewhat related:

import Mathlib

example {R S A : Type*} [CommRing R] [CommRing S] [CommRing A] [Algebra R S] [Algebra S A] :
    Algebra R A :=
  RingHom.toAlgebra <| (algebraMap S A).comp <| algebraMap R S

I would expect this transitivity of structures to be directly available, but can't seem to find it.

Adam Topaz (Jun 23 2024 at 13:43):

It’s explicitly not available as an instance because you are meant to use docs#IsScalarTower

Adam Topaz (Jun 23 2024 at 13:44):

In other words, assume [Algebra R S] [Algebra S A] [Algebra R A] [IsScalarTower R S A]

Adam Topaz (Jun 23 2024 at 13:45):

But as a def, we may have docs#Algebra.trans or something like that

Adam Topaz (Jun 23 2024 at 13:47):

Maybe not… but note that things like docs#Algebra.IsIntegral.trans are formulated in terms of IsScalarTower

Michael Stoll (Jun 23 2024 at 13:48):

Yes, but there is no obvious way to get IsScalarTower R S A directly from the two algebra instances, as far as I can see.

Michael Stoll (Jun 23 2024 at 13:52):

Context: I'm trying to extend the theory of algebraic function fields of one variable. We have docs#FunctionField, but this only assumes [Algebra (RatFunc F) FF], and I need IsScalarTower F (RatFunc F) FF.

So is the recommendation to refactor docs#FunctionField to assume [IsScalarTower F (RatFunc F) FF] right away?

Michael Stoll (Jun 23 2024 at 13:54):

OK, I just found this:

variable {F FF : Type} [Field F] [Field FF] [inst : Algebra (RatFunc F) FF] (hF : FunctionField F FF)

noncomputable instance : Algebra F FF := Algebra.trans (S := RatFunc F)

instance : IsScalarTower F (RatFunc F) FF := IsScalarTower.of_algebraMap_eq (congrFun rfl)

so it looks like I can work with docs#FunctionField as it is for the time being...

Michael Stoll (Jun 23 2024 at 13:54):

(where Algebra.trans is the example from above).

Adam Topaz (Jun 23 2024 at 14:02):

I see. To be honest, I disagree with this definition of docs#FunctionField (which IMO should just mean a finitely generated extension, possibly assuming relatively algebraically closed).

Adam Topaz (Jun 23 2024 at 14:05):

Even in the one dimensional case, I don’t think it makes sense to assume such a IsScalarTower instance. Such an instance essentially is equivalent to naming a transcendental element, and it’s not clear to me that such a transcendental should be named by default

Michael Stoll (Jun 23 2024 at 14:54):

My gut feeling is that for practical purposes it is good to have a fixed transcendental element around (rather than to have to conjure one up each time it is needed), but let's see how far I get with the present set-up.


Last updated: May 02 2025 at 03:31 UTC