Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Algebraic closure definition and existence axiom. #4554

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from

Conversation

metakunt
Copy link
Contributor

Define the algebraic closure of as the class of all fields that satisfy the following three properties:

  1. Any polynomial of L[X] with positive degree has a root.
  2. There exists an injective ring homomorphism embedding K into L.
  3. Any element of L is algebraic over L.

Also postulate the axiom that the algebraic closure exists. This is needed to eventually discharge the hypotheses of the form

|- ( ph -> L e. ( AlgClosure ` K ) ) 

The definition fails for unknown reasons to me. Maybe one of you can help me.

Definition in lean:
https://leanprover-community.github.io/mathlib4_docs/Mathlib/FieldTheory/IsAlgClosed/Basic.html#IsAlgClosure
and its existence
https://leanprover-community.github.io/mathlib4_docs/Mathlib/FieldTheory/IsAlgClosed/AlgebraicClosure.html#AlgebraicClosure.instField

@icecream17
Copy link
Contributor

I think the third part is that any element of K is algebraic over L, based on https://en.wikipedia.org/wiki/Algebraic_closure --> https://en.wikipedia.org/wiki/Algebraic_extension

(elements of L being algebraic over L is trivial because for any number N, we have the polynomial N - x = 0)

@metakunt
Copy link
Contributor Author

metakunt commented Jan 11, 2025

Yeah you are right. This definition currently is bollocks.
I need the canonical map mapping the polynomial in K[X] to the polynomial in L[X]
so the second condition should be

$$\forall l \in L \exists q \in K[X] \mathrm{~such~that~} q(l)=0 \mathrm{~in~}L$$

I need the map that maps the polynomial with coefficients in K to the map with coefficients in L. In lean, this map is called Polynomial.aeval, I don't know what the metamath analogue is.

@icecream17
Copy link
Contributor

icecream17 commented Jan 11, 2025

Lean's aeval looks like it assigns a single variable a value (evaluates a single variable). This probably isn't what your comment was talking about though... ((It takes the variable and value, and returns a function taking a polynomial to another polynomial with the variable removed, ie a homomorphism))

For single variable polynomials, df-evl1 in metamath is enough

For multivariable polynomials, this could be done by using df-selv and df-evl: df-selv basically let's us assign only some of the variables instead of all of them upon evaluation (see below), so it's perfect... but df-selv is not developed, with only selvval and selvcl basically.

Missing theorem:

(select some variables, evaluate those variables, then evaluate the rest) = evaluate all variables

@icecream17
Copy link
Contributor

icecream17 commented Jan 11, 2025

To map K[X] to L[X] (there isn't a preexisting definition for this):

polynomials are represented as functions
(variables -> exponents) -> K coefficients

so function composition

( k_p in K[X] |-> ( k_p o. (the K hom L) ) )

@metakunt
Copy link
Contributor Author

metakunt commented Jan 11, 2025

Yeah, you are right, I meant https://leanprover-community.github.io/mathlib4_docs/Mathlib/Algebra/Polynomial/Eval/Defs.html#Polynomial.map

Also I think you've meant that every element of L is algebraic over K. In any way I have reflected that in the definition.

The definition should now be correct, if I didn't miss anything.

@avekens
Copy link
Contributor

avekens commented Jan 11, 2025

To verify that the definition is correct (i.e., it defines what was intended to be defined), some basic theorems should be proven, especially for the three postulated properties, starting with the following two defining theorems:

 ( K e. Field -> ( AlgClosure ` K ) = { l e. Field |
      ( A. p e. ( Base ` ( Poly1 ` l ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` l ) ( ( ( eval1 ` l ) ` p ) ` z ) = ( 0g ` l ) ) /\
      E. f e. ( K RingHom l ) A. x e. l E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` l ) ) /\
      ( ( ( eval1 ` l ) ` q ) ` ( f ` x ) ) = ( 0g ` l ) ) ) } )
	  
 ( K e. Field -> ( L e. ( AlgClosure ` K ) <-> ( L e. Field /\
      ( A. p e. ( Base ` ( Poly1 ` L ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` L ) ( ( ( eval1 ` L ) ` p ) ` z ) = ( 0g ` L ) ) /\
      E. f e. ( K RingHom L ) A. x e. L E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` L ) ) /\
      ( ( ( eval1 ` L ) ` q ) ` ( f ` x ) ) = ( 0g ` L ) ) ) ) ) )

set.mm Show resolved Hide resolved
set.mm Show resolved Hide resolved
set.mm Show resolved Hide resolved
@avekens
Copy link
Contributor

avekens commented Jan 11, 2025

The two defining theorems should be named as

algclfval $p |- ( K e. Field -> ( AlgClosure ` K ) = { l e. Field |
      ( A. p e. ( Base ` ( Poly1 ` l ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` l ) ( ( ( eval1 ` l ) ` p ) ` z ) = ( 0g ` l ) ) /\
      E. f e. ( K RingHom l ) A. x e. l E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` l ) ) /\
      ( ( ( eval1 ` l ) ` q ) ` ( f ` x ) ) = ( 0g ` l ) ) ) } )
	  
 isalgcl $p |- ( K e. Field -> ( L e. ( AlgClosure ` K ) <-> ( L e. Field /\
      ( A. p e. ( Base ` ( Poly1 ` L ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` L ) ( ( ( eval1 ` L ) ` p ) ` z ) = ( 0g ` L ) ) /\
      E. f e. ( K RingHom L ) A. x e. L E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` L ) ) /\
      ( ( ( eval1 ` L ) ` q ) ` ( f ` x ) ) = ( 0g ` L ) ) ) ) ) )

@metakunt
Copy link
Contributor Author

metakunt commented Jan 11, 2025

The two defining theorems should be named as

algclfval $p |- ( K e. Field -> ( AlgClosure ` K ) = { l e. Field |
      ( A. p e. ( Base ` ( Poly1 ` l ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` l ) ( ( ( eval1 ` l ) ` p ) ` z ) = ( 0g ` l ) ) /\
      E. f e. ( K RingHom l ) A. x e. l E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` l ) ) /\
      ( ( ( eval1 ` l ) ` q ) ` ( f ` x ) ) = ( 0g ` l ) ) ) } )
	  
 isalgcl $p |- ( K e. Field -> ( L e. ( AlgClosure ` K ) <-> ( L e. Field /\
      ( A. p e. ( Base ` ( Poly1 ` L ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` L ) ( ( ( eval1 ` L ) ` p ) ` z ) = ( 0g ` L ) ) /\
      E. f e. ( K RingHom L ) A. x e. L E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` L ) ) /\
      ( ( ( eval1 ` L ) ` q ) ` ( f ` x ) ) = ( 0g ` L ) ) ) ) ) )

Hah, that's worrying. The definition (likely) resolves to the empty set. I can't apply fvmptd as I can't prove sethood hypothesis of the function value.

How should I resolve this?

@avekens
Copy link
Contributor

avekens commented Jan 11, 2025

Maybe an ordered-pair class abstraction should be used instead of a maps-to notation (like for subgraphs, see ~df-subgr:

df-algcl $a |- isAlgCl = { <. l , k >. | ( l e. Field /\ k e. Field /\
      ( A. p e. ( Base ` ( Poly1 ` l ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` l ) ( ( ( eval1 ` l ) ` p ) ` z ) = ( 0g ` l ) ) /\
      E. f e. ( k RingHom l ) A. x e. l E. q e. ( Base ` ( Poly1 ` k ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` l ) ) /\
      ( ( ( eval1 ` l ) ` q ) ` ( f ` x ) ) = ( 0g ` l ) ) ) ) }

