8. Miniproject: Frobenius Elements
8.1. Status
This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
8.2. Introduction And Goal
When this project started, I had thought that the existence of Frobenius elements was specific to the theory of local and global fields, and a slightly more general result held for Dedekind domains. Then Joel Riou pointed out on the Lean Zulip an extremely general result from from Bourbaki's Commutative Algebra (Chapter V, Section 2, number 2, theorem 2, part (ii)). This beautiful result is surely what we want to see in mathlib. Before we state Bourbaki's theorem, let us set the scene.
The goal of the mini-project is to get this theorem formalised and ideally into mathlib.
In particular, \Aut(L/K) is finite as a corollary. What is so striking about
this theorem to me is that the only finiteness hypothesis is on the group G
which acts; there are no finiteness or Noetherian hypotheses on the rings at
all.
8.3. Statement Of The Theorem
The set-up throughout this project:
G is a finite group acting (via ring isomorphisms) on a commutative ring
B, and A is the subring of G-invariants.
Say Q is a prime ideal of B, whose pullback to A is the prime ideal
P. Note that G naturally acts on the ideals of B. Let the
decomposition group D_Q of Q be the subgroup of G which stabilizes
Q (just to be clear: g \in D_Q means \{g \cdot q \,:\, q \in Q\}=Q,
not \forall q \in Q, g \cdot q = q).
Let L be the field of fractions of the integral domain B/Q, and let
K be the field of fractions of the subring A/P. Then L is naturally
a K-algebra. In this generality L/K may not even be finite or Galois,
but we can still talk about \Aut(L/K).
In the next definition we write down a group homomorphism \phi from D_Q
to \Aut(L/K).
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom_surjective»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
IsFractionRing.stabilizerHom[complete]
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Uses target in- statement
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Uses target in- statement
-
-
«IsFractionRing.stabilizerHom_surjective»
- statement
Choose g \in D_Q. Then the action of g on B gives us an induced
A/P-algebra automorphism of B/Q which extends to a K-algebra
automorphism \phi(g) of L. This construction g \mapsto \phi(g)
defines a group homomorphism from D_Q to \Aut(L/K) (all the proofs
implicit in the definition here are straightforward).
Code for Definition8.1●1 definition
Associated Lean declarations
-
IsFractionRing.stabilizerHom[complete]
-
IsFractionRing.stabilizerHom[complete]
-
def IsFractionRing.stabilizerHom.{u_1, u_2, u_3, u_4, u_5} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [SMulCommClassSMulCommClass.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M α] [SMul N α] : PropA typeclass mixin saying that two multiplicative actions on the same space commute.GType u_3AType u_1BType u_2] (PIdeal A: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.AType u_1) (QIdeal B: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.BType u_2) [QIdeal B.LiesOverIdeal.LiesOver.{u_2, u_3} {A : Type u_2} [CommSemiring A] {B : Type u_3} [Semiring B] [Algebra A B] (P : Ideal B) (p : Ideal A) : Prop`P` lies over `p` if `p` is the preimage of `P` by the `algebraMap`.PIdeal A] (KType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (LType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.KType u_4] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.KType u_4LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4LType u_5] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] : ↥(MulAction.stabilizerMulAction.stabilizer.{u_1, u_2} (G : Type u_1) {α : Type u_2} [Group G] [MulAction G α] (a : α) : Subgroup GThe stabilizer of an element under an action, i.e. what sends the element to itself. A subgroup.GType u_3QIdeal B) →*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.Gal(LType u_5/KType u_4)def IsFractionRing.stabilizerHom.{u_1, u_2, u_3, u_4, u_5} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [SMulCommClassSMulCommClass.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M α] [SMul N α] : PropA typeclass mixin saying that two multiplicative actions on the same space commute.GType u_3AType u_1BType u_2] (PIdeal A: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.AType u_1) (QIdeal B: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.BType u_2) [QIdeal B.LiesOverIdeal.LiesOver.{u_2, u_3} {A : Type u_2} [CommSemiring A] {B : Type u_3} [Semiring B] [Algebra A B] (P : Ideal B) (p : Ideal A) : Prop`P` lies over `p` if `p` is the preimage of `P` by the `algebraMap`.PIdeal A] (KType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (LType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.KType u_4] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.KType u_4LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4LType u_5] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] : ↥(MulAction.stabilizerMulAction.stabilizer.{u_1, u_2} (G : Type u_1) {α : Type u_2} [Group G] [MulAction G α] (a : α) : Subgroup GThe stabilizer of an element under an action, i.e. what sends the element to itself. A subgroup.GType u_3QIdeal B) →*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.Gal(LType u_5/KType u_4)If `Q` lies over `P`, then the stabilizer of `Q` acts on `Frac(B/Q)/Frac(A/P)`.
The theorem we want in this mini-project is
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
IsFractionRing.stabilizerHom_surjective[complete]
Definition 8.1
Choose g \in D_Q. Then the action of g on B gives us an induced
A/P-algebra automorphism of B/Q which extends to a K-algebra
automorphism \phi(g) of L. This construction g \mapsto \phi(g)
defines a group homomorphism from D_Q to \Aut(L/K) (all the proofs
implicit in the definition here are straightforward).g \mapsto \phi_g from D_Q to \Aut(L/K) defined above is
surjective.
Code for Theorem8.2●1 theorem
Associated Lean declarations
-
IsFractionRing.stabilizerHom_surjective[complete]
-
IsFractionRing.stabilizerHom_surjective[complete]
-
theorem IsFractionRing.stabilizerHom_surjective.{u_1, u_2, u_3, u_4, u_5} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [SMulCommClassSMulCommClass.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M α] [SMul N α] : PropA typeclass mixin saying that two multiplicative actions on the same space commute.GType u_3AType u_1BType u_2] (PIdeal A: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.AType u_1) (QIdeal B: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.BType u_2) [QIdeal B.IsPrimeIdeal.IsPrime.{u} {α : Type u} [Semiring α] (I : Ideal α) : PropAn ideal `P` of a ring `R` is prime if `P ≠ R` and `xy ∈ P → x ∈ P ∨ y ∈ P`] [QIdeal B.LiesOverIdeal.LiesOver.{u_2, u_3} {A : Type u_2} [CommSemiring A] {B : Type u_3} [Semiring B] [Algebra A B] (P : Ideal B) (p : Ideal A) : Prop`P` lies over `p` if `p` is the preimage of `P` by the `algebraMap`.PIdeal A] (KType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (LType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.KType u_4] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.KType u_4LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4LType u_5] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] : Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(IsFractionRing.stabilizerHomIsFractionRing.stabilizerHom.{u_1, u_2, u_3, u_4, u_5} {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [Algebra A B] (G : Type u_3) [Group G] [MulSemiringAction G B] [SMulCommClass G A B] (P : Ideal A) (Q : Ideal B) [Q.LiesOver P] (K : Type u_4) (L : Type u_5) [Field K] [Field L] [Algebra (A ⧸ P) K] [Algebra (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L] [Algebra K L] [IsScalarTower (A ⧸ P) K L] [IsFractionRing (A ⧸ P) K] [IsFractionRing (B ⧸ Q) L] : ↥(MulAction.stabilizer G Q) →* Gal(L/K)If `Q` lies over `P`, then the stabilizer of `Q` acts on `Frac(B/Q)/Frac(A/P)`.GType u_3PIdeal AQIdeal BKType u_4LType u_5)theorem IsFractionRing.stabilizerHom_surjective.{u_1, u_2, u_3, u_4, u_5} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [SMulCommClassSMulCommClass.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M α] [SMul N α] : PropA typeclass mixin saying that two multiplicative actions on the same space commute.GType u_3AType u_1BType u_2] (PIdeal A: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.AType u_1) (QIdeal B: IdealIdeal.{u} (R : Type u) [Semiring R] : Type uA (left) ideal in a semiring `R` is an additive submonoid `s` such that `a * b ∈ s` whenever `b ∈ s`. If `R` is a ring, then `s` is an additive subgroup.BType u_2) [QIdeal B.IsPrimeIdeal.IsPrime.{u} {α : Type u} [Semiring α] (I : Ideal α) : PropAn ideal `P` of a ring `R` is prime if `P ≠ R` and `xy ∈ P → x ∈ P ∨ y ∈ P`] [QIdeal B.LiesOverIdeal.LiesOver.{u_2, u_3} {A : Type u_2} [CommSemiring A] {B : Type u_3} [Semiring B] [Algebra A B] (P : Ideal B) (p : Ideal A) : Prop`P` lies over `p` if `p` is the preimage of `P` by the `algebraMap`.PIdeal A] (KType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (LType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.KType u_4] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.KType u_4LType u_5] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative action of `M` on `α` is determined by the multiplicative actions of `M` on `N` and `N` on `α`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4LType u_5] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.AType u_1⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.PIdeal A)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.KType u_4] [IsFractionRingIsFractionRing.{u_6, u_7} (R : Type u_6) [CommSemiring R] (K : Type u_7) [CommSemiring K] [Algebra R K] : Prop`IsFractionRing R K` states `K` is the ring of fractions of a commutative ring `R`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.BType u_2⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.QIdeal B)HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.LType u_5] : Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(IsFractionRing.stabilizerHomIsFractionRing.stabilizerHom.{u_1, u_2, u_3, u_4, u_5} {A : Type u_1} {B : Type u_2} [CommRing A] [CommRing B] [Algebra A B] (G : Type u_3) [Group G] [MulSemiringAction G B] [SMulCommClass G A B] (P : Ideal A) (Q : Ideal B) [Q.LiesOver P] (K : Type u_4) (L : Type u_5) [Field K] [Field L] [Algebra (A ⧸ P) K] [Algebra (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L] [Algebra K L] [IsScalarTower (A ⧸ P) K L] [IsFractionRing (A ⧸ P) K] [IsFractionRing (B ⧸ Q) L] : ↥(MulAction.stabilizer G Q) →* Gal(L/K)If `Q` lies over `P`, then the stabilizer of `Q` acts on `Frac(B/Q)/Frac(A/P)`.GType u_3PIdeal AQIdeal BKType u_4LType u_5)The stabilizer subgroup of `Q` surjects onto `Aut(Frac(B/Q)/Frac(A/P))`.
The goal of this mini-project is to get this theorem formalised and ideally into mathlib.
In particular, \Aut(L/K) is finite as a corollary. What is so striking about
this theorem to me is that the only finiteness hypothesis is on the group G
which acts; there are no finiteness or Noetherian hypotheses on the rings at
all.
8.4. Examples
As a trivial consequence we get Frobenius elements for finite Galois extensions
in both the local and global field setting, as \Aut(L/K) is just a Galois
group of finite fields in these cases, so by surjectivity we can lift a
Frobenius element.
Even though G is finite, it is possible in characteristic p > 0 for the
extension L/K to be infinite (and mostly inseparable). The theorem implies
that \Aut(L/K) is always finite; what is actually happening is that L/K is
algebraic and normal, and its maximal separable subextension is finite of degree
at most |G|. However, we can prove surjectivity directly without reference to
this maximal separable subextension.
8.5. The Extension B/A
The precise set-up we'll work in is the following. We fix G a finite group
acting on B a commutative ring, and we have another commutative ring A
such that B is an A-algebra and the image of A in B is
precisely the G-invariant elements of B. We do not ever need the map
A \to B to be injective so we do not assume this.
We start with a construction which is fundamental to everything, and which
explains why we need G to be finite.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
MulSemiringAction.charpoly[complete]
If b \in B then define the characteristic polynomial F_b(X) \in B[X]
of b to be \prod_{g \in G}(X - g \cdot b).
Code for Definition8.3●1 definition
Associated Lean declarations
-
MulSemiringAction.charpoly[complete]
-
MulSemiringAction.charpoly[complete]
-
def MulSemiringAction.charpoly.{u_2, u_3} {B
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : PolynomialPolynomial.{u_1} (R : Type u_1) [Semiring R] : Type u_1`Polynomial R` is the type of univariate polynomials over `R`, denoted as `R[X]` within the `Polynomial` namespace. Polynomials should be seen as (semi-)rings with the additional constructor `X`. The embedding from `R` is called `C`.BType u_2def MulSemiringAction.charpoly.{u_2, u_3} {B
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : PolynomialPolynomial.{u_1} (R : Type u_1) [Semiring R] : Type u_1`Polynomial R` is the type of univariate polynomials over `R`, denoted as `R[X]` within the `Polynomial` namespace. Polynomials should be seen as (semi-)rings with the additional constructor `X`. The embedding from `R` is called `C`.BType u_2Characteristic polynomial of a finite group action on a ring.
Clearly F_b is a monic polynomial.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
MulSemiringAction.monic_charpoly[complete]
Definition 8.3
If b \in B then define the characteristic polynomial F_b(X) \in B[X]
of b to be \prod_{g \in G}(X - g \cdot b).F_b is monic.
Code for Lemma8.4●1 theorem
Associated Lean declarations
-
MulSemiringAction.monic_charpoly[complete]
-
MulSemiringAction.monic_charpoly[complete]
-
theorem MulSemiringAction.monic_charpoly.{u_2, u_3} {B
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : (MulSemiringAction.charpolyMulSemiringAction.charpoly.{u_2, u_3} {B : Type u_2} (G : Type u_3) [CommRing B] [Group G] [MulSemiringAction G B] [Fintype G] (b : B) : Polynomial BCharacteristic polynomial of a finite group action on a ring.GType u_3bB).MonicPolynomial.Monic.{u} {R : Type u} [Semiring R] (p : Polynomial R) : Propa polynomial is `Monic` if its leading coefficient is 1theorem MulSemiringAction.monic_charpoly.{u_2, u_3} {B
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : (MulSemiringAction.charpolyMulSemiringAction.charpoly.{u_2, u_3} {B : Type u_2} (G : Type u_3) [CommRing B] [Group G] [MulSemiringAction G B] [Fintype G] (b : B) : Polynomial BCharacteristic polynomial of a finite group action on a ring.GType u_3bB).MonicPolynomial.Monic.{u} {R : Type u} [Semiring R] (p : Polynomial R) : Propa polynomial is `Monic` if its leading coefficient is 1
Obvious.
It is also clear that F_b has degree |G| and has b as a root. Also
F_b is G-invariant, because acting by some \gamma \in G just
permutes the order of the factors. Hence we can descend F_b to a monic
polynomial M_b(X) of degree |G| in A[X]. We will also refer to
M_b as the characteristic polynomial of b, even though it is not even
well-defined if the map A \to B is not injective.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
Algebra.IsInvariant.charpoly_mem_lifts[complete]
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Uses target in- proof
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Uses target in- proof
-
-
«Algebra.IsInvariant.isIntegral»
- proof
Definition 8.3
F_b is the lift of some monic polynomial M_b in A[X].
Code for Lemma8.5●1 theorem
Associated Lean declarations
-
Algebra.IsInvariant.charpoly_mem_lifts[complete]
-
Algebra.IsInvariant.charpoly_mem_lifts[complete]
-
theorem Algebra.IsInvariant.charpoly_mem_lifts.{u_1, u_2, u_3} (A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : MulSemiringAction.charpolyMulSemiringAction.charpoly.{u_2, u_3} {B : Type u_2} (G : Type u_3) [CommRing B] [Group G] [MulSemiringAction G B] [Fintype G] (b : B) : Polynomial BCharacteristic polynomial of a finite group action on a ring.GType u_3bB∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Polynomial.liftsPolynomial.lifts.{u, v} {R : Type u} [Semiring R] {S : Type v} [Semiring S] (f : R →+* S) : Subsemiring (Polynomial S)We define the subsemiring of polynomials that lifts as the image of `RingHom.of (map f)`.(algebraMapalgebraMap.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.AType u_1BType u_2)theorem Algebra.IsInvariant.charpoly_mem_lifts.{u_1, u_2, u_3} (A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only finitely many distinct elements of type `α`. The evidence of this is a finset `elems` (a list up to permutation without duplicates), together with a proof that everything of type `α` is in the list.GType u_3] (bB: BType u_2) : MulSemiringAction.charpolyMulSemiringAction.charpoly.{u_2, u_3} {B : Type u_2} (G : Type u_3) [CommRing B] [Group G] [MulSemiringAction G B] [Fintype G] (b : B) : Polynomial BCharacteristic polynomial of a finite group action on a ring.GType u_3bB∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Polynomial.liftsPolynomial.lifts.{u, v} {R : Type u} [Semiring R] {S : Type v} [Semiring S] (f : R →+* S) : Subsemiring (Polynomial S)We define the subsemiring of polynomials that lifts as the image of `RingHom.of (map f)`.(algebraMapalgebraMap.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.AType u_1BType u_2)
The coefficients of F_b are G-invariant, and thus lie in the image of
A.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
Algebra.IsInvariant.isIntegral[complete]
B/A is integral.
Code for Theorem8.6●1 theorem
Associated Lean declarations
-
Algebra.IsInvariant.isIntegral[complete]
-
Algebra.IsInvariant.isIntegral[complete]
-
theorem Algebra.IsInvariant.isIntegral.{u_1, u_2, u_3} (A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_3] : Algebra.IsIntegralAlgebra.IsIntegral.{u_1, u_3} (R : Type u_1) (A : Type u_3) [CommRing R] [Ring A] [Algebra R A] : PropAn algebra is integral if every element of the extension is integral over the base ring.AType u_1BType u_2theorem Algebra.IsInvariant.isIntegral.{u_1, u_2, u_3} (A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (BType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (GType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.AType u_1] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.BType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.AType u_1BType u_2] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_3BType u_2] [Algebra.IsInvariantAlgebra.IsInvariant.{u_1, u_2, u_3} (A : Type u_1) (B : Type u_2) (G : Type u_3) [CommSemiring A] [Semiring B] [Algebra A B] [Group G] [MulSemiringAction G B] : PropAn action of a group `G` on an extension of rings `B/A` is invariant if every fixed point of `B` lies in the image of `A`. The converse statement that every point in the image of `A` is fixed by `G` is `smul_algebraMap` (assuming `SMulCommClass A B G`).AType u_1BType u_2GType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_3] : Algebra.IsIntegralAlgebra.IsIntegral.{u_1, u_3} (R : Type u_1) (A : Type u_3) [CommRing R] [Ring A] [Algebra R A] : PropAn algebra is integral if every element of the extension is integral over the base ring.AType u_1BType u_2
Lemma 8.4
Definition 8.3
Definition 8.3
F_b is monic.F_b is the lift of some monic polynomial M_b in A[X].M_b.
If Q and Q' are two primes above p then there is some g \in G such that
gQ = Q', and one can deduce from this that Frob_Q and Frob_{Q'} are
conjugate. In particular if G is abelian then Frob_Q and Frob_{Q'} are
equal, so we can call them both Frob_p.
8.6. The Extension (B/Q)/(A/P)
Note that P and Q are primes, so the quotients A/P and B/Q are
integral domains.
The following technical lemma constructs an element of B with nice
characteristic polynomial modulo Q.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
- No associated Lean code or declarations.
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Uses target in- proof
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Uses target in- proof
-
-
fixed_of_fixed1_aux2
- proof
There exist elements a,b \in B, with a \notin Q and a in the image
of A, such that for all g \in G:
-
If
g \cdot Q = Q, theng \cdot b \equiv a \pmod{Q}. -
If
g \cdot Q \neq Q, theng \cdot b \equiv 0 \pmod{Q}.
Lemma 8.5
The ideals g \cdot Q \neq Q are not contained in Q. Since Q is a
prime ideal, this implies that the intersection of all g \cdot Q \neq Q is
still not contained in Q. Then we can find an element c \notin Q with
c \in g \cdot Q for all g \cdot Q \neq Q. Let F_c be the
characteristic polynomial of c, and write
F_c(X) \equiv X^j R(X) \pmod{Q}. Let a be the coefficient of X^j in
F_c(X), and choose R(X) so that R(0) = a. Let b = R(0) - R(c).
Note that F_c(c) = 0 and c \not\equiv 0 \pmod{Q}, so
R(c) \equiv 0 \pmod{Q}. Then b \equiv a \pmod{Q}, so
g \cdot b \equiv a \pmod{Q} whenever g \cdot Q = Q. But if
g \cdot Q \neq Q, then c \equiv 0 \pmod{g \cdot Q}. Then
b \equiv 0 \pmod{g \cdot Q}, so g \cdot b \equiv 0 \pmod{Q} whenever
g \cdot Q \neq Q.
A slight modification allows us to take an element of B fixed by D_Q as
input.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
- No associated Lean code or declarations.
Let b_0 \in B. Suppose that the image of b_0 in the quotient B/Q is
fixed by the stabilizer subgroup D_Q. Then there exist elements
a,b \in B, with a \notin Q and a in the image of A, such that
for all g \in G:
-
If
g \cdot Q = Q, theng \cdot b \equiv a b_0 \pmod{Q}. -
If
g \cdot Q \neq Q, theng \cdot b \equiv 0 \pmod{Q}.
Lemma 8.7
There exist elements
If
If a,b \in B, with a \notin Q and a in the image
of A, such that for all g \in G:
Multiply the g \cdot Q = Q, then g \cdot b \equiv a \pmod{Q}.g \cdot Q \neq Q, then g \cdot b \equiv 0 \pmod{Q}.b from fixed_of_fixed1_aux1 by b_0.
8.7. The Extension L/K
Let L^{D_Q} denote the fixed field of the action D_Q on L. Our
strategy for proving surjectivity of D_Q \to \Aut(L/K) will be to write
this map as the composition D_Q \to \Aut(L/L^{D_Q}) \to \Aut(L/K).
The surjectivity of the first map is a general fact of Galois theory.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
FixedPoints.toAlgAut_surjective[complete]
If a finite group H acts on a field F by field automorphisms, then the
map H \to \Aut(F/F^H) is surjective.
Code for Theorem8.9●1 theorem
Associated Lean declarations
-
FixedPoints.toAlgAut_surjective[complete]
-
FixedPoints.toAlgAut_surjective[complete]
-
theorem FixedPoints.toAlgAut_surjective.{u_2, u_3} (G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (FType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_2FType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_2] : Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(MulSemiringAction.toAlgAutMulSemiringAction.toAlgAut.{u_2, u_3, u_4} (G : Type u_2) (R : Type u_3) (A : Type u_4) [CommSemiring R] [Semiring A] [Algebra R A] [Group G] [MulSemiringAction G A] [SMulCommClass G R A] : G →* A ≃ₐ[R] AEach element of the group defines an algebra equivalence. This is a stronger version of `MulSemiringAction.toRingAut` and `DistribMulAction.toModuleEnd`.GType u_2(↥(FixedPoints.subfieldFixedPoints.subfield.{u, v} (M : Type u) [Monoid M] (F : Type v) [Field F] [MulSemiringAction M F] : Subfield FThe subfield of fixed points by a monoid action.GType u_2FType u_3)) FType u_3)theorem FixedPoints.toAlgAut_surjective.{u_2, u_3} (G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) (FType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.) [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_3] [MulSemiringActionMulSemiringAction.{u, v} (M : Type u) (R : Type v) [Monoid M] [Semiring R] : Type (max u v)Typeclass for multiplicative actions by monoids on semirings. This combines `DistribMulAction` with `MulDistribMulAction`: it expresses the interplay between the action and both addition and multiplication on the target. Two key axioms are `g • (x + y) = (g • x) + (g • y)` and `g • (x * y) = (g • x) * (g • y)`. A typical use case is the action of a Galois group $Gal(L/K)$ on the field `L`.GType u_2FType u_3] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_2] : Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(MulSemiringAction.toAlgAutMulSemiringAction.toAlgAut.{u_2, u_3, u_4} (G : Type u_2) (R : Type u_3) (A : Type u_4) [CommSemiring R] [Semiring A] [Algebra R A] [Group G] [MulSemiringAction G A] [SMulCommClass G R A] : G →* A ≃ₐ[R] AEach element of the group defines an algebra equivalence. This is a stronger version of `MulSemiringAction.toRingAut` and `DistribMulAction.toModuleEnd`.GType u_2(↥(FixedPoints.subfieldFixedPoints.subfield.{u, v} (M : Type u) [Monoid M] (F : Type v) [Field F] [MulSemiringAction M F] : Subfield FThe subfield of fixed points by a monoid action.GType u_2FType u_3)) FType u_3)`MulSemiringAction.toAlgAut` is surjective.
This is a general fact of Galois theory and was already in mathlib.
For surjectivity of the second map, we need to know that every element of
L^{D_Q} is fixed by \Aut(L/K). We first show this for elements of
B/Q fixed by D_Q.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
- No associated Lean code or declarations.
Definition 8.1
Let b_0 \in B/Q. Suppose that b_0 is fixed by the stabilizer subgroup
D_Q. Then b_0 is fixed by \Aut(L/K).
Lemma 8.7
Lemma 8.8
Let
If
If b_0 \in B. Suppose that the image of b_0 in the quotient B/Q is
fixed by the stabilizer subgroup D_Q. Then there exist elements
a,b \in B, with a \notin Q and a in the image of A, such that
for all g \in G:
Let g \cdot Q = Q, then g \cdot b \equiv a b_0 \pmod{Q}.g \cdot Q \neq Q, then g \cdot b \equiv 0 \pmod{Q}.a,b \in B be elements from fixed_of_fixed1_aux2. Let
M_b \in A[X] be the characteristic polynomial of b. We can map
M_b to L[X] in two different ways: via B[X] and via K[X].
Going via B[X] tells us that the image of M_b(X) in L[X] is exactly
(X - a b_0)^{|D_Q|} X^{|G|-|D_Q|}. But going via K[X] tells us that
this image lies in K[X], so we must have a b_0 \in K. Then
a b_0 is fixed by \Aut(L/K), and a is nonzero in L (since
a \notin Q), so b_0 is fixed by \Aut(L/K).
Now we upgrade this to elements of L fixed by D_Q. The following lemma
will allow us to lift the denominator from B/Q to A/P.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.12Blueprint label
-
fixed_of_fixed2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
IsAlgebraic.exists_smul_eq_mul[complete]
If R/S is an algebraic extension of integral domains, then any fraction
a/b with a,b \in R can be written as c/d with c \in R and
d \in S.
Code for Lemma8.11●1 theorem
Associated Lean declarations
-
IsAlgebraic.exists_smul_eq_mul[complete]
-
IsAlgebraic.exists_smul_eq_mul[complete]
-
theorem IsAlgebraic.exists_smul_eq_mul.{u_1, u_2} {R
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.RType u_1] [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.SType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.RType u_1SType u_2] (aS: SType u_2) {bS: SType u_2} (hRbIsAlgebraic R b: IsAlgebraicIsAlgebraic.{u, v} (R : Type u) {A : Type v} [CommRing R] [Ring A] [Algebra R A] (x : A) : PropAn element of an R-algebra is algebraic over R if it is a root of a nonzero polynomial with coefficients in R.RType u_1bS) (hbb ∈ nonZeroDivisors S: bS∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.nonZeroDivisorsnonZeroDivisors.{u_1} (M₀ : Type u_1) [MonoidWithZero M₀] : Submonoid M₀The submonoid of non-zero-divisors of a `MonoidWithZero` `M₀`.SType u_2) : ∃ cSdR, dR≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).dR•HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`. The meaning of this notation is type-dependent, but it is intended to be used for left actions. Conventions for notations in identifiers: * The recommended spelling of `•` in identifiers is `smul`.aS=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.bS*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.cStheorem IsAlgebraic.exists_smul_eq_mul.{u_1, u_2} {R
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.RType u_1] [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.SType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.RType u_1SType u_2] (aS: SType u_2) {bS: SType u_2} (hRbIsAlgebraic R b: IsAlgebraicIsAlgebraic.{u, v} (R : Type u) {A : Type v} [CommRing R] [Ring A] [Algebra R A] (x : A) : PropAn element of an R-algebra is algebraic over R if it is a root of a nonzero polynomial with coefficients in R.RType u_1bS) (hbb ∈ nonZeroDivisors S: bS∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.nonZeroDivisorsnonZeroDivisors.{u_1} (M₀ : Type u_1) [MonoidWithZero M₀] : Submonoid M₀The submonoid of non-zero-divisors of a `MonoidWithZero` `M₀`.SType u_2) : ∃ cSdR, dR≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).dR•HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`. The meaning of this notation is type-dependent, but it is intended to be used for left actions. Conventions for notations in identifiers: * The recommended spelling of `•` in identifiers is `smul`.aS=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.bS*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.cSA fraction `(a : S) / (b : S)` can be reduced to `(c : S) / (d : R)`, if `b` is algebraic over `R`.
If f \in S[X] satisfies f(b) = 0, then f(0) \in S is a multiple of
b. If f(0)=bx \in S, then a/b=(ax)/(bx) as desired.
-
Definition 8.1Blueprint label
-
«IsFractionRing.stabilizerHom»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.2Blueprint label
-
«IsFractionRing.stabilizerHom_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Definition 8.3Blueprint label
-
«MulSemiringAction.charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.4Blueprint label
-
«MulSemiringAction.monic_charpoly»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.5Blueprint label
-
«Algebra.IsInvariant.charpoly_mem_lifts»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.6Blueprint label
-
«Algebra.IsInvariant.isIntegral»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.7Blueprint label
-
fixed_of_fixed1_aux1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.8Blueprint label
-
fixed_of_fixed1_aux2
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.9Blueprint label
-
«FixedPoints.toAlgAut_surjective»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Theorem 8.10Blueprint label
-
fixed_of_fixed1
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
Lemma 8.11Blueprint label
-
«IsAlgebraic.exists_smul_eq_mul»
Group- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
-
-
«IsFractionRing.stabilizerHom»
- This miniproject has been a success: the main results are sorry-free and merged into mathlib. As a result there will be no more work on this miniproject in the FLT repo. Below is a fairly detailed sketch of the argument used.
- No associated Lean code or declarations.
Let x \in L. Suppose that x is fixed by the stabilizer subgroup D_Q.
Then x is fixed by the automorphism group \Aut(L/K).
Theorem 8.6
If
Definition 8.1
Let B/A is integral.R/S is an algebraic extension of integral domains, then any fraction
a/b with a,b \in R can be written as c/d with c \in R and
d \in S.b_0 \in B/Q. Suppose that b_0 is fixed by the stabilizer subgroup
D_Q. Then b_0 is fixed by \Aut(L/K).(B/Q)/(A/P) is algebraic by Algebra.IsInvariant.isIntegral,
IsAlgebraic.exists_smul_eq_mul lets us write x=b/a for b \in B/Q and
a \in A/P. Then b is fixed by the stabilizer subgroup D_Q, and it
suffices to show that b is fixed by the automorphism group
\Aut(L/K). But this is exactly fixed_of_fixed1.
Combining this with FixedPoints.toAlgAut_surjective finishes the proof.
Theorem 8.12
Let
If a finite group x \in L. Suppose that x is fixed by the stabilizer subgroup D_Q.
Then x is fixed by the automorphism group \Aut(L/K).H acts on a field F by field automorphisms, then the
map H \to \Aut(F/F^H) is surjective.D_Q \to \Aut(L/L^{D_Q}) is surjective by
FixedPoints.toAlgAut_surjective. For surjectivity of
\Aut(L/L^{D_Q}) \to \Aut(L/K), let \sigma be a field automorphism of
L fixing K pointwise. We must show that \sigma automatically fixes
L^{D_Q} pointwise. But this is exactly fixed_of_fixed2. Thus, the
composition D_Q \to \Aut(L/L^{D_Q}) \to \Aut(L/K) is surjective.