Zulip Chat Archive

Stream: Is there code for X?

Topic: Integral adjoin is finite-dimensional


Michał Staromiejski (Jan 22 2025 at 16:32):

Do we have this result in Mathlib?

import Mathlib.Algebra.Algebra.Subalgebra.Basic
import Mathlib.LinearAlgebra.FiniteDimensional.Defs
import Mathlib.RingTheory.IntegralClosure.IsIntegral.Defs

example {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a) :
    FiniteDimensional F (Algebra.adjoin F {a}) := sorry

Seems basic but I can't find it.

Riccardo Brasca (Jan 22 2025 at 16:37):

We surely have it in some form, let me have a look

Michał Staromiejski (Jan 22 2025 at 16:37):

Another question: why can't I make it an instance? This does not work:

import Mathlib.Algebra.Algebra.Subalgebra.Basic
import Mathlib.LinearAlgebra.FiniteDimensional.Defs
import Mathlib.RingTheory.IntegralClosure.IsIntegral.Defs

instance {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a) :
    FiniteDimensional F (Algebra.adjoin F {a}) := sorry

example {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a)  : ... :=
  haveI : FiniteDimensional F (Algebra.adjoin F {a}) := inferInstance
  sorry

Michał Staromiejski (Jan 22 2025 at 16:39):

Riccardo Brasca said:

We surely have it in some form, let me have a look

We have FiniteDimensional.of_fintype_basis and Algebra.adjoin.powerBasisAux so the proof is easy, but could not find anything else.

Riccardo Brasca (Jan 22 2025 at 16:42):

import Mathlib

example {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a) :
    FiniteDimensional F (Algebra.adjoin F {a}) :=
  PowerBasis.finite (Algebra.adjoin.powerBasis hai)

Riccardo Brasca (Jan 22 2025 at 16:43):

Yes, that is what I mean, is "almost" there

Riccardo Brasca (Jan 22 2025 at 16:45):

Michał Staromiejski said:

Another question: why can't I make it an instance? This does not work:

import Mathlib.Algebra.Algebra.Subalgebra.Basic
import Mathlib.LinearAlgebra.FiniteDimensional.Defs
import Mathlib.RingTheory.IntegralClosure.IsIntegral.Defs

instance {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a) :
    FiniteDimensional F (Algebra.adjoin F {a}) := sorry

example {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a)  : ... :=
  haveI : FiniteDimensional F (Algebra.adjoin F {a}) := inferInstance
  sorry

Because of the assumption hai, that is not a typeclass assumption.

Riccardo Brasca (Jan 22 2025 at 16:46):

If you write

import Mathlib

instance {F A : Type*} [Field F] [CommRing A] [Algebra F A] {a : A} (hai : IsIntegral F a) :
    FiniteDimensional F (Algebra.adjoin F {a}) :=
  PowerBasis.finite (Algebra.adjoin.powerBasis hai)

#lint

you see the error

/- The `impossibleInstance` linter reports:
SOME INSTANCES HAVE ARGUMENTS THAT ARE IMPOSSIBLE TO INFER
These are arguments that are not instance-implicit and do not appear in
another instance-implicit argument or the return type. -/

Michał Staromiejski (Jan 22 2025 at 16:47):

Thanks! Do we want this theorem in direct form? I think it might be useful?

Riccardo Brasca (Jan 22 2025 at 16:49):

It looks fine to me, but be sure to provide also the more general case with a finite set

Andrew Yang (Jan 22 2025 at 16:51):

There’s also docs#Algebra.IsIntegral.finite

Michał Staromiejski (Jan 22 2025 at 16:59):

This, combined with docs#Algebra.IsIntegral.adjoin would do the trick :tada:

Riccardo Brasca (Jan 22 2025 at 17:06):

You still have to prove that Algebra.FiniteType F (Algebra.adjoin F {a}), that I am bit surprised is not there (not difficult, but is should be automatic).

Riccardo Brasca (Jan 22 2025 at 17:07):

Also, note that if you use Module.Finite instead of FiniteDimensional you can state and prove a more general version, with F a CommRing.

Michał Staromiejski (Jan 22 2025 at 17:16):

Yup, thanks. Will try to prove general version.

Michał Staromiejski (Jan 22 2025 at 19:31):

Is there a reason why docs#Algebra.IsIntegral.finite is in Mathlib.RingTheory.IntegralClosure.IsIntegralClosure.Basic and not for example in Mathlib.RingTheory.IntegralClosure.Algebra.Basic?

Michał Staromiejski (Jan 22 2025 at 19:36):

It seems that actually a lot of results in Mathlib.RingTheory.IntegralClosure.IsIntegralClosure.Basic are results just about Algebra.IsIntegral so it seems that they should rather belong to Mathlib.RingTheory.IntegralClosure.Algebra.Basic but maybe I'm missing something?

Michał Staromiejski (Jan 22 2025 at 19:38):

Ok, docs#Algebra.IsIntegral.adjoin uses integralClosure so maybe it's ok. Then I'd add the results there.

Michał Staromiejski (Jan 22 2025 at 21:34):

So, Algebra.FiniteType F (Algebra.adjoin F {a}) is there (almost): docs#IsIntegral.fg_adjoin_singleton
and for finite set S there is docs#Subalgebra.fg_adjoin_finset.

Quite far form each other, but still there :)

Michał Staromiejski (Jan 22 2025 at 22:00):

PR #20970 created.

Junyan Xu (Jan 22 2025 at 22:06):

Did you notice that docs#fg_adjoin_of_finite and docs#IsIntegral.fg_adjoin_singleton are about finite generation of the submodule, not the subalgebra? So all you need is to use docs#Module.Finite.iff_fg.

Michał Staromiejski (Jan 23 2025 at 08:19):

Good point! Now they're just one-liners and I moved them to Mathlib.RingTheory.IntegralClosure.IsIntegral.Basic. But maybe ...Algebra.Basic is a better place?


Last updated: May 02 2025 at 03:31 UTC