Then we have:

 isalgcl $p |- ( ( L e. Field /\ K e. Field ) -> ( L isAlgCl K <->
      ( A. p e. ( Base ` ( Poly1 ` L ) ) ( ( deg1 ` p ) e. NN ->
      E. z e. ( Base ` L ) ( ( ( eval1 ` L ) ` p ) ` z ) = ( 0g ` L ) ) /\
      E. f e. ( K RingHom L ) A. x e. L E. q e. ( Base ` ( Poly1 ` K ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` L ) ) /\
      ( ( ( eval1 ` L ) ` q ) ` ( f ` x ) ) = ( 0g ` L ) ) ) ) )

@avekens
Copy link
Contributor

avekens commented Jan 11, 2025

Alternatively, an operation can be defined, as done for fldGen in #4553 (df-fldgen).

@metakunt
Copy link
Contributor Author

I have used the definition you've provided and proved isalgcl. Thanks for the help.

@tirix
Copy link
Contributor

tirix commented Jan 11, 2025

I think it might be interesting, as an intermediate step, to define the class of algebraically closed fields.
There are already many properties to be proved with that object, and it even has its own Wikipedia page (that's a definitive criterion!).

@metakunt
Copy link
Contributor Author

metakunt commented Jan 11, 2025

Can I get reverse closure. Given L isAlgCl K can I get that L and K are fields?
I've tried the following:


h1::algclelim.1    |- ( ( ph /\ L isAlgCl K ) -> ch )

h2::algclelim.2           |- ( ph -> K e. Field )
d1::nfv            |- F/ l ph
d2::nfv            |- F/ l ch
d6::ax-algclex     |- ( K e. Field -> E. l l isAlgCl K )
d3:d5,d6:syl       |- ( ph -> E. l l isAlgCl K )
!d4::              |- ( ( ph /\ l isAlgCl K ) -> ch )
qed:d1,2,d3,d4:exlimdd   |- ( ph -> ch )

yet I fail to show d4 from h1. I'd like to use something like this https://us.metamath.org/mpeuni/vtocld.html

@icecream17
Copy link
Contributor

icecream17 commented Jan 11, 2025

that isn't provable since we have substitute L with something that isn't even a field. Then -. L isAlgCl K so ( ph /\ L isAlgCl K ) -> F.

At best the hypothesis can be the setvar l, with or without the E.

Edit: However the reverse closure IS possible thanks to brabga ((𝐴 ∈ 𝑉 ∧ 𝐵 ∈ 𝑊) → (𝐴𝑅𝐵 ↔ 𝜓)) and brrelex12+relopabiv 𝐴𝑅𝐵 → (𝐴 ∈ V ∧ 𝐵 ∈ V), which logically forms 𝐴𝑅𝐵 → 𝜓 where 𝜓 ↔ ( L e. Field /\ K e. Field /\ ... )

set.mm Show resolved Hide resolved
@metakunt
Copy link
Contributor Author

I fail to see why I can't eliminate it. My goal was to state lemmas about algebraic closures in a way like that

ph -> L isAlgCl K
ph -> ch 

then that would be the API for the algebraic closure.
If I have a field K then I can get the algebraic closure of K by the axiom. And if ch no longer depends on L, then I should be able to eliminate the hypothesis ph -> L isAlgCl K.

Concretely, why I think I need the algebraic closure is because I want to count the set of primitive roots of a certain class of polynomials. There is a contradiction so ch = False. ch does not contain any variables and the existence of the algebraic closure should allow me to get rid of the hypothesis.

Or do I miss something drastic?

@icecream17
Copy link
Contributor

there is no "ch does not depend on L", only "ch does not depend on l"

@langgerard
Copy link

It would also be useful to prove that if L and M are two fields that each are an algebraic closure of a Field K, then there is a Field isomorphism between L and M.
Moreover if D is a division ring, E a (unital) ring and H a ring-homomorphism from D into E, then :
1/ either H(1D) = 1E = OE, so that H(a) = 0 for every A in D, H(D) is the zero-ring subring of B, and the kernel of H is all of the division ring D
2/ Either H(1D) = 1E is not equal to OE. As for every non zero a in D, there is a' in D with a.a' = 1D = a'.a, we have that
H(a).H(a') = H(a.a') = H(1D) = 1E =H(a'.a) = H(a').H(a), so that H(a) and H(a') are inverse for the multiplication in E, so the the subring H(D) of E will be a divison ring in E.
Also is a is not zero, H(a) cannot be 0E because if H(a) = 0E, then 1E = H(1D) = H(a.a') = H(a).H(a') = 0E.H(a') = 0E,
and 1E = 0E is excluded. So that H(a) = 0E only if a = 0D, meaning that the kernel of H is the zero-ring subring of D so that H must be injective.
And if D is a commutative division ring, so a Field, then if H(1D) is not 0E H(D) will also be a field and H be an injective ring homomorphism whose image is a subfield of the ring E.
So, in fact if H is a (unital) ring isomorphism between two non-zero rings and one of these is a division ring (field) , the other will also be a division ring (a field), and a field isomorphism is a ring isomorphism between two fields.

@metakunt
Copy link
Contributor Author

The field homomorphism result is here https://us.metamath.org/mpeuni/fldhmf1.html and was proven in #4542

The equivalence result of algebraic closures in in lean, but there are multiple isomorphism theorems
https://leanprover-community.github.io/mathlib4_docs/Mathlib/FieldTheory/IsAlgClosed/Basic.html#IsAlgClosure.equiv states that if both L and M are algebraic closures of R then they are algebraisomorphic (ring isomorphism with commutative scalar multiplication).

https://leanprover-community.github.io/mathlib4_docs/Mathlib/FieldTheory/IsAlgClosed/Basic.html#IsAlgClosure.equivOfAlgebraic'
This result is about towers of fields. If you have a commutative ring R with algebraic closure M and an R-algebra S, then the algebraic closure of S is isomorphic to M, this basically means that the field with 2 elements and the field with 4 elements have isomorphic algebraic closure.

Then there is https://leanprover-community.github.io/mathlib4_docs/Mathlib/FieldTheory/IsAlgClosed/Basic.html#IsAlgClosure.equivOfEquiv the algebraic closure of two isomorphic rings is also isomorphic.

There are a lot of theorems that we will need if we want to develop that theory. Here is the roadmap https://github.com/leanprover-community/mathlib3/wiki/Algebraic-closure-roadmap of lean's development.

If anyone wants to work on the project we can work on it with @tirix blueprint.

@icecream17 I want to define a set of roots in the algebraic closure, then I want to count them, by that time that I've counted them I should be able to discard L and finish the proof using either eqidd or cbv* theorems. The reason I need the algebraic closure is because I need primitive roots, which I will likely define in the upcoming PR.

@icecream17
Copy link
Contributor

icecream17 commented Jan 11, 2025

I'm not sure why your plan wouldn't work with l instead of L. If it helps, ax-algclex would correspond to hypothesis 1 in https://us.metamath.org/mpeuni/exlimddv.html

Edit: If you have a hypothesis involving L then you essentially don't need ax-algclex because of theorems like https://us.metamath.org/mpeuni/rspcev.html oops I got confused. Basically, when a theorem requires a hypothesis like ph -> L isAlgCl K, you can substitute l for L and eliminate it.

another edit after far too much self-clarification: For example say we have a theorem that proves

ph -> L isAlgCl K
=================
ph -> ch

This is equivalent to ( ph /\ L isAlgCl K ) -> L(ch)

Then apply the theorem but substitute l: ( ph /\ l isAlgCl K ) -> l(ch)
This will be hypothesis 2 in exlimddv.

set.mm Show resolved Hide resolved
@metakunt
Copy link
Contributor Author

Exactly, I want to state L as a class and not as a set. The final step will substitute l for L to eliminate it.

@metakunt
Copy link
Contributor Author

How do I split a long link?

@avekens
Copy link
Contributor

avekens commented Jan 12, 2025

I think it might be interesting, as an intermediate step, to define the class of algebraically closed fields. There are already many properties to be proved with that object, and it even has its own Wikipedia page (that's a definitive criterion!).

So maybe:

df-aclfld $a |- AlgClField = { f e. Field | A. p e. ( Base ` ( Poly1 ` f ) )
                 ( ( deg1 ` p ) e. NN ->E. z e. ( Base ` f ) ( ( ( eval1 ` f ) ` p ) ` z ) = ( 0g ` f ) ) }

with

isaclfld $p |- ( F e. AlgClField <-> ( F e. Field /\ A. p e. ( Base ` ( Poly1 ` F ) )
        ( ( deg1 ` p ) e. NN ->E. z e. ( Base ` F ) ( ( ( eval1 ` F ) ` p ) ` z ) = ( 0g ` F ) ) ) )

and then:

df-algcl $a |- isAlgCl = { <. l , k >. | ( k e. Field /\ l e. AlgClField
     /\ E. f e. ( k RingHom l ) A. x e. l E. q e. ( Base ` ( Poly1 ` k ) )
      ( ( q o. f ) =/= ( 0g ` ( Poly1 ` l ) ) /\ ( ( ( eval1 ` l ) ` q ) ` ( f ` x ) ) = ( 0g ` l ) ) }

with

 isalgcl $p |- ( ( L e. Field /\ K e. Field ) -> ( L isAlgCl K <->( L e. AlgClField 
        /\ E. f e. ( K RingHom L ) A. x e. L E. q e. ( Base ` ( Poly1 ` K ) )
            ( ( q o. f ) =/= ( 0g ` ( Poly1 ` L ) ) /\ ( ( ( eval1 ` L ) ` q ) ` ( f ` x ) ) = ( 0g ` L ) ) ) )

@metakunt
Copy link
Contributor Author

So in lean it's defined as Algebraically closed and Algebraic, we can have that definition.

@avekens
Copy link
Contributor

avekens commented Jan 12, 2025

To be more general, we can omit the e. Field in the definition, so that we get a concept of algebraically closed classes/structures (to be meaningful, there should be at least a base set and a zero element):

df-acl $a |- AlgCl = { f | A. p e. ( Base ( Poly1 f ) )
( ( deg1 p ) e. NN ->E. z e. ( Base f ) ( ( ( eval1 f ) p ) z ) = ( 0g f ) ) }

@langgerard
Copy link

In the comment for isalgcl, the polynom p should be a positive degree

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants