Skip to content

feat(Algebra/Ring/Subring/Polynomial): existence of polynomials that can represent elements of a subring#40344

Open
FMLJohn wants to merge 1 commit into
leanprover-community:masterfrom
FMLJohn:subring_polynomial
Open

feat(Algebra/Ring/Subring/Polynomial): existence of polynomials that can represent elements of a subring#40344
FMLJohn wants to merge 1 commit into
leanprover-community:masterfrom
FMLJohn:subring_polynomial

Conversation

@FMLJohn
Copy link
Copy Markdown
Collaborator

@FMLJohn FMLJohn commented Jun 7, 2026


Open in Gitpod

In this pull request, I have mainly proved the two results:

  1. Suppose R is a commutative ring, x is an element of R, and A is a subring of R. If y is an element of the subring of R generated by A and x, then there exists a univariate polynomial p with coefficents in A such that p(x)=y.
  2. Suppose R is a commutative ring, S is a subset of R, and A is a subring of R. If r is an element of the subring of R generated by A and S, then there exists a multivariate polynomial p with coefficents in A such that p(S)=r.

@github-actions github-actions Bot added the t-algebra Algebra (groups, rings, fields, etc) label Jun 7, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 7, 2026

PR summary bdc43c9104

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Algebra.Ring.Subring.Polynomial (new file) 1161

Declarations diff (regex)

+ exists_mvPolynomial_of_le_range_of_subset_range_of_mem_closure
+ exists_mvPolynomial_of_mem_closure
+ exists_mvPolynomial_of_mem_closure₁
+ exists_polynomial_of_le_range_of_mem_closure
+ exists_polynomial_of_mem_closure
+ exists_polynomial_of_mem_closure₁

You can run this locally as follows
## from your `mathlib4` directory:
git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci

## summary with just the declaration names:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh <optional_commit>

## more verbose report:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh long <optional_commit>

The doc-module for scripts/pr_summary/declarations_diff.sh in the mathlib-ci repository contains some details about this script.

Declarations diff (Lean)

Lean-aware diff — post-build, computed from the Lean environment (commit bdc43c9).

  • +6 new declarations
  • −0 removed declarations
+Subring.exists_mvPolynomial_of_le_range_of_subset_range_of_mem_closure
+Subring.exists_mvPolynomial_of_mem_closure
+Subring.exists_mvPolynomial_of_mem_closure₁
+Subring.exists_polynomial_of_le_range_of_mem_closure
+Subring.exists_polynomial_of_mem_closure
+Subring.exists_polynomial_of_mem_closure₁

No changes to strong technical debt.

Increase in weak tech debt: (relative, absolute) = (1.00, 0.00)
Current number Change Type (weak)
4925 1 exposed public sections

Current commit bdc43c9104
Reference commit ba6dea3d06

This script lives in the mathlib-ci repository. To run it locally, from your mathlib4 directory:

git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci
../mathlib-ci/scripts/reporting/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@FMLJohn FMLJohn temporarily deployed to cache-upload-forks June 7, 2026 21:13 — with GitHub Actions Inactive

-/

@[expose] public section
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@[expose] public section
public section

There are no definition, so no need to @[expose].

Comment on lines +25 to +28
theorem exists_polynomial_of_le_range_of_mem_closure
{A R : Type*} [CommRing A] [CommRing R] {x y : R} {B : Subring R}
{h : A →+* R} (hB : B ≤ h.range) (hy : y ∈ closure (B.carrier.insert x)) :
∃ p : Polynomial A, (p.map h).eval x = y := by
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think normally, instead of having {h : A →+* R}, you would add a [Algebra A R] assumption and remove h. Then you can also remove B and have hy : y ∈ Algebra.adjoin A {x}. And actually, after you make these changes, it becomes identical to the existing lemma Algebra.adjoin_mem_exists_aeval.

@plp127 plp127 added the awaiting-author A reviewer has asked the author a question or requested changes. label Jun 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-author A reviewer has asked the author a question or requested changes. t-algebra Algebra (groups, rings, fields, etc)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants