Emmy Noether, a remarkable mathematician, made a profound discovery about invariance in abstract algebra, with her Noether’s theorem expressing the connection between symmetries and invariants in the context of group theory and rings, impacting various branches of physics.
Noether’s Theorem in Abstract Algebra
In abstract algebra, Noether’s theorem is often associated with Emmy Noether’s work on invariant theory, which deals with how group actions on algebraic structures (like polynomials or vector spaces) can give rise to invariant properties under those actions.
One of the major forms of Noether’s work in abstract algebra is the first and second theorems of invariant theory:

Noether’s theorem says that this collection of invariant polynomials can be described using a finite set of polynomials. In other words, you don’t need an infinite number of polynomials to describe all invariants. A finite set of polynomials is enough to “generate” all the invariants.It’s like saying you can generate all the numbers in a number system by just a few basic operations, without needing an infinite set of rules.
For example, Imagine a square. A group action on the square could be rotating it by 90 degrees, 180 degrees, etc. After rotating, the square looks the same—its shape is invariant under these rotations. However, individual points on the square (like corners) might have moved, but the overall “squareness” stays unchanged. In this case, the property of being a square is an invariant under the group of rotations.
Similarly, when Noether’s theorem is applied to polynomials, it identifies which polynomials remain “unchanged” under a set of transformations. These are the invariants, and Noether’s theorem assures us that we can describe these invariant polynomials using a finite set.

Why Does This Matter?
This property of stabilizing is crucial because it ensures that in a Noetherian ring, you can’t have an infinite process of “making things bigger.” This leads to some really useful results:
- Finitely Generated: Every ideal in a Noetherian ring can be generated by a finite set of elements. This means you can always describe any ideal using a limited number of “building blocks.”
For example, instead of needing an infinite list of things to describe an ideal, you only need a finite handful, like needing only a few bricks to build a structure, instead of infinitely many.
Why is This Important?
In mathematics, having a way to ensure finiteness makes things much easier to work with. If you can always reduce things to a finite number of generators, that simplifies many problems, particularly in areas like algebraic geometry and commutative algebra, where you’re often dealing with complicated structures (like polynomials, geometric shapes, etc.).
To illustrate the concept,
# to understand Noether's first theorem in abstract algebra
import sympy as sp
from itertools import permutations
# Define the variables x1, x2, x3
x1, x2, x3 = sp.symbols('x1 x2 x3')
# Define a general polynomial in these variables
f = x1 + x2 + x3 # Sum of variables, which should be invariant
# Define the permutation group S3 (all permutations of the variables)
perm_group = list(permutations([x1, x2, x3]))
# Function to apply a permutation to a polynomial
def apply_permutation(f, perm):
subs = {x1: perm[0], x2: perm[1], x3: perm[2]}
return f.subs(subs)
# Check if the polynomial f is invariant under all permutations
invariants = []
for perm in perm_group:
f_permuted = apply_permutation(f, perm)
print(f"Permutation: {perm}, f becomes: {f_permuted}")
if f_permuted == f:
invariants.append(f)
if invariants:
print("\nInvariant polynomials found:")
for inv in set(invariants): # Use set to remove duplicates
sp.pprint(inv)
else:
print("No invariant polynomials found.")
# Let's also try another example: the product of the variables
f2 = x1 * x2 * x3 # Another candidate for invariance
invariants = []
for perm in perm_group:
f2_permuted = apply_permutation(f2, perm)
print(f"Permutation: {perm}, f2 becomes: {f2_permuted}")
if f2_permuted == f2:
invariants.append(f2)
if invariants:
print("\nInvariant polynomials found for f2:")
for inv in set(invariants): # Use set to remove duplicates
sp.pprint(inv)
else:
print("No invariant polynomials found for f2.")
and the output is
Permutation: (x1, x2, x3), f becomes: x1 + x2 + x3
Permutation: (x1, x3, x2), f becomes: x1 + x3 + x2
Permutation: (x2, x1, x3), f becomes: x2 + x1 + x3
Permutation: (x2, x3, x1), f becomes: x2 + x3 + x1
Permutation: (x3, x1, x2), f becomes: x3 + x1 + x2
Permutation: (x3, x2, x1), f becomes: x3 + x2 + x1
Invariant polynomials found:
x1 + x2 + x3
Permutation: (x1, x2, x3), f2 becomes: x1*x2*x3
Permutation: (x1, x3, x2), f2 becomes: x1*x2*x3
Permutation: (x2, x1, x3), f2 becomes: x1*x2*x3
Permutation: (x2, x3, x1), f2 becomes: x1*x2*x3
Permutation: (x3, x1, x2), f2 becomes: x1*x2*x3
Permutation: (x3, x2, x1), f2 becomes: x1*x2*x3
Invariant polynomials found for f2:
x1*x2*x3