Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/ground_truth.lean +552 -0
- results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/input_messages_compress_2.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/postprocessed_dedup_predictions.jsonl +7 -0
- results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/ground_truth.lean +897 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/input_messages_compress_3.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/postprocessed_dedup_predictions.jsonl +4 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/ground_truth.lean +764 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/input_messages_compress_3.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/postprocessed_dedup_predictions.jsonl +5 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/ground_truth.lean +725 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/input_messages_compress_3.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/postprocessed_dedup_predictions.jsonl +4 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/ground_truth.lean +781 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/input_messages_compress_3.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/postprocessed_dedup_predictions.jsonl +9 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/ground_truth.lean +798 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/input_messages_compress_3.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/postprocessed_dedup_predictions.jsonl +9 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/ground_truth.lean +64 -0
- results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/input_messages_compress_0.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/postprocessed_dedup_predictions.jsonl +18 -0
- results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/ground_truth.lean +72 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/input_messages_compress_0.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/postprocessed_dedup_predictions.jsonl +6 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/ground_truth.lean +67 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/input_messages_compress_0.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/postprocessed_dedup_predictions.jsonl +13 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/validity_results.jsonl +50 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/ground_truth.lean +47 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/input_messages_compress_0.json +10 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/postprocessed_dedup_predictions.jsonl +28 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/raw_completion.json +518 -0
- results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/validity_results.jsonl +50 -0
results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/ground_truth.lean
ADDED
|
@@ -0,0 +1,552 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
|
| 550 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 551 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 552 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/input_messages_compress_2.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n\nprivate theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc\n g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _\n _ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)\n fun x ↦ smul_smul g x b\n\nBut the below proof works in general.\n-/\n\nprivate theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := sorry\n\ntheorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]\n (I : Ideal S) [hI : I.IsPrime] (f : R → S) :\n ∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := sorry\n\nend misc\n\nsection charpoly\n\nopen Polynomial BigOperators\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n\nvariable (G) in\n... [TRUNCATED] ...\n/\\ /\\ /\\\n| | |\n| | |\nA ---> A / P ----> K = Frac(A/P)\n\nWe will get to L, K, and the second square later.\nFirst let's explain how to do P and Q.\n-/\nvariable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]\n-- #synth Algebra A (B ⧸ Q) #exit -- works\n---synth IsScalarTower A B (B ⧸ Q) #exit-- works\n-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the\n-- commutativity of the diagram! This is a trick I learnt from Jou who apparently\n-- learnt it from Amelia\n [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]\n-- So now we know the left square commutes.\n-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`\n-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must\n-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`\n\nomit [P.IsPrime] in\ntheorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :\n algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P := sorry\n\nsection B_mod_Q_over_A_mod_P_stuff\n\nsection Mathlib.RingTheory.Ideal.Quotient\n\nnamespace Ideal\n\nvariable {R : Type*} [CommRing R] {I : Ideal R}\n\nprotected noncomputable\ndef Quotient.out (x : R ⧸ I) :=\n Quotient.out' x\n\ntheorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := sorry\n\n@[elab_as_elim]\nprotected theorem Quotient.induction_on\n {p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x := sorry\n\nend Ideal\n\nend Mathlib.RingTheory.Ideal.Quotient\n\nnamespace MulSemiringAction.CharacteristicPolynomial\n\nopen Polynomial\n/-\nI didn't check that this definition was independent\nof the lift `b` of `bbar` (and it might not even be true).\nBut this doesn't matter, because `G` no longer acts on `B/Q`.\nAll we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring\nand kills `bbar`.\n-/\nvariable {Q} in\nnoncomputable def Mbar\n (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n (bbar : B ⧸ Q) : (A ⧸ P)[X] :=\n Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar\n\nvariable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nomit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in\ntheorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := sorry\n\nomit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in\ntheorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :\n degree (Mbar P hFull' bbar) = Nat.card G := sorry\n\nomit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in\ntheorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :\n eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := sorry\n\nend CharacteristicPolynomial\n\nopen CharacteristicPolynomial in\nomit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in\ntheorem reduction_isIntegral\n [Nontrivial A] [Nontrivial B]\n (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :\n Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where := sorry\n\nend MulSemiringAction\n\ntheorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]\n [CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :\n ∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := sorry\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nIf $\\beta \\in B/Q$ is nonzero then there’s some nonzero $\\alpha \\in A/P$ such that $\\beta $ divides the image of $\\alpha $ in $B/Q$."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {P : Ideal A} (hP : P.IsPrime) {Q : Ideal B} (hQ : Q.IsPrime)\n (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∀ (β : B ⧸ Q), β ≠ 0 → ∃ (α : A ⧸ P), α ≠ 0 ∧ β ∣ α := by sorry"}
|
| 3 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] {P : Ideal A} [P.IsPrime] {Q : Ideal B} [Q.IsPrime] (hP : P.IsPrime) (hQ : Q.IsPrime) (h : Ideal.comap (algebraMap A B) P = p) (h' : Ideal.comap (algebraMap A B) Q = q) (h'' : Ideal.Quotient.mk P p ≠ 0) (h''' : Ideal.Quotient.mk B q ≠ 0) : (∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) → (∃ α : A, α ≠ 0 ∧ β ∣ (Ideal.Quotient.mk A α)) := by sorry"}
|
| 4 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} [CommRing A] [CommRing B] {G : Type*} [Group G] [MulSemiringAction G B] {p : Ideal A} (hp : p.IsPrime) {q : Ideal B} (hq : q.IsPrime) (hq1 : q = p) :\n ∀ (x : B ⧸ q), x ≠ 0 → ∃ (y : A ⧸ p), y ≠ 0 ∧ x ∣ ( Ideal.Quotient.mk p ) y := by sorry"}
|
| 5 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} {P Q : Ideal A} {G : Type*} [Group G] [MulSemiringAction G B] [Finite G]\n (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∃ x, x ∈ P ∧ x ^ Nat.card G - 1 = 0 := by sorry"}
|
| 6 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {P Q : Ideal A} {b : B} (hP : P.IsPrime) (hQ : Q.IsPrime)\n (h : P = algebraMap A B b) (hb : b ≠ 0) : ∃ (a : A), a ≠ 0 ∧ b ∣ (a : B) := by sorry"}
|
| 7 |
+
{"prediction": "theorem Algebra.exists_dvd_nonzero_if_isIntegral Mem P : Ideal A, Ideal B, Nonempty G, G.IsGroup, MulSemiringAction G B, Ideal.Polynomial.mk P, Ideal.Quotient.mk P, Ideal.out.mk P, Ideal.Mbar.mk P hFull', Ideal.Mbar.eval.mk P hFull', Ideal.Mbar.deg.mk P hFull', Ideal.Mbar.map.mk P hFull', Ideal.Mbar.kill.mk P hFull', Ideal.Polynomial.X : Ideal A → Ideal B → G → G → Ideal B → Ideal A → Ideal B → Ideal X := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-cdc8b876c72c43a2b41bf5ac039dd8a9",
|
| 3 |
+
"created": 1749028681,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def frobenius_element (A : Type*) [CommRing A] [Fintype G] (hG : Group.Finite G)\n (hG1 : Fintype.card G = p) (P : Ideal A) [P.IsPrime] [Fintype P] (hP : Fintype.card P = p)\n (Q : Ideal B) [Q.IsPrime] (hQ : Fintype.card Q = p) (hQ1 : Q.LiesOver P)\n (β : B ⧸ Q) (hβ : β ≠ 0) :\n ∃ (α : A ⧸ P), α ≠ 0 ∧ β ∣ (Ideal.Quotient.mk P α) ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] (p : Ideal B) [hp : p.IsPrime] : G ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n\ntheorem my_favorite_theorem {P : Ideal A} (hP : P.IsPrime) {Q : Ideal B} (hQ : Q.IsPrime)\n (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∀ (β : B ⧸ Q), β ≠ 0 → ∃ (α : A ⧸ P), α ≠ 0 ∧ β ∣ α ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "def Frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] (p : Ideal B) : G ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [Fintype R] : R → R ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "theorem my_favorite_theorem {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] {P : Ideal A} [P.IsPrime] {Q : Ideal B} [Q.IsPrime] (hP : P.IsPrime) (hQ : Q.IsPrime) (h : Ideal.comap (algebraMap A B) P = p) (h' : Ideal.comap (algebraMap A B) Q = q) (h'' : Ideal.Quotient.mk P p ≠ 0) (h''' : Ideal.Quotient.mk B q ≠ 0) : (∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) → (∃ α : A, α ≠ 0 ∧ β ∣ (Ideal.Quotient.mk A α)) ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [IsFintype R] : R ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n\ndef frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def FrobeniusElement.mk {A B : Type*} [CommRing A] [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [MulSemiringAction G B] [Finite G] :\n ∃ f : A → B, (∀ x, f x = x ^ (Nat.card G)) ∧\n ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = f a ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [Nontrivial R] (P : Ideal R) [P.IsPrime] (hP : P ≠ ⊤) : R → R ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "def frobenius_element (R : Type*) [CommRing R] [Fintype G] [MulSemiringAction G R] : G ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def frobenius_element (p : Ideal A) (hp : p.IsPrime) : Ideal A ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def frobenius conjugacy_class : G → Ideal B → Prop ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n : G ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "noncomputable def frobenius (G : Type*) [Group G] [MulSemiringAction G B] [Fintype G] : B ⧸ Q →ₗ[B]ₗ[A] B ⧸ Q ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∃ (F : G →ₗ[B] B), (∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) ∧\n (∀ b : B, (∀ g : G, g • b = b) → F b ≠ 0) ∧ (∀ b : B, (∀ g : G, g • b = b) → F b • b = b) ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [Fintype G] [MulSemiringAction G R] : R ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "def frobenius conjugate (R : Type*) [CommRing R] [Nontrivial R] (G : Type*) [Group G] [Fintype G] [MulSemiringAction G R] : Prop ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "noncomputable def frobenius_element (p : G) : G :=\n",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "def frosh (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] (A : Type*) [CommRing A] [Algebra A B] : Prop ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "noncomputable def FrobeniusCharCode (R : Type) [CommRing R] [Fintype R] [IsField R] (a : R) : ℕ ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "def frobenius_element (R : Type*) [CommRing R] [Fintype R] : R ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "noncomputable def frobenius conjugacy_class : Prop := ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [Fintype R] : R ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "noncomputable def frobenius_element : Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) := Ideal.mk (Ideal.Quotient.mk P) (Ideal.Quotient.mk P)\n\nnoncomputable def frobenius_conjugacy_class : Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) := Ideal.mk (Ideal.Quotient.mk P) (Ideal.Quotient.mk P)\n\nnoncomputable def image_of_frobenius_element : Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) := Ideal.mk (Ideal.Quotient.mk P) (Ideal.Quotient.mk P)\n\nnoncomputable def image_of_frobenius_conjugacy_class : Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) := Ideal.mk (Ideal.Quotient.mk P) (Ideal.Quotient.mk P)\n\nnoncomputable def frobenius_elementrels : Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) → Ideal (A ⧸ P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal (A ⧸ P))) → Prop ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "noncomputable def frobenius (R : Type*) [CommRing R] [Fintype G] [MulSemiringAction G R] : R → R ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "theorem my_favorite_theorem {A B : Type*} [CommRing A] [CommRing B] {G : Type*} [Group G] [MulSemiringAction G B] {p : Ideal A} (hp : p.IsPrime) {q : Ideal B} (hq : q.IsPrime) (hq1 : q = p) :\n ∀ (x : B ⧸ q), x ≠ 0 → ∃ (y : A ⧸ p), y ≠ 0 ∧ x ∣ ( Ideal.Quotient.mk p ) y ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [Fintype R] (P : Ideal R) [P.IsPrime] : R ⧸ P ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n [Fintype G] [Algebra.IsIntegral A B]\n\ndef frobenius conjugate (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "def FrobeniusElement (R : Type*) [CommRing R] [Fintype G] [Group G] [MulSemiringAction G R] : G ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "def Frobenius conjugacy_class (R : Type*) [CommRing R] (G : Type*) [Group G] [MulSemiringAction G R] (β : R ⧸ Q) : G ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def frobenius_element (p : Ideal A) (hp : p.IsPrime) : Ideal A := Ideal.mk (p : Submodule A) (Ideal.Quotient.mk p)\n\ntheorem my_favorite_theorem {A B : Type*} {P Q : Ideal A} {G : Type*} [Group G] [MulSemiringAction G B] [Finite G]\n (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∃ x, x ∈ P ∧ x ^ Nat.card G - 1 = 0 ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n\nopen Ideal\n\ntheorem my_favorite_theorem {P Q : Ideal A} {b : B} (hP : P.IsPrime) (hQ : Q.IsPrime)\n (h : P = algebraMap A B b) (hb : b ≠ 0) : ∃ (a : A), a ≠ 0 ∧ b ∣ (a : B) ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "noncomputable def frobenius_element (R S : Type) [CommRing R] [CommRing S] [Algebra R S] [IsDomain S] [Fintype S] : R ⧸ domainAlgebra.mk R S ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "noncomputable def Frobenius conjugacy_class (R : Type*) [CommRing R] (S : Type*) [CommRing S] [Algebra R S] (P : Ideal R) [P.IsPrime] (hP : P ≠ ⊤) (hP1 : P ≠ ⊥) : (Ideal.Quotient.mk P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal.Quotient.mk P)) ≃* (Ideal.Quotient.mk P) ⧸ span ({Ideal.Quotient.mk P} : Set (Ideal.Quotient.mk P)) ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "def FrobeniusConjugacyClass (B : Type*) [CommRing B] [Fintype G] : G →* B ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def frobenius_element (A : Type*) [Field A] (G : Type*) [Group G] [MulSemiringAction G A] : G ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] [IsIntegral R B] [Fintype G] : G ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "noncomputable def frobenius_element (R : Type*) [CommRing R] (P : Ideal R) [P.IsPrime] (F : Ideal.RingHom R P) : Ideal.RingHom R P ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "noncomputable def Frobenius_element (R S : Type*) (h : CommRing R) [Nontrivial R] (h' : CommRing S) [Algebra R S] [IsDomain S] : R ⧸ S ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def galois_group (A B : Type*) [CommRing A] [CommRing B] [Algebra A B] (h : Nontrivial B) : Type := Nonempty\nnoncomputable def galois_group (A B : Type*) [CommRing A] [CommRing B] [Algebra A B] (h : Nontrivial B) ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "def frobenius_element (R : Type*) [CommRing R] [Fintype R] [IsGaloid R] : R ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def frobenius_element (p : Ideal A) (hp : p.IsPrime) : Ideal A ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]\n\ntheorem _root_.Ideal.IsPrime.mem_iff_exists Mem P : Ideal A, Ideal B, Nonempty G, G.IsGroup, MulSemiringAction G B, Ideal.Polynomial.mk P, Ideal.Quotient.mk P, Ideal.out.mk P, Ideal.Mbar.mk P hFull', Ideal.Mbar.eval.mk P hFull', Ideal.Mbar.deg.mk P hFull', Ideal.Mbar.map.mk P hFull', Ideal.Mbar.kill.mk P hFull', Ideal.Polynomial.X : Ideal A → Ideal B → G → G → Ideal B → Ideal A → Ideal B → Ideal X ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "noncomputable def frobenius_element (P : Ideal A) [P.IsPrime] (g : G) : Ideal.mk A P ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "noncomputable def lift (x : A ⧸ P) := Ideal.Quotient.mk P x\n\nnoncomputable def image (x : A ⧸ P) := lift x\n\ndef witnessed_nonempty_kernel : Ideal.Quotient.mk P '' {x : A ⧸ P | image x ≠ 0} ≠ ∅ ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "noncomputable def Frobenius_element (R : Type*) [CommRing R] [Fintype G] : G ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 3443,
|
| 511 |
+
"prompt_tokens": 2464,
|
| 512 |
+
"total_tokens": 5907,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Algebra.exists_dvd_nonzero_if_isIntegral/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {P : Ideal A} (hP : P.IsPrime) {Q : Ideal B} (hQ : Q.IsPrime)\n (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∀ (β : B ⧸ Q), β ≠ 0 → ∃ (α : A ⧸ P), α ≠ 0 ∧ β ∣ α := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] {P : Ideal A} [P.IsPrime] {Q : Ideal B} [Q.IsPrime] (hP : P.IsPrime) (hQ : Q.IsPrime) (h : Ideal.comap (algebraMap A B) P = p) (h' : Ideal.comap (algebraMap A B) Q = q) (h'' : Ideal.Quotient.mk P p ≠ 0) (h''' : Ideal.Quotient.mk B q ≠ 0) : (∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) → (∃ α : A, α ≠ 0 ∧ β ∣ (Ideal.Quotient.mk A α)) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} [CommRing A] [CommRing B] {G : Type*} [Group G] [MulSemiringAction G B] {p : Ideal A} (hp : p.IsPrime) {q : Ideal B} (hq : q.IsPrime) (hq1 : q = p) :\n ∀ (x : B ⧸ q), x ≠ 0 → ∃ (y : A ⧸ p), y ≠ 0 ∧ x ∣ ( Ideal.Quotient.mk p ) y := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {A B : Type*} {P Q : Ideal A} {G : Type*} [Group G] [MulSemiringAction G B] [Finite G]\n (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : Ideal.comap (algebraMap A B) P = p) :\n ∃ x, x ∈ P ∧ x ^ Nat.card G - 1 = 0 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral {P Q : Ideal A} {b : B} (hP : P.IsPrime) (hQ : Q.IsPrime)\n (h : P = algebraMap A B b) (hb : b ≠ 0) : ∃ (a : A), a ≠ 0 ∧ b ∣ (a : B) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": "theorem Algebra.exists_dvd_nonzero_if_isIntegral Mem P : Ideal A, Ideal B, Nonempty G, G.IsGroup, MulSemiringAction G B, Ideal.Polynomial.mk P, Ideal.Quotient.mk P, Ideal.out.mk P, Ideal.Mbar.mk P hFull', Ideal.Mbar.eval.mk P hFull', Ideal.Mbar.deg.mk P hFull', Ideal.Mbar.map.mk P hFull', Ideal.Mbar.kill.mk P hFull', Ideal.Polynomial.X : Ideal A → Ideal B → G → G → Ideal B → Ideal A → Ideal B → Ideal X := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/ground_truth.lean
ADDED
|
@@ -0,0 +1,897 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 550 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 551 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by
|
| 552 |
+
obtain ⟨q, q_zero_coeff, q_eval_zero⟩ := Polynomial.nonzero_const_if_isIntegral R S s hs
|
| 553 |
+
use q.coeff 0
|
| 554 |
+
refine ⟨q_zero_coeff, ?_⟩
|
| 555 |
+
rw [← Polynomial.eval₂_X (algebraMap R S) s, ← dvd_neg, ← Polynomial.eval₂_C (algebraMap R S) s]
|
| 556 |
+
rw [← zero_add (-_), Mathlib.Tactic.RingNF.add_neg, ← q_eval_zero, ← Polynomial.eval₂_sub]
|
| 557 |
+
apply Polynomial.eval₂_dvd
|
| 558 |
+
exact Polynomial.X_dvd_sub_C
|
| 559 |
+
|
| 560 |
+
end B_mod_Q_over_A_mod_P_stuff
|
| 561 |
+
|
| 562 |
+
/-
|
| 563 |
+
\section{The extension $L/K$.}
|
| 564 |
+
|
| 565 |
+
\begin{theorem}
|
| 566 |
+
\label{foo1}
|
| 567 |
+
If $\lambda\in L$ then there's a monic polynomial $P_\lambda\in K[X]$ of degree $|G|$
|
| 568 |
+
with $\lambda$ as a root, and which splits completely in $L[X]$.
|
| 569 |
+
\end{theorem}
|
| 570 |
+
\begin{proof}
|
| 571 |
+
A general $\lambda\in L$ can be written as $\beta_1/\beta_2$ where $\beta_1,\beta_2\in B/Q$.
|
| 572 |
+
The previous corollary showed that there's some nonzero $\alpha\in A/P$ such that $\beta_2$
|
| 573 |
+
divides $\alpha$, and hence $\alpha\lambda\in B/Q$ (we just cleared denominators).
|
| 574 |
+
Thus $\alpha\lambda$ is a root of some monic polynomial $f(x)\in (A/P)[X]$,
|
| 575 |
+
by~\ref{MulSemiringAction.CharacteristicPolynomial.Mbar_eval_eq_zero}.
|
| 576 |
+
The polynomial $f(\alpha x)\in (A/P)[X]$ thus
|
| 577 |
+
has $\lambda$ as a root, but it is not monic; its leading term is $\alpha^n$.
|
| 578 |
+
Dividing through in $K[X]$ gives us the polynomial we seek.
|
| 579 |
+
\end{proof}
|
| 580 |
+
|
| 581 |
+
\begin{corollary} The extension $L/K$ is algebraic and normal.
|
| 582 |
+
\end{corollary}
|
| 583 |
+
\begin{proof} \uses{foo1}
|
| 584 |
+
Exercise using the previous theorem.
|
| 585 |
+
\end{proof}
|
| 586 |
+
|
| 587 |
+
Note that $L/K$ might not be separable and might have infinite degree. However
|
| 588 |
+
|
| 589 |
+
\begin{corollary} Any subextension of $L/K$ which is finite and separable over $K$
|
| 590 |
+
has degree at most $|G|$.
|
| 591 |
+
\end{corollary}
|
| 592 |
+
\begin{proof}
|
| 593 |
+
Finite and separable implies simple, and we've already seen that any
|
| 594 |
+
element of $L$ has degree at most $|G|$ over $K$.
|
| 595 |
+
\end{proof}
|
| 596 |
+
|
| 597 |
+
\begin{corollary} The maximal separable subextension $M$ of $L/K$ has degree at most $|G|$.
|
| 598 |
+
\end{corollary}
|
| 599 |
+
\begin{proof} If it has dimension greater than $|G|$ over $K$, then it has a finitely-generated
|
| 600 |
+
subfeld of $K$-dimension greater than $|G|$, and is finite and separable, contradicting
|
| 601 |
+
the previous result.
|
| 602 |
+
\end{proof}
|
| 603 |
+
|
| 604 |
+
\begin{corollary} $\Aut_K(L)$ is finite.
|
| 605 |
+
\end{corollary}
|
| 606 |
+
\begin{proof} Any $K$-automorphism of $L$ is determined by where it sends $M$.
|
| 607 |
+
\end{proof}
|
| 608 |
+
|
| 609 |
+
\begin{corollary} $\Aut_{A/P}(B/Q)$ is finite.
|
| 610 |
+
\end{corollary}
|
| 611 |
+
\begin{proof}
|
| 612 |
+
Two elements of $\Aut_{A/P}(B/Q)$ which agree once extended to automorphisms of $L$
|
| 613 |
+
must have already been equal, as $B/Q\subseteq L$. Hence the canonical map
|
| 614 |
+
from $\Aut_{A/P}(B/Q)$ to $\Aut_K(L)$ is injective.
|
| 615 |
+
\end{proof}
|
| 616 |
+
|
| 617 |
+
\section{Proof of surjectivity.}
|
| 618 |
+
|
| 619 |
+
\begin{definition} We fix once and for all some nonzero $y\in B/Q$ such that $M=K(y)$,
|
| 620 |
+
with $M$ the maximal separable subextension of $L/K$.
|
| 621 |
+
\end{definition}
|
| 622 |
+
|
| 623 |
+
Note that the existence of some $\lambda\in L$ with this property just comes from finite
|
| 624 |
+
and separable implies simple; we can use the ``clear denominator'' technique introduced
|
| 625 |
+
earlier to scale this by some nonzero $\alpha\in A$ into $B/Q$, as
|
| 626 |
+
$K(\lambda)=K(\alpha\lambda)$.
|
| 627 |
+
|
| 628 |
+
Here is a slightly delicate result whose proof I haven't thought too hard about.
|
| 629 |
+
\begin{theorem} There exists some $x\in B$ and $\alpha\in A$ with the following
|
| 630 |
+
properties.
|
| 631 |
+
\begin{enumerate}
|
| 632 |
+
\item $x=\alpha y$ mod $Q$ and $\alpha$ isn't zero mod $Q$.
|
| 633 |
+
\item $x\in Q'$ for all $Q'\not=Q$ in the $G$-orbit of $Q$.
|
| 634 |
+
\end{enumerate}
|
| 635 |
+
\end{theorem}
|
| 636 |
+
\begin{proof}
|
| 637 |
+
Idea. Localise away from P, then all the $Q_i$ are maximal, use CRT and then clear denominators.
|
| 638 |
+
\end{proof}
|
| 639 |
+
|
| 640 |
+
We now choose some $x\in B[1/S]$ which is $y$ modulo $Q$ and $0$ modulo all the other
|
| 641 |
+
primes of $B$ above $P$, and consider the monic degree $|G|$ polynomial $f$ in $K[X]$
|
| 642 |
+
with $x$ and its conjugates as roots. If $\sigma\in\Aut_K(L)$ then $\sigma(\overline{x})$
|
| 643 |
+
is a root of $f$ as $\sigma$ fixes $K$ pointwise. Hence $\sigma(\overline{x})=\overline{g(x)}$
|
| 644 |
+
for some $g\in G$, and because $\sigma(\overline{x})\not=0$ we have $\overline{g(x)}\not=0$
|
| 645 |
+
and hence $g(x)\notin Q[1/S]$. Hence $x\notin g^{-1} Q[1/S]$ and thus $g^{-1}Q=Q$ and $g\in SD_Q$.
|
| 646 |
+
Finally we have $\phi_g=\sigma$ on $K$ and on $y$, so they are equal on $M$ and hence on $L$ as
|
| 647 |
+
$L/M$ is purely inseparable.
|
| 648 |
+
|
| 649 |
+
This part of the argument seems weak.
|
| 650 |
+
-/
|
| 651 |
+
|
| 652 |
+
section L_over_K_stuff
|
| 653 |
+
|
| 654 |
+
-- Let's now make the right square. First `L`
|
| 655 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 656 |
+
-- Now top left triangle: A / P → B / Q → L commutes
|
| 657 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 658 |
+
-- now introduce K
|
| 659 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 660 |
+
-- now make bottom triangle commute
|
| 661 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 662 |
+
-- So now both squares commute.
|
| 663 |
+
|
| 664 |
+
-- do I need this?
|
| 665 |
+
-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 666 |
+
|
| 667 |
+
-- Do I need this:
|
| 668 |
+
-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]
|
| 669 |
+
|
| 670 |
+
variable [Nontrivial B]
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?
|
| 674 |
+
|
| 675 |
+
|
| 676 |
+
-- not sure if we need this but let's prove it just to check our setup is OK.
|
| 677 |
+
-- The claim is that the preimage of Q really is P (rather than just containing P)
|
| 678 |
+
-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,
|
| 679 |
+
-- so A/P -> B/Q must also be injective.
|
| 680 |
+
open IsScalarTower in
|
| 681 |
+
example : Ideal.comap (algebraMap A B) Q = P := by
|
| 682 |
+
ext x
|
| 683 |
+
simp only [Ideal.mem_comap]
|
| 684 |
+
rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']
|
| 685 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]
|
| 686 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]
|
| 687 |
+
rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]
|
| 688 |
+
rw [← algebraMap_apply A B (B ⧸ Q)]
|
| 689 |
+
rw [← algebraMap_apply (A ⧸ P) K L]
|
| 690 |
+
rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]
|
| 691 |
+
rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 692 |
+
|
| 693 |
+
open Polynomial BigOperators
|
| 694 |
+
|
| 695 |
+
open scoped algebraMap
|
| 696 |
+
|
| 697 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 698 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 699 |
+
|
| 700 |
+
theorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}
|
| 701 |
+
(hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry
|
| 702 |
+
|
| 703 |
+
theorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]
|
| 704 |
+
[IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):
|
| 705 |
+
IsAlgebraic K (IsLocalization.mk' S 1 x) := by
|
| 706 |
+
rw [← IsAlgebraic.invOf_iff, IsLocalization.invertible_mk'_one_invOf]
|
| 707 |
+
exact h
|
| 708 |
+
|
| 709 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 710 |
+
|
| 711 |
+
namespace Bourbaki52222
|
| 712 |
+
|
| 713 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in
|
| 714 |
+
variable (G) in
|
| 715 |
+
noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=
|
| 716 |
+
if x = 0 then monomial (Nat.card G) 1
|
| 717 |
+
else 37 -- this is not actually right. In the nonzero case you
|
| 718 |
+
-- clear denominators with a nonzero element of A, using
|
| 719 |
+
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
|
| 720 |
+
-- scaled appropriately.
|
| 721 |
+
|
| 722 |
+
theorem f_exists [DecidableEq L] (l : L) :
|
| 723 |
+
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
|
| 724 |
+
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
|
| 725 |
+
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
|
| 726 |
+
sorry
|
| 727 |
+
|
| 728 |
+
theorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :
|
| 729 |
+
(r : S) = (algebraMap R S) r := by
|
| 730 |
+
rfl
|
| 731 |
+
|
| 732 |
+
theorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]
|
| 733 |
+
[Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :
|
| 734 |
+
(algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := by
|
| 735 |
+
exact Eq.symm (IsScalarTower.algebraMap_apply R S T r)
|
| 736 |
+
|
| 737 |
+
theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]
|
| 738 |
+
[CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]
|
| 739 |
+
(h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := by
|
| 740 |
+
rw [Algebra.isAlgebraic_def]
|
| 741 |
+
let M := nonZeroDivisors R
|
| 742 |
+
intro x
|
| 743 |
+
have ⟨r, s, h'⟩ := IsLocalization.mk'_surjective M x
|
| 744 |
+
have : x = r * IsLocalization.mk' K 1 s := by
|
| 745 |
+
rw [← h', IsLocalization.mul_mk'_eq_mk'_of_mul]
|
| 746 |
+
simp
|
| 747 |
+
rw [this]
|
| 748 |
+
apply IsAlgebraic.mul (h r)
|
| 749 |
+
exact IsAlgebraic.invLoc (h s)
|
| 750 |
+
|
| 751 |
+
-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have
|
| 752 |
+
-- to introduce `f` anyway because we need not just that the extension is algebraic but
|
| 753 |
+
-- that every element satisfies a poly of degree <= |G|.
|
| 754 |
+
theorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]
|
| 755 |
+
[Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
|
| 756 |
+
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 757 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]
|
| 758 |
+
[IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 759 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 760 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 761 |
+
[Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]
|
| 762 |
+
[IsScalarTower A B L]
|
| 763 |
+
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by
|
| 764 |
+
apply @Algebra.isAlgebraic_of_subring_isAlgebraic (B ⧸ Q)
|
| 765 |
+
intro b_bar
|
| 766 |
+
have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar
|
| 767 |
+
have hb : (algebraMap B (B ⧸ Q)) b = b_bar := hb
|
| 768 |
+
use ((M hFull b).map (algebraMap A (A ⧸ P))).map (algebraMap (A ⧸ P) K)
|
| 769 |
+
constructor
|
| 770 |
+
. apply ne_zero_of_ne_zero_of_monic X_ne_zero
|
| 771 |
+
apply Monic.map
|
| 772 |
+
apply Monic.map
|
| 773 |
+
exact M_monic hFull b
|
| 774 |
+
. rw [← hb, algebraMap_cast, map_map, ← IsScalarTower.algebraMap_eq]
|
| 775 |
+
rw [algebraMap_algebraMap, aeval_def, eval₂_eq_eval_map, map_map, ← IsScalarTower.algebraMap_eq]
|
| 776 |
+
rw [IsScalarTower.algebraMap_eq A B L, ← map_map, M_spec_map]
|
| 777 |
+
rw [eval_map, eval₂_hom, F_eval_eq_zero]
|
| 778 |
+
exact algebraMap.coe_zero
|
| 779 |
+
|
| 780 |
+
include G in
|
| 781 |
+
theorem normal [DecidableEq L] : Normal K L := by
|
| 782 |
+
rw [normal_iff]
|
| 783 |
+
intro l
|
| 784 |
+
obtain ⟨f, hfmonic, _, hf, hfsplits⟩ := @f_exists G _ _ L _ K _ _ _ l
|
| 785 |
+
have hnz : f ≠ 0 := hfmonic.ne_zero
|
| 786 |
+
constructor
|
| 787 |
+
· rw [← isAlgebraic_iff_isIntegral]
|
| 788 |
+
exact ⟨f, hfmonic.ne_zero, hf⟩
|
| 789 |
+
refine Polynomial.splits_of_splits_of_dvd (algebraMap K L) hnz hfsplits ?_
|
| 790 |
+
exact minpoly.dvd _ _ hf
|
| 791 |
+
|
| 792 |
+
open Module
|
| 793 |
+
|
| 794 |
+
theorem separableClosure_finiteDimensional : FiniteDimensional K (separableClosure K L) := sorry
|
| 795 |
+
|
| 796 |
+
-- degree of max sep subextension is ≤ |G|
|
| 797 |
+
theorem separableClosure_finrank_le : finrank K (separableClosure K L) ≤ Nat.card G := sorry
|
| 798 |
+
|
| 799 |
+
open scoped IntermediateField
|
| 800 |
+
theorem primitive_element : ∃ y : L, K⟮y⟯ = separableClosure K L := sorry
|
| 801 |
+
|
| 802 |
+
-- this definition might break when primitive_element is proved because there will be
|
| 803 |
+
-- more hypotheses.
|
| 804 |
+
noncomputable def y : L := (primitive_element L K).choose
|
| 805 |
+
|
| 806 |
+
--noncomputable def y_spec : K⟮y⟯ = separableClosure K L := (primitive_element L K).choose_spec
|
| 807 |
+
|
| 808 |
+
end Bourbaki52222
|
| 809 |
+
|
| 810 |
+
end L_over_K_stuff
|
| 811 |
+
|
| 812 |
+
section main_theorem_statement
|
| 813 |
+
|
| 814 |
+
namespace Bourbaki52222
|
| 815 |
+
|
| 816 |
+
open scoped Pointwise
|
| 817 |
+
|
| 818 |
+
-- Basic API for what we're doing here. Writing down a map from the stabiliser of Q to
|
| 819 |
+
-- the residual Galois group `L ≃ₐ[K] L`, where L=Frac(B/Q) and K=Frac(A/P).
|
| 820 |
+
-- Hopefully sorrys aren't too hard
|
| 821 |
+
|
| 822 |
+
def quotientRingAction (Q' : Ideal B) (g : G) (hg : g • Q = Q') :
|
| 823 |
+
B ⧸ Q ≃+* B ⧸ Q' :=
|
| 824 |
+
Ideal.quotientEquiv Q Q' (MulSemiringAction.toRingEquiv G B g) hg.symm
|
| 825 |
+
|
| 826 |
+
def quotientAlgebraAction (g : G) (hg : g • Q = Q) : (B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q where
|
| 827 |
+
__ := quotientRingAction Q Q g hg
|
| 828 |
+
commutes' := by
|
| 829 |
+
intro a_bar; dsimp
|
| 830 |
+
have ⟨a, ha⟩ := Ideal.Quotient.mk_surjective a_bar
|
| 831 |
+
rw [quotientRingAction]; dsimp
|
| 832 |
+
rw [← ha, ← Ideal.Quotient.algebraMap_eq, algebraMap_algebraMap]
|
| 833 |
+
rw [@Ideal.quotientMap_algebraMap A B _ _ _ B _ Q Q _ ]
|
| 834 |
+
simp
|
| 835 |
+
|
| 836 |
+
def Pointwise.quotientAlgebraActionMonoidHom :
|
| 837 |
+
MulAction.stabilizer G Q →* ((B ⧸ Q) ≃ₐ[A ⧸ P] (B ⧸ Q)) where
|
| 838 |
+
toFun gh := quotientAlgebraAction Q P gh.1 gh.2
|
| 839 |
+
map_one' := by
|
| 840 |
+
apply AlgEquiv.ext
|
| 841 |
+
intro b_bar; dsimp
|
| 842 |
+
unfold quotientAlgebraAction
|
| 843 |
+
unfold quotientRingAction
|
| 844 |
+
have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar
|
| 845 |
+
rw [← hb, ← Ideal.Quotient.algebraMap_eq]
|
| 846 |
+
simp
|
| 847 |
+
map_mul' := by
|
| 848 |
+
intro ⟨x, hx⟩ ⟨y, hy⟩
|
| 849 |
+
apply AlgEquiv.ext
|
| 850 |
+
intro b_bar; dsimp
|
| 851 |
+
unfold quotientAlgebraAction
|
| 852 |
+
unfold quotientRingAction
|
| 853 |
+
have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar
|
| 854 |
+
rw [← hb, ← Ideal.Quotient.algebraMap_eq]
|
| 855 |
+
simp
|
| 856 |
+
rw [smul_smul]
|
| 857 |
+
|
| 858 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 859 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 860 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 861 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 862 |
+
|
| 863 |
+
|
| 864 |
+
|
| 865 |
+
noncomputable def IsFractionRing.algEquiv_lift (e : (B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q) : L ≃ₐ[K] L where
|
| 866 |
+
__ := IsFractionRing.ringEquivOfRingEquiv e.toRingEquiv
|
| 867 |
+
commutes' := by
|
| 868 |
+
intro k
|
| 869 |
+
dsimp
|
| 870 |
+
obtain ⟨x, y, _, rfl⟩ := @IsFractionRing.div_surjective (A ⧸ P) _ K _ _ _ k
|
| 871 |
+
simp [algebraMap_algebraMap]
|
| 872 |
+
unfold IsFractionRing.ringEquivOfRingEquiv
|
| 873 |
+
unfold IsLocalization.ringEquivOfRingEquiv
|
| 874 |
+
simp [IsScalarTower.algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 875 |
+
|
| 876 |
+
noncomputable def stabilizer.toGaloisGroup : MulAction.stabilizer G Q →* (L ≃ₐ[K] L) where
|
| 877 |
+
toFun gh := IsFractionRing.algEquiv_lift Q P L K (Pointwise.quotientAlgebraActionMonoidHom Q P gh)
|
| 878 |
+
map_one' := by
|
| 879 |
+
apply AlgEquiv.ext
|
| 880 |
+
intro l; simp
|
| 881 |
+
obtain ⟨x, y, _, rfl⟩ := @IsFractionRing.div_surjective (B ⧸ Q) _ L _ _ _ l
|
| 882 |
+
unfold IsFractionRing.algEquiv_lift
|
| 883 |
+
unfold IsFractionRing.ringEquivOfRingEquiv
|
| 884 |
+
simp
|
| 885 |
+
map_mul' := by
|
| 886 |
+
intro ⟨x, hx⟩ ⟨y, hy⟩
|
| 887 |
+
apply AlgEquiv.ext
|
| 888 |
+
intro l; dsimp
|
| 889 |
+
obtain ⟨r, s, _, rfl⟩ := @IsFractionRing.div_surjective (B ⧸ Q) _ L _ _ _ l
|
| 890 |
+
unfold IsFractionRing.algEquiv_lift
|
| 891 |
+
unfold IsFractionRing.ringEquivOfRingEquiv
|
| 892 |
+
simp
|
| 893 |
+
sorry
|
| 894 |
+
|
| 895 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 896 |
+
theorem MulAction.stabilizer_surjective_of_action : Function.Surjective
|
| 897 |
+
(stabilizer.toGaloisGroup Q P L K : MulAction.stabilizer G Q → (L ≃ₐ[K] L)) := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/input_messages_compress_3.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n\nprivate theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc\n g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _\n _ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)\n fun x ↦ smul_smul g x b\n\nBut the below proof works in general.\n-/\n\nprivate theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := sorry\n\ntheorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]\n (I : Ideal S) [hI : I.IsPrime] (f : R → S) :\n ∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := sorry\n\nend misc\n\n... [TRUNCATED] ...\n\nnamespace Bourbaki52222\n\nopen scoped Pointwise\n\n-- Basic API for what we're doing here. Writing down a map from the stabiliser of Q to\n-- the residual Galois group `L ≃ₐ[K] L`, where L=Frac(B/Q) and K=Frac(A/P).\n-- Hopefully sorrys aren't too hard\n\ndef quotientRingAction (Q' : Ideal B) (g : G) (hg : g • Q = Q') :\n B ⧸ Q ≃+* B ⧸ Q' :=\n Ideal.quotientEquiv Q Q' (MulSemiringAction.toRingEquiv G B g) hg.symm\n\ndef quotientAlgebraAction (g : G) (hg : g • Q = Q) : (B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q where\n __ := quotientRingAction Q Q g hg\n commutes' := by\n intro a_bar; dsimp\n have ⟨a, ha⟩ := Ideal.Quotient.mk_surjective a_bar\n rw [quotientRingAction]; dsimp\n rw [← ha, ← Ideal.Quotient.algebraMap_eq, algebraMap_algebraMap]\n rw [@Ideal.quotientMap_algebraMap A B _ _ _ B _ Q Q _ ]\n simp\n\ndef Pointwise.quotientAlgebraActionMonoidHom :\n MulAction.stabilizer G Q →* ((B ⧸ Q) ≃ₐ[A ⧸ P] (B ⧸ Q)) where\n toFun gh := quotientAlgebraAction Q P gh.1 gh.2\n map_one' := by\n apply AlgEquiv.ext\n intro b_bar; dsimp\n unfold quotientAlgebraAction\n unfold quotientRingAction\n have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar\n rw [← hb, ← Ideal.Quotient.algebraMap_eq]\n simp\n map_mul' := by\n intro ⟨x, hx⟩ ⟨y, hy⟩\n apply AlgEquiv.ext\n intro b_bar; dsimp\n unfold quotientAlgebraAction\n unfold quotientRingAction\n have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar\n rw [← hb, ← Ideal.Quotient.algebraMap_eq]\n simp\n rw [smul_smul]\n\nvariable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L]\n\nnoncomputable def IsFractionRing.algEquiv_lift (e : (B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q) : L ≃ₐ[K] L where\n __ := IsFractionRing.ringEquivOfRingEquiv e.toRingEquiv\n commutes' := by\n intro k\n dsimp\n obtain ⟨x, y, _, rfl⟩ := @IsFractionRing.div_surjective (A ⧸ P) _ K _ _ _ k\n simp [algebraMap_algebraMap]\n unfold IsFractionRing.ringEquivOfRingEquiv\n unfold IsLocalization.ringEquivOfRingEquiv\n simp [IsScalarTower.algebraMap_apply (A ⧸ P) (B ⧸ Q) L]\n\nnoncomputable def stabilizer.toGaloisGroup : MulAction.stabilizer G Q →* (L ≃ₐ[K] L) where\n toFun gh := IsFractionRing.algEquiv_lift Q P L K (Pointwise.quotientAlgebraActionMonoidHom Q P gh)\n map_one' := by\n apply AlgEquiv.ext\n intro l; simp\n obtain ⟨x, y, _, rfl⟩ := @IsFractionRing.div_surjective (B ⧸ Q) _ L _ _ _ l\n unfold IsFractionRing.algEquiv_lift\n unfold IsFractionRing.ringEquivOfRingEquiv\n simp\n map_mul' := by\n intro ⟨x, hx⟩ ⟨y, hy⟩\n apply AlgEquiv.ext\n intro l; dsimp\n obtain ⟨r, s, _, rfl⟩ := @IsFractionRing.div_surjective (B ⧸ Q) _ L _ _ _ l\n unfold IsFractionRing.algEquiv_lift\n unfold IsFractionRing.ringEquivOfRingEquiv\n simp\n sorry\n\nvariable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a) in\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nThe map $g\\mapsto \\phi _g$ from $D_Q$ to $\\operatorname{Aut}_K(L)$ defined above is surjective."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ stabilizer.toGaloisGroup g.toSemigroupAlgebra) := by sorry"}
|
| 3 |
+
{"prediction": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ quotientAlgebraAction g.1 g.2) := by sorry"}
|
| 4 |
+
{"prediction": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ (stabilizer.toGaloisGroup g).toMap) := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-8bcddfa94beb4903b5553e5c27a814b2",
|
| 3 |
+
"created": 1749028655,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "noncomputable def GaloisGroup.mk (G : Type*) [Group G] [MulSemiringAction G B]\n : G →+* (B ⧸ Q) ≃ₗ[K] B ⧸ Q where\n __ := MulSemiringAction.toRingEquiv G B\n commutes' ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "def frosh (g : G) : (B ⧸ Q) ≃ₗ[K] (B ⧸ Q) ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "theorem my_favorite_theorem : Function.Surjective (λ g ↦ stabilizer.toGaloisGroup g.toSemigroupAlgebra) ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "noncomputable def frobeniusConjugacyClass (F : Ideal B) : Ideal B ≃ₗ[K] Ideal.L where\n __ := Ideal.mk_surjective _ _\n commutes' ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "def frobeniusElement (g : G) (hg : g • Q = Q) : ((B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q)ˣ :=\n",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "noncomputable def frobeniusMap : MulAction.stabilizer G Q →* (L ≃ₗ[K] L) ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "def gToAuto (g : G) : (B ⧸ Q) ≃ₗ[K] (B ⧸ Q) ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def frobenius (g : G) : L ≃ₗ[K] L ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def frobeniusElements (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n (Q : Ideal B) [hQ : Ideal.IsPrime Q] (hQ1 : Q ≠ ⊥) (hQ2 : Q ≠ ⊤) :\n (MulAction.stabilizer G Q).Surjective ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "noncomputable def frobenius_element (g : G) : (B ⧸ Q) ≃ₗ[K] (B ⧸ Q) where\n __ := quotientAlgebraAction Q P g Pgh\n commutes' ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def frobenius (g : G) : L ≃ₗ[K] L ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "noncomputable def frobeniusMonoidHom (gh : Pointwise.quotientAlgebraActionMonoidHom Q P) : DihedralMonoidHom Q (B ⧸ Q) K L ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "noncomputable def frobenius conjugacy_class : MulAction.stabilizer G Q →* (L ≃ₐ[K] L) × conjugacy_class G (MulAction.stabilizer G Q) ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def frobenius (g : MulAction.stabilizer G Q) : (B ⧸ Q) ≃ₗ[K] (B ⧸ Q) ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def frobeniusMap (g : G) : (B ⧸ Q) ≃ₗ[K] L ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "noncomputable def frobenius (P : Ideal B) : G ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "noncomputable def frobenius_element (g : MulAction.stabilizer G Q) : (B ⧸ Q) ≃ₗ[K] B ⧸ Q ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def map_gh (gh : Pointwise.quotientAlgebraActionMonoidHom Q P) : (G →* (L ≃ₐ[K] L)) ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def frobenius (p : Ideal B) : G ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "noncomputable def frobeniusConjugacyClass : Ideal G (B ⧸ Q) ≃* Ideal G (B ⧸ Q) ⧸ span ({⟨1, by norm_num⟩} : Set (Ideal G (B ⧸ Q))) ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def frobenius conjugacyGroup : MulAction stabilizer G Q →* (L ≃ₗ[K] L) ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "noncomputable def frobenius conjugacyClass : (MulAction stabs G Q) →* ((B ⧸ Q) ≃ₐ[A ⧸ P] B ⧸ Q) ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "def frobenius_element (Q : Ideal B) : MulAction stably G Q :=\n",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "def frobenius_automorphism (p : Ideal B) : (B ⧸ p) ≃ₗ[K]ₗ[K] (B ⧸ p) ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "def isFrobenius (g : MulAction.stabilizer G Q) : Prop :=\n g.toMonoidHom ∘ g.toGaloisGroup = id ∧ g.toMonoidHom ∘ g.toGalL ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "noncomputable def frobenius conjugacyClass : Ideal B → G → Prop where\n intro Q g; apply instDecidablePredicates; intro _\n have : g • Q = Q ↔ ∃ a : A, a • Q = Q ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "noncomputable def frobenius (g : MulAction.stabilizer G Q) : (B ⧸ Q) ≃ₗ[K] L ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "theorem my_favorite_theorem : Function.Surjective (λ g ↦ quotientAlgebraAction g.1 g.2) ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "noncomputable def GaloisGroup : Type* := MulAction.stabilizer G Q\n\nnoncomputable def frobeniusElements : Type* := MulAction.stabilizer G Q\n\nnoncomputable def conjugacyClasses : Type* := MulAction.stabilizer G Q\n\nnoncomputable def LocalFrobenius : Type* := MulAction.stabilizer G Q\n\nnoncomputable def SeparableL closure : Type* := MulAction.stabilizer G Q\n\nnoncomputable def light Bulb : Type* := MulAction.stabilizer G Q\n\nnoncomputable defheavy Bulb : Type* := MulAction.stabilizer G Q\n\nnoncomputable def extensionVariables : Type* := MulAction.stabilizer G Q\n\nnoncomputable def sectionVariables : Type* := MulAction.stabilizer G Q\n\nnoncomputable def baseVariables : Type* := MulAction.stabilizer G Q\n\nnoncomputable def daydreamVariables : Type* := MulAction.stabilizer G Q\n\nnoncomputable def _root_.Ideal.IsPrime.mem_iff_exists : Ideal B → Prop ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "def frobeniusConjugacyClass : Ideal B → G → (Ideal B ⧸ span ({↑g, ↑g⁻¹} : Set (Ideal B))) ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] [Fintype G] : G ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def frobenius conj action : G →* (L ≃ₐ[K] L) ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def frobenius (P : Ideal B) (g : G) : B ⧸ P ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def frobenius (p : Ideal B) : G ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def Dijkstra_chosen_route (d : Dijkstra_graph (B ⧸ Q) L) : (B ⧸ Q) ≃ₗ[K] L ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def frobenius (Q : Ideal B) (g : G) : (B ⧸ Q) ≃ₗ[K] L where\n __ := Pointwise.quotientAlgebraActionMonoidHom Q P g\n commutes' ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "noncomputable def frobenius(L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L] (hQ : Q ≠ ⊥) (hP : P ≠ ⊥) : (B ⧸ Q) ≃ₗ[K] L ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "noncomputable def frobenius conjugacy : G ≃* (L ≃ₐ[K] L) ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def frobenius_element (Q : Ideal B) (hQ : Q.IsPrime) : (B ⧸ Q) ≃ₗ[K] L where\n __ := Pointwise.quotientAlgebraActionMonoidHom Q P\n commutes' ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def frobenius_element (g : MulAction.stabilizer G Q) : g ≃* (L ≃ₗ[K] L) where\n toFun g ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "noncomputable def frobenius_element (g : MulAction.stabilizer G Q) : (B ⧸ Q) ≃ₐ[K] L where\n __ := Pointwise.quotientAlgebraActionMonoidHom Q P g.toMonoidHom\n commutes' ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "theorem my_favorite_theorem : Function.Surjective (λ g ↦ (stabilizer.toGaloisGroup g).toMap) ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "noncomputable def frobeniusMonoidHom (Q : Ideal B) (g : G) : (B ⧸ Q) ≃ₗ[K] L where\n __ := Pointwise.quotientAlgebraActionMonoidHom Q P ( MulAction.mk_g hx )\n commutes' ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def D := Ideal.Quotient.mk Q Q gh.1 gh.2\n\nnoncomputable def Aut := IsFractionRing.ringEquivOfRingEquiv (Pointwise.quotientAlgebraActionMonoidHom Q P gh)\n\nnoncomputable def phi := Ideal.Quotient.mk_surjective\n\nnoncomputable def hD : ∀ g, g • phi = phi ↔ g = 1 ∨ g = gh.1 ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "def frobenius (g : G) : (B ⧸ Q) ≃ₗ[K] L ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def frobenius (Q : Ideal B) : Ideal B ≃ₗ[K] Ideal.B :=\n Ideal.mkHomIdealAlgebraUnit _ _ frobenius kaushalpah\n\nnoncomputable def frobenius conjugate : Ideal B ≃ₗ[K] Ideal.B ≃ₗ[K] Ideal.B ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "noncomputable def frobenius conjugacy class ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "def frobenius_element (F : Ideal B) : G ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "noncomputable def frobenius conjugacy_class : Ideal B → G → (Ideal B ≃ₗ[K] Ideal B) → Prop ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "noncomputable def frobenius_element (p : Ideal B) (g : G) : Ideal B ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 2258,
|
| 511 |
+
"prompt_tokens": 2239,
|
| 512 |
+
"total_tokens": 4497,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.MulAction.stabilizer_surjective_of_action/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ stabilizer.toGaloisGroup g.toSemigroupAlgebra) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ quotientAlgebraAction g.1 g.2) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": "theorem MulAction.stabilizer_surjective_of_action : Function.Surjective (λ g ↦ (stabilizer.toGaloisGroup g).toMap) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/ground_truth.lean
ADDED
|
@@ -0,0 +1,764 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 550 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 551 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by
|
| 552 |
+
obtain ⟨q, q_zero_coeff, q_eval_zero⟩ := Polynomial.nonzero_const_if_isIntegral R S s hs
|
| 553 |
+
use q.coeff 0
|
| 554 |
+
refine ⟨q_zero_coeff, ?_⟩
|
| 555 |
+
rw [← Polynomial.eval₂_X (algebraMap R S) s, ← dvd_neg, ← Polynomial.eval₂_C (algebraMap R S) s]
|
| 556 |
+
rw [← zero_add (-_), Mathlib.Tactic.RingNF.add_neg, ← q_eval_zero, ← Polynomial.eval₂_sub]
|
| 557 |
+
apply Polynomial.eval₂_dvd
|
| 558 |
+
exact Polynomial.X_dvd_sub_C
|
| 559 |
+
|
| 560 |
+
end B_mod_Q_over_A_mod_P_stuff
|
| 561 |
+
|
| 562 |
+
/-
|
| 563 |
+
\section{The extension $L/K$.}
|
| 564 |
+
|
| 565 |
+
\begin{theorem}
|
| 566 |
+
\label{foo1}
|
| 567 |
+
If $\lambda\in L$ then there's a monic polynomial $P_\lambda\in K[X]$ of degree $|G|$
|
| 568 |
+
with $\lambda$ as a root, and which splits completely in $L[X]$.
|
| 569 |
+
\end{theorem}
|
| 570 |
+
\begin{proof}
|
| 571 |
+
A general $\lambda\in L$ can be written as $\beta_1/\beta_2$ where $\beta_1,\beta_2\in B/Q$.
|
| 572 |
+
The previous corollary showed that there's some nonzero $\alpha\in A/P$ such that $\beta_2$
|
| 573 |
+
divides $\alpha$, and hence $\alpha\lambda\in B/Q$ (we just cleared denominators).
|
| 574 |
+
Thus $\alpha\lambda$ is a root of some monic polynomial $f(x)\in (A/P)[X]$,
|
| 575 |
+
by~\ref{MulSemiringAction.CharacteristicPolynomial.Mbar_eval_eq_zero}.
|
| 576 |
+
The polynomial $f(\alpha x)\in (A/P)[X]$ thus
|
| 577 |
+
has $\lambda$ as a root, but it is not monic; its leading term is $\alpha^n$.
|
| 578 |
+
Dividing through in $K[X]$ gives us the polynomial we seek.
|
| 579 |
+
\end{proof}
|
| 580 |
+
|
| 581 |
+
\begin{corollary} The extension $L/K$ is algebraic and normal.
|
| 582 |
+
\end{corollary}
|
| 583 |
+
\begin{proof} \uses{foo1}
|
| 584 |
+
Exercise using the previous theorem.
|
| 585 |
+
\end{proof}
|
| 586 |
+
|
| 587 |
+
Note that $L/K$ might not be separable and might have infinite degree. However
|
| 588 |
+
|
| 589 |
+
\begin{corollary} Any subextension of $L/K$ which is finite and separable over $K$
|
| 590 |
+
has degree at most $|G|$.
|
| 591 |
+
\end{corollary}
|
| 592 |
+
\begin{proof}
|
| 593 |
+
Finite and separable implies simple, and we've already seen that any
|
| 594 |
+
element of $L$ has degree at most $|G|$ over $K$.
|
| 595 |
+
\end{proof}
|
| 596 |
+
|
| 597 |
+
\begin{corollary} The maximal separable subextension $M$ of $L/K$ has degree at most $|G|$.
|
| 598 |
+
\end{corollary}
|
| 599 |
+
\begin{proof} If it has dimension greater than $|G|$ over $K$, then it has a finitely-generated
|
| 600 |
+
subfeld of $K$-dimension greater than $|G|$, and is finite and separable, contradicting
|
| 601 |
+
the previous result.
|
| 602 |
+
\end{proof}
|
| 603 |
+
|
| 604 |
+
\begin{corollary} $\Aut_K(L)$ is finite.
|
| 605 |
+
\end{corollary}
|
| 606 |
+
\begin{proof} Any $K$-automorphism of $L$ is determined by where it sends $M$.
|
| 607 |
+
\end{proof}
|
| 608 |
+
|
| 609 |
+
\begin{corollary} $\Aut_{A/P}(B/Q)$ is finite.
|
| 610 |
+
\end{corollary}
|
| 611 |
+
\begin{proof}
|
| 612 |
+
Two elements of $\Aut_{A/P}(B/Q)$ which agree once extended to automorphisms of $L$
|
| 613 |
+
must have already been equal, as $B/Q\subseteq L$. Hence the canonical map
|
| 614 |
+
from $\Aut_{A/P}(B/Q)$ to $\Aut_K(L)$ is injective.
|
| 615 |
+
\end{proof}
|
| 616 |
+
|
| 617 |
+
\section{Proof of surjectivity.}
|
| 618 |
+
|
| 619 |
+
\begin{definition} We fix once and for all some nonzero $y\in B/Q$ such that $M=K(y)$,
|
| 620 |
+
with $M$ the maximal separable subextension of $L/K$.
|
| 621 |
+
\end{definition}
|
| 622 |
+
|
| 623 |
+
Note that the existence of some $\lambda\in L$ with this property just comes from finite
|
| 624 |
+
and separable implies simple; we can use the ``clear denominator'' technique introduced
|
| 625 |
+
earlier to scale this by some nonzero $\alpha\in A$ into $B/Q$, as
|
| 626 |
+
$K(\lambda)=K(\alpha\lambda)$.
|
| 627 |
+
|
| 628 |
+
Here is a slightly delicate result whose proof I haven't thought too hard about.
|
| 629 |
+
\begin{theorem} There exists some $x\in B$ and $\alpha\in A$ with the following
|
| 630 |
+
properties.
|
| 631 |
+
\begin{enumerate}
|
| 632 |
+
\item $x=\alpha y$ mod $Q$ and $\alpha$ isn't zero mod $Q$.
|
| 633 |
+
\item $x\in Q'$ for all $Q'\not=Q$ in the $G$-orbit of $Q$.
|
| 634 |
+
\end{enumerate}
|
| 635 |
+
\end{theorem}
|
| 636 |
+
\begin{proof}
|
| 637 |
+
Idea. Localise away from P, then all the $Q_i$ are maximal, use CRT and then clear denominators.
|
| 638 |
+
\end{proof}
|
| 639 |
+
|
| 640 |
+
We now choose some $x\in B[1/S]$ which is $y$ modulo $Q$ and $0$ modulo all the other
|
| 641 |
+
primes of $B$ above $P$, and consider the monic degree $|G|$ polynomial $f$ in $K[X]$
|
| 642 |
+
with $x$ and its conjugates as roots. If $\sigma\in\Aut_K(L)$ then $\sigma(\overline{x})$
|
| 643 |
+
is a root of $f$ as $\sigma$ fixes $K$ pointwise. Hence $\sigma(\overline{x})=\overline{g(x)}$
|
| 644 |
+
for some $g\in G$, and because $\sigma(\overline{x})\not=0$ we have $\overline{g(x)}\not=0$
|
| 645 |
+
and hence $g(x)\notin Q[1/S]$. Hence $x\notin g^{-1} Q[1/S]$ and thus $g^{-1}Q=Q$ and $g\in SD_Q$.
|
| 646 |
+
Finally we have $\phi_g=\sigma$ on $K$ and on $y$, so they are equal on $M$ and hence on $L$ as
|
| 647 |
+
$L/M$ is purely inseparable.
|
| 648 |
+
|
| 649 |
+
This part of the argument seems weak.
|
| 650 |
+
-/
|
| 651 |
+
|
| 652 |
+
section L_over_K_stuff
|
| 653 |
+
|
| 654 |
+
-- Let's now make the right square. First `L`
|
| 655 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 656 |
+
-- Now top left triangle: A / P → B / Q → L commutes
|
| 657 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 658 |
+
-- now introduce K
|
| 659 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 660 |
+
-- now make bottom triangle commute
|
| 661 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 662 |
+
-- So now both squares commute.
|
| 663 |
+
|
| 664 |
+
-- do I need this?
|
| 665 |
+
-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 666 |
+
|
| 667 |
+
-- Do I need this:
|
| 668 |
+
-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]
|
| 669 |
+
|
| 670 |
+
variable [Nontrivial B]
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?
|
| 674 |
+
|
| 675 |
+
|
| 676 |
+
-- not sure if we need this but let's prove it just to check our setup is OK.
|
| 677 |
+
-- The claim is that the preimage of Q really is P (rather than just containing P)
|
| 678 |
+
-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,
|
| 679 |
+
-- so A/P -> B/Q must also be injective.
|
| 680 |
+
open IsScalarTower in
|
| 681 |
+
example : Ideal.comap (algebraMap A B) Q = P := by
|
| 682 |
+
ext x
|
| 683 |
+
simp only [Ideal.mem_comap]
|
| 684 |
+
rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']
|
| 685 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]
|
| 686 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]
|
| 687 |
+
rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]
|
| 688 |
+
rw [← algebraMap_apply A B (B ⧸ Q)]
|
| 689 |
+
rw [← algebraMap_apply (A ⧸ P) K L]
|
| 690 |
+
rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]
|
| 691 |
+
rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 692 |
+
|
| 693 |
+
open Polynomial BigOperators
|
| 694 |
+
|
| 695 |
+
open scoped algebraMap
|
| 696 |
+
|
| 697 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 698 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 699 |
+
|
| 700 |
+
theorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}
|
| 701 |
+
(hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry
|
| 702 |
+
|
| 703 |
+
theorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]
|
| 704 |
+
[IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):
|
| 705 |
+
IsAlgebraic K (IsLocalization.mk' S 1 x) := by
|
| 706 |
+
rw [← IsAlgebraic.invOf_iff, IsLocalization.invertible_mk'_one_invOf]
|
| 707 |
+
exact h
|
| 708 |
+
|
| 709 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 710 |
+
|
| 711 |
+
namespace Bourbaki52222
|
| 712 |
+
|
| 713 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in
|
| 714 |
+
variable (G) in
|
| 715 |
+
noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=
|
| 716 |
+
if x = 0 then monomial (Nat.card G) 1
|
| 717 |
+
else 37 -- this is not actually right. In the nonzero case you
|
| 718 |
+
-- clear denominators with a nonzero element of A, using
|
| 719 |
+
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
|
| 720 |
+
-- scaled appropriately.
|
| 721 |
+
|
| 722 |
+
theorem f_exists [DecidableEq L] (l : L) :
|
| 723 |
+
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
|
| 724 |
+
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
|
| 725 |
+
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
|
| 726 |
+
sorry
|
| 727 |
+
|
| 728 |
+
theorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :
|
| 729 |
+
(r : S) = (algebraMap R S) r := by
|
| 730 |
+
rfl
|
| 731 |
+
|
| 732 |
+
theorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]
|
| 733 |
+
[Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :
|
| 734 |
+
(algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := by
|
| 735 |
+
exact Eq.symm (IsScalarTower.algebraMap_apply R S T r)
|
| 736 |
+
|
| 737 |
+
theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]
|
| 738 |
+
[CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]
|
| 739 |
+
(h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := by
|
| 740 |
+
rw [Algebra.isAlgebraic_def]
|
| 741 |
+
let M := nonZeroDivisors R
|
| 742 |
+
intro x
|
| 743 |
+
have ⟨r, s, h'⟩ := IsLocalization.mk'_surjective M x
|
| 744 |
+
have : x = r * IsLocalization.mk' K 1 s := by
|
| 745 |
+
rw [← h', IsLocalization.mul_mk'_eq_mk'_of_mul]
|
| 746 |
+
simp
|
| 747 |
+
rw [this]
|
| 748 |
+
apply IsAlgebraic.mul (h r)
|
| 749 |
+
exact IsAlgebraic.invLoc (h s)
|
| 750 |
+
|
| 751 |
+
-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have
|
| 752 |
+
-- to introduce `f` anyway because we need not just that the extension is algebraic but
|
| 753 |
+
-- that every element satisfies a poly of degree <= |G|.
|
| 754 |
+
|
| 755 |
+
theorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]
|
| 756 |
+
[Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
|
| 757 |
+
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 758 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]
|
| 759 |
+
[IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 760 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 761 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 762 |
+
[Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]
|
| 763 |
+
[IsScalarTower A B L]
|
| 764 |
+
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/input_messages_compress_3.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n\nprivate theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc\n g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _\n... [TRUNCATED] ...\n\nvariable [Nontrivial B]\n\n-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?\n\n-- not sure if we need this but let's prove it just to check our setup is OK.\n-- The claim is that the preimage of Q really is P (rather than just containing P)\n-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,\n-- so A/P -> B/Q must also be injective.\nopen IsScalarTower in\nexample : Ideal.comap (algebraMap A B) Q = P := by\n ext x\n simp only [Ideal.mem_comap]\n rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]\n rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]\n rw [← algebraMap_apply A B (B ⧸ Q)]\n rw [← algebraMap_apply (A ⧸ P) K L]\n rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]\n rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]\n\nopen Polynomial BigOperators\n\nopen scoped algebraMap\n\nnoncomputable local instance : Algebra A[X] B[X] :=\n RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))\n\ntheorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}\n (hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry\n\ntheorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]\n [IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):\n IsAlgebraic K (IsLocalization.mk' S 1 x) := sorry\n\nopen MulSemiringAction.CharacteristicPolynomial\n\nnamespace Bourbaki52222\n\nvariable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in\nvariable (G) in\nnoncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\ntheorem f_exists [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := sorry\n\ntheorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :\n (r : S) = (algebraMap R S) r := sorry\n\ntheorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]\n [Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :\n (algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := sorry\n\ntheorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]\n [CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]\n (h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := sorry\n\n-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have\n-- to introduce `f` anyway because we need not just that the extension is algebraic but\n-- that every element satisfies a poly of degree <= |G|.\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nThe extension $L/K$ is algebraic."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem algebraic {R S : Type*} [CommRing R] [CommRing S] [Algebra R S]\n (x : S) : IsAlgebraic R x := by sorry"}
|
| 3 |
+
{"prediction": "theorem algebraic {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) :\n ∃ f : B[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ b : B, (∀ g : G, g • b = b) ↔ f.eval b = 0 := by sorry"}
|
| 4 |
+
{"prediction": "theorem algebraic {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G]\n [MulSemiringAction G B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∀ P : PrimeIdeal A, ∃ g : G, g • P = P ∧\n (∀ Q : PrimeIdeal B, Q.restrict A = P → ∃ f : B →ₗ[K] B, f.Monic ∧ f.degree = Nat.card G ∧\n f.eval^[Nat.card G] (Q : B) = 0 ∧ f.Splits (algebraMap A B)) := by sorry"}
|
| 5 |
+
{"prediction": "theorem algebraic {L K : Type*} [Field L] [Field K] [Algebra L K]\n (h : ∀ x : L, IsAlgebraic L x) : ∃ f : L[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ x : L, f.eval x = 0 ∧ f.Splits (algebraMap L K) := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-ca32060811c64726ae560ab2130b5418",
|
| 3 |
+
"created": 1749028674,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "noncomputable def froshman (A : Type*) [CommRing A] (B : Type*) [CommRing B]\n [Algebra A B] (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n : G → B → Prop :=\n",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n {G : Type*} [Group G] [MulSemiringAction G B] : G ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "noncomputable def frobeniusElement : G ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "def frosh (A : Type*) [CommRing A] (x : A) : A[X]ˣ ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "noncomputable def extension (A : Type*) (B : Type*) (h :Algebra A B) : Prop ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "noncomputable def extension_isAlgebraic (L : Type*) [Field L] (k : Type*) [Field k]\n [Algebra k L] [IsSeparable k L] : Algebra.IsAlgebraic k L ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def froshmanRingHom {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] :\n IsAlgebraic A B ∧ ∀ (P : PrimeIdeal A), PrimeIdeal.mk P B → PrimeIdeal.mk P B :=\n",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "theorem algebraMap.mk {R S : Type*} [CommRing R] [CommRing S] [Algebra R S]\n (x : S) : IsAlgebraic R x ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "noncomputable def preimageOfIdeal (I : Ideal B) : Ideal A :=\n let G := Ideal.endmakersOf B I\n let R := Ideal.fractionRingOf B I\n let K := Ideal.subringOf B I\n let F := Ideal.mk R G K\n let h := Ideal.mkCoroutine AKarta R G K\n let contr := Ideal.mkContraction AKarta R G K\n let preimage := h ∘ contr\n preimage\n\ndef froshman_class_ofIdeal (I : Ideal B) : Ideal G :=\n let R := Ideal.fractionRingOf B I\n let K := Ideal.subringOf B I\n let f := Ideal.mk R K\n let froshman_class := Ideal.mk AKarta f\n froshman_class\n\ndef froshman_class_ofAlgebra (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (I : Ideal B) : Ideal G :=\n let R := Ideal.fractionRingOf B I\n let K := Ideal.subringOf B I\n let f := Ideal.mk R K\n let froshman_class := Ideal.mk AKarta f\n froshman_class\n\ndef froshman_class_ofAlgebra_AKarta {A : Type*} {B : Type*} [CommRing A] [CommRing B]\n (h : CommRingHom AKarta) (I : Ideal B) : Ideal G :=\n",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def frobenius_element : G → B[X] ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "noncomputable def Frobenius_element (G : Type*) [Group G] [Fintype G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] : G → B ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "noncomputable def Frobenius_ELEMENT (R : Type*) [Field R] [Fintype R] (P : Prime R) : R ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def extension_isAlgebraic {K L : Type*} [CommRing K] [CommRing L] [Algebra K L]\n [IsSeparable K L] : Prop ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def frobenius (G : Type*) [Group G] [MulSemiringAction G B] : B → B :=\n",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "noncomputable def frobenius_element : G → B[X] ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A] [Algebra A B] (P : Ideal A) (hP : Prime P) : G ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (P : Ideal B) : G ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def frobenius_element (p : B) : G ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "def frosh (R : Type*) [CommRing R] (P : Prime R) : R → R :=\n",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def GaloisGroup (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A]\n (h : CommRingAction G A) : Type* ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (b : B) : G ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B] : G ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "def frosh (G : Type*) [Group G] [Finite G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] (l : L) : G →* B[X]ˣ :=\n",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable def GaloisGroup : Type* ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "def Frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] : G → B ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "noncomputable def localizedAlgebra {R K : Type*} [CommRing R] [CommRing K] [Algebra R K]\n (h : ∀ x : R, IsAlgebraic K (x : K)) : IsAlgebraic R K ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) :\n ∃ f : B[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ b : B, (∀ g : G, g • b = b) ↔ f.eval b = 0 ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G]\n [MulSemiringAction G B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∀ P : PrimeIdeal A, ∃ g : G, g • P = P ∧\n (∀ Q : PrimeIdeal B, Q.restrict A = P → ∃ f : B →ₗ[K] B, f.Monic ∧ f.degree = Nat.card G ∧\n f.eval^[Nat.card G] (Q : B) = 0 ∧ f.Splits (algebraMap A B)) :=\n",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def galoisGroup (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n (A : Type*) [CommRing A] [Algebra A B] : Type* := MulSemiringAction RCSymmGroup G B A\n\nnoncomputable def frobeniusMap (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n (A : Type*) [CommRing A] [Algebra A B] : Type* := MulSemiringAction RCSymmGroup G B A\n\ndef galoisGroup føb : (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n (A : Type*) [CommRing A] [Algebra A B] × (A : Type*) [CommRing A] [Algebra A B] → Type* ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def preimage (g : G) (x : B) : B ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B] : G ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (B : Type*) [CommRing B]\n (h : G →+* B) : G →+* B ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def frobenius_element : G →+* B[X] ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] : G ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "theorem my_favorite_theorem {L K : Type*} [Field L] [Field K] [Algebra L K]\n (h : ∀ x : L, IsAlgebraic L x) : ∃ f : L[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ x : L, f.eval x = 0 ∧ f.Splits (algebraMap L K) ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "def Frobenius (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B] (G : Type*) [Group G] [MulSemiringAction G B] : G → B ≃* B ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "length",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def preimage_of_residueFieldExtensionPolynomial (p : Polynomial K) : Ideal K :=\n if p.Monic then Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n else Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom (p * (monomial p.natDegree 1)))\n\nnoncomputable def conjugateOfResidueFieldExtensionPolynomial (p : Polynomial K) : Ideal K :=\n if p.Monic then Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n else Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom (p * (monomial p.natDegree 1)))\n\nnoncomputable def frobeniusOfResidueFieldExtensionPolynomial (p : Polynomial K) : Ideal K :=\n Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n\nnoncomputable def quotientOfResidueFieldExtensionPolynomial (p : Polynomial K) : Ideal K :=\n Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n\nnoncomputable def _mkIdealFrom [CommRing R] [CommRing L] (p : Polynomial L) : Ideal R :=\n Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n\nnoncomputable def _mkIdealFrom [CommRing R] [CommRing L] [Algebra R L] (p : Polynomial L) : Ideal R :=\n Ideal.mk (p.natDegree : ℕ) (Ideal.mapRingHom p)\n\nnoncomputable def mkIdealFrom [CommRing R] [CommRing L] [Algebra R L] (p : Polynomial L) : Ideal R :=\n if p.Monic then _mkIdealFrom R L p\n else _mkIdealFrom R L (p * (monomial p.natDegree 1))\n\nnoncomputable def frobeniusOfIdeal (H : Ideal B) : Ideal B :=\n if H.Monic then mkIdealFrom B (B ⧸ H) ((Ideal.mk B) : Ideal B → Ideal (B ⧸ H))\n else mkIdealFrom B (B ⧸ H) ((Ideal.mk B) * (monomial (Ideal.natDegree H) 1))\n\nnoncomputable def conjugateOfIdeal (H : Ideal B) : Ideal B :=\n if H.Monic then mkIdealFrom",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def frobenius (G : Type*) [Group G] [Finite G] (x : B) : B :=\n let card := Nat.card G\n let v ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (l : L) : G ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "def Frobenius_element (R : Type*) [CommRing R] [Fintype G] : R →ₗ[Monoid G] R ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "noncomputable def Frobenius_element (G : Type*) [Group G] (B : Type*) [CommRing B]\n (g : G) : B ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def GaloisGroup : Type* ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "noncomputable def frobenius_element (P : PrimeIdeal A) (F : G) : G :=\n",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B]\n (P : Ideal B) [inst : P.Prime] : G ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A]\n (hAlgebra : Algebra A B) (hSemiringAction : MulSemiringAction G B) : A ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "def Frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def frobenius_element (G : Type*) [Group G] (B : Type*) [CommRing B] [Algebra G B]\n [Fintype G] : G ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "noncomputable def Frobenius (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] : B[X] ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 3175,
|
| 511 |
+
"prompt_tokens": 1975,
|
| 512 |
+
"total_tokens": 5150,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.algebraic/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": "theorem algebraic {R S : Type*} [CommRing R] [CommRing S] [Algebra R S]\n (x : S) : IsAlgebraic R x := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": "theorem algebraic {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) :\n ∃ f : B[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ b : B, (∀ g : G, g • b = b) ↔ f.eval b = 0 := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 29 |
+
{"lean_code": "theorem algebraic {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G]\n [MulSemiringAction G B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∀ P : PrimeIdeal A, ∃ g : G, g • P = P ∧\n (∀ Q : PrimeIdeal B, Q.restrict A = P → ∃ f : B →ₗ[K] B, f.Monic ∧ f.degree = Nat.card G ∧\n f.eval^[Nat.card G] (Q : B) = 0 ∧ f.Splits (algebraMap A B)) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": "theorem algebraic {L K : Type*} [Field L] [Field K] [Algebra L K]\n (h : ∀ x : L, IsAlgebraic L x) : ∃ f : L[X], f.Monic ∧ f.degree = Nat.card G ∧\n ∀ x : L, f.eval x = 0 ∧ f.Splits (algebraMap L K) := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/ground_truth.lean
ADDED
|
@@ -0,0 +1,725 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 550 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 551 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by
|
| 552 |
+
obtain ⟨q, q_zero_coeff, q_eval_zero⟩ := Polynomial.nonzero_const_if_isIntegral R S s hs
|
| 553 |
+
use q.coeff 0
|
| 554 |
+
refine ⟨q_zero_coeff, ?_⟩
|
| 555 |
+
rw [← Polynomial.eval₂_X (algebraMap R S) s, ← dvd_neg, ← Polynomial.eval₂_C (algebraMap R S) s]
|
| 556 |
+
rw [← zero_add (-_), Mathlib.Tactic.RingNF.add_neg, ← q_eval_zero, ← Polynomial.eval₂_sub]
|
| 557 |
+
apply Polynomial.eval₂_dvd
|
| 558 |
+
exact Polynomial.X_dvd_sub_C
|
| 559 |
+
|
| 560 |
+
end B_mod_Q_over_A_mod_P_stuff
|
| 561 |
+
|
| 562 |
+
/-
|
| 563 |
+
\section{The extension $L/K$.}
|
| 564 |
+
|
| 565 |
+
\begin{theorem}
|
| 566 |
+
\label{foo1}
|
| 567 |
+
If $\lambda\in L$ then there's a monic polynomial $P_\lambda\in K[X]$ of degree $|G|$
|
| 568 |
+
with $\lambda$ as a root, and which splits completely in $L[X]$.
|
| 569 |
+
\end{theorem}
|
| 570 |
+
\begin{proof}
|
| 571 |
+
A general $\lambda\in L$ can be written as $\beta_1/\beta_2$ where $\beta_1,\beta_2\in B/Q$.
|
| 572 |
+
The previous corollary showed that there's some nonzero $\alpha\in A/P$ such that $\beta_2$
|
| 573 |
+
divides $\alpha$, and hence $\alpha\lambda\in B/Q$ (we just cleared denominators).
|
| 574 |
+
Thus $\alpha\lambda$ is a root of some monic polynomial $f(x)\in (A/P)[X]$,
|
| 575 |
+
by~\ref{MulSemiringAction.CharacteristicPolynomial.Mbar_eval_eq_zero}.
|
| 576 |
+
The polynomial $f(\alpha x)\in (A/P)[X]$ thus
|
| 577 |
+
has $\lambda$ as a root, but it is not monic; its leading term is $\alpha^n$.
|
| 578 |
+
Dividing through in $K[X]$ gives us the polynomial we seek.
|
| 579 |
+
\end{proof}
|
| 580 |
+
|
| 581 |
+
\begin{corollary} The extension $L/K$ is algebraic and normal.
|
| 582 |
+
\end{corollary}
|
| 583 |
+
\begin{proof} \uses{foo1}
|
| 584 |
+
Exercise using the previous theorem.
|
| 585 |
+
\end{proof}
|
| 586 |
+
|
| 587 |
+
Note that $L/K$ might not be separable and might have infinite degree. However
|
| 588 |
+
|
| 589 |
+
\begin{corollary} Any subextension of $L/K$ which is finite and separable over $K$
|
| 590 |
+
has degree at most $|G|$.
|
| 591 |
+
\end{corollary}
|
| 592 |
+
\begin{proof}
|
| 593 |
+
Finite and separable implies simple, and we've already seen that any
|
| 594 |
+
element of $L$ has degree at most $|G|$ over $K$.
|
| 595 |
+
\end{proof}
|
| 596 |
+
|
| 597 |
+
\begin{corollary} The maximal separable subextension $M$ of $L/K$ has degree at most $|G|$.
|
| 598 |
+
\end{corollary}
|
| 599 |
+
\begin{proof} If it has dimension greater than $|G|$ over $K$, then it has a finitely-generated
|
| 600 |
+
subfeld of $K$-dimension greater than $|G|$, and is finite and separable, contradicting
|
| 601 |
+
the previous result.
|
| 602 |
+
\end{proof}
|
| 603 |
+
|
| 604 |
+
\begin{corollary} $\Aut_K(L)$ is finite.
|
| 605 |
+
\end{corollary}
|
| 606 |
+
\begin{proof} Any $K$-automorphism of $L$ is determined by where it sends $M$.
|
| 607 |
+
\end{proof}
|
| 608 |
+
|
| 609 |
+
\begin{corollary} $\Aut_{A/P}(B/Q)$ is finite.
|
| 610 |
+
\end{corollary}
|
| 611 |
+
\begin{proof}
|
| 612 |
+
Two elements of $\Aut_{A/P}(B/Q)$ which agree once extended to automorphisms of $L$
|
| 613 |
+
must have already been equal, as $B/Q\subseteq L$. Hence the canonical map
|
| 614 |
+
from $\Aut_{A/P}(B/Q)$ to $\Aut_K(L)$ is injective.
|
| 615 |
+
\end{proof}
|
| 616 |
+
|
| 617 |
+
\section{Proof of surjectivity.}
|
| 618 |
+
|
| 619 |
+
\begin{definition} We fix once and for all some nonzero $y\in B/Q$ such that $M=K(y)$,
|
| 620 |
+
with $M$ the maximal separable subextension of $L/K$.
|
| 621 |
+
\end{definition}
|
| 622 |
+
|
| 623 |
+
Note that the existence of some $\lambda\in L$ with this property just comes from finite
|
| 624 |
+
and separable implies simple; we can use the ``clear denominator'' technique introduced
|
| 625 |
+
earlier to scale this by some nonzero $\alpha\in A$ into $B/Q$, as
|
| 626 |
+
$K(\lambda)=K(\alpha\lambda)$.
|
| 627 |
+
|
| 628 |
+
Here is a slightly delicate result whose proof I haven't thought too hard about.
|
| 629 |
+
\begin{theorem} There exists some $x\in B$ and $\alpha\in A$ with the following
|
| 630 |
+
properties.
|
| 631 |
+
\begin{enumerate}
|
| 632 |
+
\item $x=\alpha y$ mod $Q$ and $\alpha$ isn't zero mod $Q$.
|
| 633 |
+
\item $x\in Q'$ for all $Q'\not=Q$ in the $G$-orbit of $Q$.
|
| 634 |
+
\end{enumerate}
|
| 635 |
+
\end{theorem}
|
| 636 |
+
\begin{proof}
|
| 637 |
+
Idea. Localise away from P, then all the $Q_i$ are maximal, use CRT and then clear denominators.
|
| 638 |
+
\end{proof}
|
| 639 |
+
|
| 640 |
+
We now choose some $x\in B[1/S]$ which is $y$ modulo $Q$ and $0$ modulo all the other
|
| 641 |
+
primes of $B$ above $P$, and consider the monic degree $|G|$ polynomial $f$ in $K[X]$
|
| 642 |
+
with $x$ and its conjugates as roots. If $\sigma\in\Aut_K(L)$ then $\sigma(\overline{x})$
|
| 643 |
+
is a root of $f$ as $\sigma$ fixes $K$ pointwise. Hence $\sigma(\overline{x})=\overline{g(x)}$
|
| 644 |
+
for some $g\in G$, and because $\sigma(\overline{x})\not=0$ we have $\overline{g(x)}\not=0$
|
| 645 |
+
and hence $g(x)\notin Q[1/S]$. Hence $x\notin g^{-1} Q[1/S]$ and thus $g^{-1}Q=Q$ and $g\in SD_Q$.
|
| 646 |
+
Finally we have $\phi_g=\sigma$ on $K$ and on $y$, so they are equal on $M$ and hence on $L$ as
|
| 647 |
+
$L/M$ is purely inseparable.
|
| 648 |
+
|
| 649 |
+
This part of the argument seems weak.
|
| 650 |
+
-/
|
| 651 |
+
|
| 652 |
+
section L_over_K_stuff
|
| 653 |
+
|
| 654 |
+
-- Let's now make the right square. First `L`
|
| 655 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 656 |
+
-- Now top left triangle: A / P → B / Q → L commutes
|
| 657 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 658 |
+
-- now introduce K
|
| 659 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 660 |
+
-- now make bottom triangle commute
|
| 661 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 662 |
+
-- So now both squares commute.
|
| 663 |
+
|
| 664 |
+
-- do I need this?
|
| 665 |
+
-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 666 |
+
|
| 667 |
+
-- Do I need this:
|
| 668 |
+
-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]
|
| 669 |
+
|
| 670 |
+
variable [Nontrivial B]
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?
|
| 674 |
+
|
| 675 |
+
|
| 676 |
+
-- not sure if we need this but let's prove it just to check our setup is OK.
|
| 677 |
+
-- The claim is that the preimage of Q really is P (rather than just containing P)
|
| 678 |
+
-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,
|
| 679 |
+
-- so A/P -> B/Q must also be injective.
|
| 680 |
+
open IsScalarTower in
|
| 681 |
+
example : Ideal.comap (algebraMap A B) Q = P := by
|
| 682 |
+
ext x
|
| 683 |
+
simp only [Ideal.mem_comap]
|
| 684 |
+
rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']
|
| 685 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]
|
| 686 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]
|
| 687 |
+
rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]
|
| 688 |
+
rw [← algebraMap_apply A B (B ⧸ Q)]
|
| 689 |
+
rw [← algebraMap_apply (A ⧸ P) K L]
|
| 690 |
+
rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]
|
| 691 |
+
rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 692 |
+
|
| 693 |
+
open Polynomial BigOperators
|
| 694 |
+
|
| 695 |
+
open scoped algebraMap
|
| 696 |
+
|
| 697 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 698 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 699 |
+
|
| 700 |
+
theorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}
|
| 701 |
+
(hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry
|
| 702 |
+
|
| 703 |
+
theorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]
|
| 704 |
+
[IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):
|
| 705 |
+
IsAlgebraic K (IsLocalization.mk' S 1 x) := by
|
| 706 |
+
rw [← IsAlgebraic.invOf_iff, IsLocalization.invertible_mk'_one_invOf]
|
| 707 |
+
exact h
|
| 708 |
+
|
| 709 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 710 |
+
|
| 711 |
+
namespace Bourbaki52222
|
| 712 |
+
|
| 713 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in
|
| 714 |
+
variable (G) in
|
| 715 |
+
noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=
|
| 716 |
+
if x = 0 then monomial (Nat.card G) 1
|
| 717 |
+
else 37 -- this is not actually right. In the nonzero case you
|
| 718 |
+
-- clear denominators with a nonzero element of A, using
|
| 719 |
+
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
|
| 720 |
+
-- scaled appropriately.
|
| 721 |
+
|
| 722 |
+
|
| 723 |
+
theorem f_exists [DecidableEq L] (l : L) :
|
| 724 |
+
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
|
| 725 |
+
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/input_messages_compress_3.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n... [TRUNCATED] ...\n\n-- Let's now make the right square. First `L`\nvariable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n -- Now top left triangle: A / P → B / Q → L commutes\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]\n -- now introduce K\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n -- now make bottom triangle commute\n [Algebra K L] [IsScalarTower (A ⧸ P) K L]\n -- So now both squares commute.\n\n-- do I need this?\n-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n\n-- Do I need this:\n-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]\n\nvariable [Nontrivial B]\n\n-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?\n\n-- not sure if we need this but let's prove it just to check our setup is OK.\n-- The claim is that the preimage of Q really is P (rather than just containing P)\n-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,\n-- so A/P -> B/Q must also be injective.\nopen IsScalarTower in\nexample : Ideal.comap (algebraMap A B) Q = P := by\n ext x\n simp only [Ideal.mem_comap]\n rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]\n rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]\n rw [← algebraMap_apply A B (B ⧸ Q)]\n rw [← algebraMap_apply (A ⧸ P) K L]\n rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]\n rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]\n\nopen Polynomial BigOperators\n\nopen scoped algebraMap\n\nnoncomputable local instance : Algebra A[X] B[X] :=\n RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))\n\ntheorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}\n (hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry\n\ntheorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]\n [IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):\n IsAlgebraic K (IsLocalization.mk' S 1 x) := sorry\n\nopen MulSemiringAction.CharacteristicPolynomial\n\nnamespace Bourbaki52222\n\nvariable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in\nvariable (G) in\nnoncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nIf $\\lambda \\in L$ then there’s a monic polynomial $P_\\lambda \\in K[X]$ of degree $|G|$ with $\\lambda $ as a root, and which splits completely in $L[X]$."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem f_exists {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n [SMulCommClass G A B] {P : Ideal A} :\n (∀ (g : G), g • frobeniusElement P = frobeniusElement P) ↔\n ∃ (F : frobeniusConjugacyClass P), F.Normal := by sorry"}
|
| 3 |
+
{"prediction": "theorem f_exists {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B] {x : B} (hx : IsAlgebraic A x) :\n ∃ (P : Polynomial B) (hx : P.Monic) (hP : P.degree = Nat.card G)\n (hP1 : P.eval x = 0) (hP2 : ∀ g : G, P.eval (g • x) = 0)\n (hP3 : ∀ i : Fin (Nat.card G), P.derivative.eval (x + i * 1) = 0) := by sorry"}
|
| 4 |
+
{"prediction": "theorem f_exists {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (lambda : B) : ∃ P : Polynomial B, P.Monic ∧ P.degree = Nat.card G ∧\n lambda ∈ P.roots ∧ P.Splits := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-7b901a00995e46b699f702d3c64efb9a",
|
| 3 |
+
"created": 1749028678,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def froshenberg {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] :\n ∃ froshenberg : G → B, ∀ g : G, froshenberg g = g ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (g : G) : G :=\n",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "def frosh (L : Type*) [Field L] [DecidableEq L] (G : Type*) [Group G] [Finite G] [MulSemiringAction G L] : Prop ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "noncomputable def Frobenius_element (G : Type*) [Group G] [Finite G] (A : Type*) [CommRing A]\n (hA : IsField A) (B : Type*) [CommRing B] [Algebra A B] (hAB : IsIntegral A B)\n (P : Polynomial B) (hP : P.Monic) (hP1 : P.degree = Nat.card G) (hP2 : P.eval 1 = 0)\n (hP3 : ∀ g : G, P.eval (g : B) = 0) :\n ∃ g : G, g • P = P ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (P : Ideal G) : G :=\n",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G :=\n",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B] : G ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] [MulSemiringAction G B]\n : G ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def frobenius (G : Type*) [Group G] [MulSemiringAction G B] : G →* B[X] :=\n",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A]\n [Algebra A B] [MulSemiringAction G B] : G ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "length",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def FrobeniusConjugacyClass (G : Type*) [Group G] (P : Ideal G) : Ideal G := Ideal.mk\n (IdealExpressible.mk P) (IdealQuotient.mk P)\n\ndef Separable frosh : Ideal G → Prop := IdealExpressible.froshIdeal Separable.mkIdealExpressibleIdealQuotientIdeal.mkIdeal Separable.froshIdeal.mkIdealExpressibleIdealQuotientIdeal.mkIdealSeparable\n\nnoncomputable def froshIdeal.mkIdealExpressibleIdealQuotientIdeal.mkIdealSeparableIdealExpressibleIdealQuotientIdeal.mkIdeal frosh := Ideal.mkIdealExpressibleIdealQuotientIdeal.mkIdealSeparableIdealExpressibleIdealQuotientIdeal.mkIdealIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.froshIdeal.fro",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "noncomputable def frobenius_element (P : Ideal B) : Ideal B ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [MulSemiringAction G B] [Finite G] :\n ∃ (x : B), (∀ (g : G), g • x = x) ∧\n (∀ (P : Polynomial B), P.Monic ∧ P.degree = Nat.card G ∧\n (∀ (g : G), g • P.eval x = P.eval x)) ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def frobeniusElement {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] : G :=\n",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "def frobenius_element (G : Type*) [Group G] (hG : Finite G) (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] (hAB : CommRingAlgebra.mk A B)\n (P : Ideal A) [Prime P] : Ideal B :=\n",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "noncomputable def frobeniusElement (P : Ideal A) : Ideal B :=\n Ideal.map algebraMap A B (P)\n\nnoncomputable def frobeniusConjugacyClass (P : Ideal A) : Ideal G :=\n Ideal.map algebraMap A G (P)\n\ntheorem my_favorite_theorem {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n [SMulCommClass G A B] {P : Ideal A} :\n (∀ (g : G), g • frobeniusElement P = frobeniusElement P) ↔\n ∃ (F : frobeniusConjugacyClass P), F.Normal ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "def frobeniusElement (P : Ideal A) : Ideal G ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] [MulSemiringAction G B] : G ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (a : A) : G :=\n",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "def frobenius (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A] [Algebra A B] (P : Ideal A) (hP : Ideal.IsPrime P) : Ideal B ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (p : G) : G ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] (P : Ideal G) : G :=\n",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "noncomputable def frobenius (A : Type*) [CommRing A] [Algebra A B] (G : Type*) [Group G] [MulSemiringAction G B] : G →* G ≃* G ≃* G →* G ≃* G ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] (h : G →* B) : G →* B :=\n",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B]\n (P : Ideal B) (hP : P.Prime) : G :=\n",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] [Fintype G] :\n ∃ F : G, ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a)\n : G →* (B ⧸ Q)ˣ :=\n",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B] {x : B} (hx : IsAlgebraic A x) :\n ∃ (P : Polynomial B) (hx : P.Monic) (hP : P.degree = Nat.card G)\n (hP1 : P.eval x = 0) (hP2 : ∀ g : G, P.eval (g • x) = 0)\n (hP3 : ∀ i : Fin (Nat.card G), P.derivative.eval (x + i * 1) = 0) ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "noncomputable def frobenius (x : G) : G[X] ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "def frobeniusElement {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G]\n [MulSemiringAction G B] : G → B ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "def frobenius_element (P : Ideal A) : Ideal G ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [MulSemiringAction G B]\n : G ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def frobenius (P : Ideal B) : Ideal B :=\n let frobenius := Ideal.Quotient.mk' B P\n let extend := Ideal.Algebra.mk' B frobenius\n let frobenius' := Ideal.map extend (Ideal Frobenius.mk')\n frobenius'\n\ndef frobeniusGroup : G → Ideal B → Ideal B ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def frobenius conjugacy_class (p : Subgroup G) : G ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def frobenius_element (A : Type*) [CommRing A] [Fintype G] : G :=\n",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (P : Ideal B) : G :=\n",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "noncomputable def frobenius (G : Type*) [Group G] [MulSemiringAction G B] : G →* B ≃+*\n G →* B ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] {A B : Type*} [CommRing A] [CommRing B]\n [Algebra A B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∃ F : G, ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "def frobenius_element {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n [GaloisGroup G : MulSemiringAction G B] : G :=\n",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (a : A) : G :=\n",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "noncomputable def Frobenius conjugacyClass {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) : G ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "def frobenius_element {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] [Fintype G] :\n ∃ x : B, ∀ g : G, x * g = g * x :=\n",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "noncomputable def FrobeniusElement (G : Type*) [Group G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] (h : G →*+* B) : G :=\n",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "def frobenius (P : Polynomial A) : Polynomial A :=\n let frobenius := Polynomial.mapRingHom (Algebra.toRingHom)\n let X := frobenius X\n let replaceX := Polynomial.monomial (Polynomial.natDegree P) X\n let clearCoeffs := Polynomial.map (fun n : ℕ => if n = 0 then 1 else 0) P\n clearCoeffs.comp replaceX",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "noncomputable def FrobeniusElement (G : Type*) [Group G] (hG : Finite G) (B : Type*) [CommRing B] [Algebra G B] : G → B[X] :=\n",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def frobeniusElement (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n (AB : CommRingHom A B) : G ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "def frosh (G : Type*) [Group G] [Finite G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] (P : Ideal A) [IsPrime P]\n (hP : P = monomial (Nat.card G) 1) : Ideal B :=\n",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "noncomputable def FrobeniusElement (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A] [Algebra A B] : G → B[X] ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def FrobeniusElement {A : Type*} {B : Type*} {G : Type*} [CommRing A] [CommRing B]\n [Group G] [MulSemiringAction G B] (hG : Finite G) :\n ∃ x : B, (∀ g : G, g • x = x) ∧\n ∃ F : G → B, (∀ g : G, F g • x = x) ∧\n (∀ g : G, F g = g) ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (lambda : B) : ∃ P : Polynomial B, P.Monic ∧ P.degree = Nat.card G ∧\n lambda ∈ P.roots ∧ P.Splits ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 3456,
|
| 511 |
+
"prompt_tokens": 1810,
|
| 512 |
+
"total_tokens": 5266,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.f_exists/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": "theorem f_exists {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n [SMulCommClass G A B] {P : Ideal A} :\n (∀ (g : G), g • frobeniusElement P = frobeniusElement P) ↔\n ∃ (F : frobeniusConjugacyClass P), F.Normal := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": "theorem f_exists {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B] {x : B} (hx : IsAlgebraic A x) :\n ∃ (P : Polynomial B) (hx : P.Monic) (hP : P.degree = Nat.card G)\n (hP1 : P.eval x = 0) (hP2 : ∀ g : G, P.eval (g • x) = 0)\n (hP3 : ∀ i : Fin (Nat.card G), P.derivative.eval (x + i * 1) = 0) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": "theorem f_exists {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (lambda : B) : ∃ P : Polynomial B, P.Monic ∧ P.degree = Nat.card G ∧\n lambda ∈ P.roots ∧ P.Splits := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/ground_truth.lean
ADDED
|
@@ -0,0 +1,781 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 550 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 551 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by
|
| 552 |
+
obtain ⟨q, q_zero_coeff, q_eval_zero⟩ := Polynomial.nonzero_const_if_isIntegral R S s hs
|
| 553 |
+
use q.coeff 0
|
| 554 |
+
refine ⟨q_zero_coeff, ?_⟩
|
| 555 |
+
rw [← Polynomial.eval₂_X (algebraMap R S) s, ← dvd_neg, ← Polynomial.eval₂_C (algebraMap R S) s]
|
| 556 |
+
rw [← zero_add (-_), Mathlib.Tactic.RingNF.add_neg, ← q_eval_zero, ← Polynomial.eval₂_sub]
|
| 557 |
+
apply Polynomial.eval₂_dvd
|
| 558 |
+
exact Polynomial.X_dvd_sub_C
|
| 559 |
+
|
| 560 |
+
end B_mod_Q_over_A_mod_P_stuff
|
| 561 |
+
|
| 562 |
+
/-
|
| 563 |
+
\section{The extension $L/K$.}
|
| 564 |
+
|
| 565 |
+
\begin{theorem}
|
| 566 |
+
\label{foo1}
|
| 567 |
+
If $\lambda\in L$ then there's a monic polynomial $P_\lambda\in K[X]$ of degree $|G|$
|
| 568 |
+
with $\lambda$ as a root, and which splits completely in $L[X]$.
|
| 569 |
+
\end{theorem}
|
| 570 |
+
\begin{proof}
|
| 571 |
+
A general $\lambda\in L$ can be written as $\beta_1/\beta_2$ where $\beta_1,\beta_2\in B/Q$.
|
| 572 |
+
The previous corollary showed that there's some nonzero $\alpha\in A/P$ such that $\beta_2$
|
| 573 |
+
divides $\alpha$, and hence $\alpha\lambda\in B/Q$ (we just cleared denominators).
|
| 574 |
+
Thus $\alpha\lambda$ is a root of some monic polynomial $f(x)\in (A/P)[X]$,
|
| 575 |
+
by~\ref{MulSemiringAction.CharacteristicPolynomial.Mbar_eval_eq_zero}.
|
| 576 |
+
The polynomial $f(\alpha x)\in (A/P)[X]$ thus
|
| 577 |
+
has $\lambda$ as a root, but it is not monic; its leading term is $\alpha^n$.
|
| 578 |
+
Dividing through in $K[X]$ gives us the polynomial we seek.
|
| 579 |
+
\end{proof}
|
| 580 |
+
|
| 581 |
+
\begin{corollary} The extension $L/K$ is algebraic and normal.
|
| 582 |
+
\end{corollary}
|
| 583 |
+
\begin{proof} \uses{foo1}
|
| 584 |
+
Exercise using the previous theorem.
|
| 585 |
+
\end{proof}
|
| 586 |
+
|
| 587 |
+
Note that $L/K$ might not be separable and might have infinite degree. However
|
| 588 |
+
|
| 589 |
+
\begin{corollary} Any subextension of $L/K$ which is finite and separable over $K$
|
| 590 |
+
has degree at most $|G|$.
|
| 591 |
+
\end{corollary}
|
| 592 |
+
\begin{proof}
|
| 593 |
+
Finite and separable implies simple, and we've already seen that any
|
| 594 |
+
element of $L$ has degree at most $|G|$ over $K$.
|
| 595 |
+
\end{proof}
|
| 596 |
+
|
| 597 |
+
\begin{corollary} The maximal separable subextension $M$ of $L/K$ has degree at most $|G|$.
|
| 598 |
+
\end{corollary}
|
| 599 |
+
\begin{proof} If it has dimension greater than $|G|$ over $K$, then it has a finitely-generated
|
| 600 |
+
subfeld of $K$-dimension greater than $|G|$, and is finite and separable, contradicting
|
| 601 |
+
the previous result.
|
| 602 |
+
\end{proof}
|
| 603 |
+
|
| 604 |
+
\begin{corollary} $\Aut_K(L)$ is finite.
|
| 605 |
+
\end{corollary}
|
| 606 |
+
\begin{proof} Any $K$-automorphism of $L$ is determined by where it sends $M$.
|
| 607 |
+
\end{proof}
|
| 608 |
+
|
| 609 |
+
\begin{corollary} $\Aut_{A/P}(B/Q)$ is finite.
|
| 610 |
+
\end{corollary}
|
| 611 |
+
\begin{proof}
|
| 612 |
+
Two elements of $\Aut_{A/P}(B/Q)$ which agree once extended to automorphisms of $L$
|
| 613 |
+
must have already been equal, as $B/Q\subseteq L$. Hence the canonical map
|
| 614 |
+
from $\Aut_{A/P}(B/Q)$ to $\Aut_K(L)$ is injective.
|
| 615 |
+
\end{proof}
|
| 616 |
+
|
| 617 |
+
\section{Proof of surjectivity.}
|
| 618 |
+
|
| 619 |
+
\begin{definition} We fix once and for all some nonzero $y\in B/Q$ such that $M=K(y)$,
|
| 620 |
+
with $M$ the maximal separable subextension of $L/K$.
|
| 621 |
+
\end{definition}
|
| 622 |
+
|
| 623 |
+
Note that the existence of some $\lambda\in L$ with this property just comes from finite
|
| 624 |
+
and separable implies simple; we can use the ``clear denominator'' technique introduced
|
| 625 |
+
earlier to scale this by some nonzero $\alpha\in A$ into $B/Q$, as
|
| 626 |
+
$K(\lambda)=K(\alpha\lambda)$.
|
| 627 |
+
|
| 628 |
+
Here is a slightly delicate result whose proof I haven't thought too hard about.
|
| 629 |
+
\begin{theorem} There exists some $x\in B$ and $\alpha\in A$ with the following
|
| 630 |
+
properties.
|
| 631 |
+
\begin{enumerate}
|
| 632 |
+
\item $x=\alpha y$ mod $Q$ and $\alpha$ isn't zero mod $Q$.
|
| 633 |
+
\item $x\in Q'$ for all $Q'\not=Q$ in the $G$-orbit of $Q$.
|
| 634 |
+
\end{enumerate}
|
| 635 |
+
\end{theorem}
|
| 636 |
+
\begin{proof}
|
| 637 |
+
Idea. Localise away from P, then all the $Q_i$ are maximal, use CRT and then clear denominators.
|
| 638 |
+
\end{proof}
|
| 639 |
+
|
| 640 |
+
We now choose some $x\in B[1/S]$ which is $y$ modulo $Q$ and $0$ modulo all the other
|
| 641 |
+
primes of $B$ above $P$, and consider the monic degree $|G|$ polynomial $f$ in $K[X]$
|
| 642 |
+
with $x$ and its conjugates as roots. If $\sigma\in\Aut_K(L)$ then $\sigma(\overline{x})$
|
| 643 |
+
is a root of $f$ as $\sigma$ fixes $K$ pointwise. Hence $\sigma(\overline{x})=\overline{g(x)}$
|
| 644 |
+
for some $g\in G$, and because $\sigma(\overline{x})\not=0$ we have $\overline{g(x)}\not=0$
|
| 645 |
+
and hence $g(x)\notin Q[1/S]$. Hence $x\notin g^{-1} Q[1/S]$ and thus $g^{-1}Q=Q$ and $g\in SD_Q$.
|
| 646 |
+
Finally we have $\phi_g=\sigma$ on $K$ and on $y$, so they are equal on $M$ and hence on $L$ as
|
| 647 |
+
$L/M$ is purely inseparable.
|
| 648 |
+
|
| 649 |
+
This part of the argument seems weak.
|
| 650 |
+
-/
|
| 651 |
+
|
| 652 |
+
section L_over_K_stuff
|
| 653 |
+
|
| 654 |
+
-- Let's now make the right square. First `L`
|
| 655 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 656 |
+
-- Now top left triangle: A / P → B / Q → L commutes
|
| 657 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 658 |
+
-- now introduce K
|
| 659 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 660 |
+
-- now make bottom triangle commute
|
| 661 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 662 |
+
-- So now both squares commute.
|
| 663 |
+
|
| 664 |
+
-- do I need this?
|
| 665 |
+
-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 666 |
+
|
| 667 |
+
-- Do I need this:
|
| 668 |
+
-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]
|
| 669 |
+
|
| 670 |
+
variable [Nontrivial B]
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?
|
| 674 |
+
|
| 675 |
+
|
| 676 |
+
-- not sure if we need this but let's prove it just to check our setup is OK.
|
| 677 |
+
-- The claim is that the preimage of Q really is P (rather than just containing P)
|
| 678 |
+
-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,
|
| 679 |
+
-- so A/P -> B/Q must also be injective.
|
| 680 |
+
open IsScalarTower in
|
| 681 |
+
example : Ideal.comap (algebraMap A B) Q = P := by
|
| 682 |
+
ext x
|
| 683 |
+
simp only [Ideal.mem_comap]
|
| 684 |
+
rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']
|
| 685 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]
|
| 686 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]
|
| 687 |
+
rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]
|
| 688 |
+
rw [← algebraMap_apply A B (B ⧸ Q)]
|
| 689 |
+
rw [← algebraMap_apply (A ⧸ P) K L]
|
| 690 |
+
rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]
|
| 691 |
+
rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 692 |
+
|
| 693 |
+
open Polynomial BigOperators
|
| 694 |
+
|
| 695 |
+
open scoped algebraMap
|
| 696 |
+
|
| 697 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 698 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 699 |
+
|
| 700 |
+
theorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}
|
| 701 |
+
(hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry
|
| 702 |
+
|
| 703 |
+
theorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]
|
| 704 |
+
[IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):
|
| 705 |
+
IsAlgebraic K (IsLocalization.mk' S 1 x) := by
|
| 706 |
+
rw [← IsAlgebraic.invOf_iff, IsLocalization.invertible_mk'_one_invOf]
|
| 707 |
+
exact h
|
| 708 |
+
|
| 709 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 710 |
+
|
| 711 |
+
namespace Bourbaki52222
|
| 712 |
+
|
| 713 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in
|
| 714 |
+
variable (G) in
|
| 715 |
+
noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=
|
| 716 |
+
if x = 0 then monomial (Nat.card G) 1
|
| 717 |
+
else 37 -- this is not actually right. In the nonzero case you
|
| 718 |
+
-- clear denominators with a nonzero element of A, using
|
| 719 |
+
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
|
| 720 |
+
-- scaled appropriately.
|
| 721 |
+
|
| 722 |
+
theorem f_exists [DecidableEq L] (l : L) :
|
| 723 |
+
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
|
| 724 |
+
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
|
| 725 |
+
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
|
| 726 |
+
sorry
|
| 727 |
+
|
| 728 |
+
theorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :
|
| 729 |
+
(r : S) = (algebraMap R S) r := by
|
| 730 |
+
rfl
|
| 731 |
+
|
| 732 |
+
theorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]
|
| 733 |
+
[Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :
|
| 734 |
+
(algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := by
|
| 735 |
+
exact Eq.symm (IsScalarTower.algebraMap_apply R S T r)
|
| 736 |
+
|
| 737 |
+
theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]
|
| 738 |
+
[CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]
|
| 739 |
+
(h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := by
|
| 740 |
+
rw [Algebra.isAlgebraic_def]
|
| 741 |
+
let M := nonZeroDivisors R
|
| 742 |
+
intro x
|
| 743 |
+
have ⟨r, s, h'⟩ := IsLocalization.mk'_surjective M x
|
| 744 |
+
have : x = r * IsLocalization.mk' K 1 s := by
|
| 745 |
+
rw [← h', IsLocalization.mul_mk'_eq_mk'_of_mul]
|
| 746 |
+
simp
|
| 747 |
+
rw [this]
|
| 748 |
+
apply IsAlgebraic.mul (h r)
|
| 749 |
+
exact IsAlgebraic.invLoc (h s)
|
| 750 |
+
|
| 751 |
+
-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have
|
| 752 |
+
-- to introduce `f` anyway because we need not just that the extension is algebraic but
|
| 753 |
+
-- that every element satisfies a poly of degree <= |G|.
|
| 754 |
+
theorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]
|
| 755 |
+
[Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
|
| 756 |
+
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 757 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]
|
| 758 |
+
[IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 759 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 760 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 761 |
+
[Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]
|
| 762 |
+
[IsScalarTower A B L]
|
| 763 |
+
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by
|
| 764 |
+
apply @Algebra.isAlgebraic_of_subring_isAlgebraic (B ⧸ Q)
|
| 765 |
+
intro b_bar
|
| 766 |
+
have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar
|
| 767 |
+
have hb : (algebraMap B (B ⧸ Q)) b = b_bar := hb
|
| 768 |
+
use ((M hFull b).map (algebraMap A (A ⧸ P))).map (algebraMap (A ⧸ P) K)
|
| 769 |
+
constructor
|
| 770 |
+
. apply ne_zero_of_ne_zero_of_monic X_ne_zero
|
| 771 |
+
apply Monic.map
|
| 772 |
+
apply Monic.map
|
| 773 |
+
exact M_monic hFull b
|
| 774 |
+
. rw [← hb, algebraMap_cast, map_map, ← IsScalarTower.algebraMap_eq]
|
| 775 |
+
rw [algebraMap_algebraMap, aeval_def, eval₂_eq_eval_map, map_map, ← IsScalarTower.algebraMap_eq]
|
| 776 |
+
rw [IsScalarTower.algebraMap_eq A B L, ← map_map, M_spec_map]
|
| 777 |
+
rw [eval_map, eval₂_hom, F_eval_eq_zero]
|
| 778 |
+
exact algebraMap.coe_zero
|
| 779 |
+
|
| 780 |
+
include G
|
| 781 |
+
theorem normal [DecidableEq L] : Normal K L := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/input_messages_compress_3.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n\nprivate theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc\n g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _\n _ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)\n... [TRUNCATED] ...\n ext x\n simp only [Ideal.mem_comap]\n rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]\n rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]\n rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]\n rw [← algebraMap_apply A B (B ⧸ Q)]\n rw [← algebraMap_apply (A ⧸ P) K L]\n rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]\n rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]\n\nopen Polynomial BigOperators\n\nopen scoped algebraMap\n\nnoncomputable local instance : Algebra A[X] B[X] :=\n RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))\n\ntheorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}\n (hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry\n\ntheorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]\n [IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):\n IsAlgebraic K (IsLocalization.mk' S 1 x) := sorry\n\nopen MulSemiringAction.CharacteristicPolynomial\n\nnamespace Bourbaki52222\n\nvariable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in\nvariable (G) in\nnoncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\ntheorem f_exists [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := sorry\n\ntheorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :\n (r : S) = (algebraMap R S) r := sorry\n\ntheorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]\n [Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :\n (algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := sorry\n\ntheorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]\n [CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]\n (h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := sorry\n\n-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have\n-- to introduce `f` anyway because we need not just that the extension is algebraic but\n-- that every element satisfies a poly of degree <= |G|.\ntheorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := sorry\n\ninclude G in\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nThe extension $L/K$ is normal."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry"}
|
| 3 |
+
{"prediction": "theorem normal {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P Q : Ideal A) (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : P = Q): ∃ F : (A ⧸ P) ⧸ Q, F ^ (Nat.card G) = 1 ∧ ∀ x : (A ⧸ P) ⧸ Q, x ^ (Nat.card G) = 1 → ∃ g : G, F = g := by sorry"}
|
| 4 |
+
{"prediction": "theorem normal [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by sorry"}
|
| 5 |
+
{"prediction": "theorem normal (H : Subgroup G) [Finite G] (hH : H ≠ ⊤) :\n IsNormalcyGroup G H := by sorry"}
|
| 6 |
+
{"prediction": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower R S T] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry"}
|
| 7 |
+
{"prediction": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A)\n [P.IsPrime] [Algebra (A ⧸ P) B] [IsScalarTower A (A ⧸ P) B]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): IsNormal (Algebra.toFractionRing A B) := by sorry"}
|
| 8 |
+
{"prediction": "theorem normal {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry"}
|
| 9 |
+
{"prediction": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime]\n (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower M S T]\n (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L] (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a):\n Normal L := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-a14aa0cb6d264063b9ec6f0724a2d430",
|
| 3 |
+
"created": 1749028670,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "noncomputable def extension_is_normal (L : Type*) [Field L] [Algebra A L] : Prop :=\n",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "noncomputable def NormalExtension (L : Type*) [Field L] (k : Type*) [Field k] : Prop :=\n let L_ALLOC ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "def galoisGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [Finite G] [MulSemiringAction G B] : G →* G ≃* G ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "theorem my_favorite_theorem {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P Q : Ideal A) (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : P = Q): ∃ F : (A ⧸ P) ⧸ Q, F ^ (Nat.card G) = 1 ∧ ∀ x : (A ⧸ P) ⧸ Q, x ^ (Nat.card G) = 1 → ∃ g : G, F = g ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] {B : Type*} [CommRing B] [Algebra A B]\n {P : Ideal A} [P.IsPrime] {Q : Ideal B} [Q.IsPrime] (hP : P = Q.restrict A) :\n ∃ f : G, f ^ (Nat.card G) = 1 ∧ ∀ x : B, f • x = x ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "def frobenius_element (p : G) : G ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def isFrobenius (A : Type*) [CommRing A] [IsFractionRing A L] [Algebra A L]\n (G : Type*) [Group G] [Finite G] [MulSemiringAction G L] : Prop :=\n",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def Frobenius conjugacyClass {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime]\n (hP : P ≠ ⊥) (hP1 : P ≠ ⊤) : G →* G ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "def frobenius_element (R : Type*) [CommRing R] [Fintype G] : G → R ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (b : B) : G :=\n",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "def isFrobenius (A : Type*) (B : Type*) (G : Type*) (P : Ideal A) (Q : Ideal B) : Prop ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\ntheorem f_exists [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G →* B ≃* G ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] {B : Type*} [CommRing B] [Algebra G B] : G ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] (A : Type*) [CommRing A]\n (B : Type*) [CommRing B] [Algebra A B] : G →* B ≃* G :=\n",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "noncomputable def GaloisGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] : Type* := G\n\nnoncomputable def frobenius (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] (x : GaloisGroup A B G) : G ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "noncomputable def extension_is_normal [DecidableEq L] [Field L] (l : L) : Prop :=\n",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def frobenius conjugacy_classes : G → Set (B ⧸ Q)ˣ ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "theorem normalcy_group (H : Subgroup G) [Finite G] (hH : H ≠ ⊤) :\n IsNormalcyGroup G H ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def monomial {K : Type*} [Field K] (n : ℕ) (a : K) : Polynomial K ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (g : G) : G ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (P : Ideal G) : G :=\n",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "noncomputable def Frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B] : G :=\n",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower R S T] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "def frobenius conjugacy_class : G → Ideal B → Prop ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "length",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "noncomputable def Extensionsb : Type* := Extensionsb.mk (@CommRing sb) (@CommRing L) (@Algebra sb L)\n\nnoncomputable def Separable sb : Type* := Separable.mk (@CommRing sb) (@CommRing L) (@Algebra sb L)\n\nnoncomputable def ResidueField $ L $ K : Type* := ResidueField.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def InertiaGroup $ G $ Q : Type* := InertiaGroup.mk (@Group G) (@Ideal Q)\n\nnoncomputable def FrobeniusConjugacyClass $ G $ P : Type* := frobeniusConjugacyClass.mk (@Group G) (@Ideal P)\n\nnoncomputable def frobenius_element $ G $ Q : Type* := frobenius_element.mk (@Group G) (@Ideal Q)\n\nnoncomputable def frobenius_element mk : Type* := frobenius_element.mk (@Group G) (@Ideal Q)\n\nnoncomputable def separateVariables $ L $ K : Type* := separateVariables.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def algebraicVariables $ L $ K : Type* := algebraicVariables.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def algebraicVariables.mk : Type* := algebraicVariables.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def quotient.mk : Type* := quotient.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def finprod.mk : Type* := finprod.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def galoisGroup $ L $ K : Type* := GaloisGroup.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def frobeniusElement $ G $ P : Type* := frobeniusElement.mk (@Group G) (@Ideal P)\n\nnoncomputable def frobeniusElement.mk : Type* := frobeniusElement.mk (@Group G) (@Ideal P)\n\nnoncomputable def count.mk : Type* := count.mk (@CommRing L) (@CommRing K) (@Algebra L K)\n\nnoncomputable def univ.mk : Type* := univ.mk (@CommRing L) (@CommRing K)",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "noncomputable def Frobenius G [Group G] [Fintype G] {B : Type*} [CommRing B] [Algebra G B]\n : G → B ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A)\n [P.IsPrime] [Algebra (A ⧸ P) B] [IsScalarTower A (A ⧸ P) B]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): IsNormal (Algebra.toFractionRing A B) ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {L : Type*} [Field L] [Algebra G L] {P : Ideal G} [P.IsPrime] : G ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def isFrobenius (g : G) (b : B) : Prop :=\n ∀ (x : B), g • x = x ↔ ∃ a : A, x = a\n\nnoncomputable def frobeniusGroup : Set G := {g : G | ∀ (b : B), isFrobenius g b}\n\nnoncomputable def frobeniusConjugacy : G → Prop :=\n",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] (h : ∀ b : B, (∀ g : G, g • b = b) → ∃ a : A, b = a) :\n ∃ g : G, IsFrobenius g ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] (P : Ideal A) [P.IsPrime] (h : ∀ (g : G), g • P = P) : G ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def frobenius_element {A : Type*} {B : Type*} {G : Type*} [CommRing A] [CommRing B] [MulSemiringAction G B] [Group G] [Finite G] : G ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G →* B ≃* G ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def frobenius (p : Polynomial K) : Polynomial K :=\n p.compRingHom K (Polynomial.X ^ (Nat.card G))\n\ntheorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "def frobenius_element (R : Type*) [CommRing R] (G : Type*) [Group G] [Finite G]\n [MulSemiringAction G R] (P : Ideal R) [P.IsPrime] : G ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "noncomputable def baseFieldOf (R : Type*) [Field R] (x : R) : Type* := R\n\nnoncomputable def extensionFieldOf (R : Type*) [Field R] [Algebra R L] (x : R) : Type* := L\n\nnoncomputable def FrobeniusElement (R : Type*) [Field R] [Algebra R L] (x : R) : R[X] ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def conjugate (g : G) : Polynomial K = by ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def frobenius_element {A : Type*} {B : Type*} {G : Type*} [CommRing A] [CommRing B]\n [Group G] [MulSemiringAction G B] [Algebra A B] [Fintype G] : G ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] (B : Type*) [CommRing B] [Algebra G B]\n : G ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "def isFrobenius (G : Type*) [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (x : G) : Prop :=\n",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] (B : Type*) [CommRing B] [Algebra G B] : G ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [MulSemiringAction G B] : G → B ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "length",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "def frobeniusElement (g : G) : Ideal B :=Ideal.mk (Algebra.toRingHom K L) (Ideal.Quotient.mk' (B ⧸ (Ideal.mapRingHom (Algebra.toRingHom K L))) (Ideal.Quotient.mk' (A ⧸ (Ideal.mapRingHom (Algebra.toRingHom K L))) (Ideal.Quotient.mk' (B ⧸ Q) L))) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))))\n\nnoncomputable def conjugacyClass (g : G) : Ideal G :=Ideal.mk (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))))\n\ndef frobeniusConjugacyClass : Ideal G :=Ideal.mk (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.mapRingHom (Algebra.toRingHom K L)))) (Ideal.comap (Ideal.mapRingHom (Algebra.toRingHom K L)) (Ideal.comap (Ideal.mapRingHom (Algebra.to",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def GaloisGroup (A B : Type*) (hAB : Nontrivial B ∧ CommRing A ∧ Algebra A B) : Type* :=\n if |G| = 1 then G else (G ⧸ Subgroup.closure {x : G | ∃ b : B, x • b = b}) --see Bourbaki 52222 for the uses of `if` in defining Galois groups\n\ndef frobenius_element (A B : Type*) [CommRing A] [Algebra A B] (P : Ideal A) [P.IsPrime]\n (hP : P ≠ ⊤) : GaloisGroup A B →* (B ⧸ P)ˣ :=\n",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "noncomputable def counternormal_extension (L : Type*) [Field L] (h : Counternormal L) : Prop := ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime]\n (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower M S T]\n (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L] (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a):\n Normal L ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def Frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B]\n (P : Ideal B) [P.IsPrime] : G ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "noncomputable def baseChange {A B : Type*} {G : Type*} [CommRing A] [CommRing B]\n [MulSemiringAction G B] [Group G] : B →ₗ[A] B :=\n",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 4759,
|
| 511 |
+
"prompt_tokens": 2245,
|
| 512 |
+
"total_tokens": 7004,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.normal/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": "theorem normal {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P Q : Ideal A) (hP : P.IsPrime) (hQ : Q.IsPrime) (hPQ : P = Q): ∃ F : (A ⧸ P) ⧸ Q, F ^ (Nat.card G) = 1 ∧ ∀ x : (A ⧸ P) ⧸ Q, x ^ (Nat.card G) = 1 → ∃ g : G, F = g := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": "theorem normal [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": "theorem normal (H : Subgroup G) [Finite G] (hH : H ≠ ⊤) :\n IsNormalcyGroup G H := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower R S T] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A)\n [P.IsPrime] [Algebra (A ⧸ P) B] [IsScalarTower A (A ⧸ P) B]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): IsNormal (Algebra.toFractionRing A B) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": "theorem normal {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": "theorem normal {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime]\n (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower M S T]\n (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]\n [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L] (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a):\n Normal L := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/ground_truth.lean
ADDED
|
@@ -0,0 +1,798 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Jou Glasheen. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Jou Glasheen, Amelia Livingston, Jujian Zhang, Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.FieldTheory.Cardinality
|
| 7 |
+
import Mathlib.RingTheory.DedekindDomain.Ideal
|
| 8 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 9 |
+
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
|
| 10 |
+
import Mathlib.RingTheory.Ideal.Pointwise
|
| 11 |
+
import Mathlib.RingTheory.Ideal.Over
|
| 12 |
+
import Mathlib.FieldTheory.Normal
|
| 13 |
+
import Mathlib.FieldTheory.SeparableClosure
|
| 14 |
+
import Mathlib.RingTheory.OreLocalization.Ring
|
| 15 |
+
|
| 16 |
+
/-!
|
| 17 |
+
|
| 18 |
+
# Frobenius elements.
|
| 19 |
+
|
| 20 |
+
This file proves a general result in commutative algebra which can be used to define Frobenius
|
| 21 |
+
elements of Galois groups of local or fields (for example number fields).
|
| 22 |
+
|
| 23 |
+
KB was alerted to this very general result (which needs no Noetherian or finiteness assumptions
|
| 24 |
+
on the rings, just on the Galois group) by Joel Riou
|
| 25 |
+
here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112
|
| 26 |
+
|
| 27 |
+
## Mathematical details
|
| 28 |
+
|
| 29 |
+
### The general commutative algebra result
|
| 30 |
+
|
| 31 |
+
This is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.
|
| 32 |
+
Let `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,
|
| 33 |
+
such that the `G`-invariants of `B` are exactly the image of `A`.
|
| 34 |
+
|
| 35 |
+
The two claims of the theorem are:
|
| 36 |
+
(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.
|
| 37 |
+
(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`
|
| 38 |
+
in `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is
|
| 39 |
+
surjective.
|
| 40 |
+
|
| 41 |
+
We say "automorphism group" rather than "Galois group" because the extension might not be
|
| 42 |
+
separable (it is algebraic and normal however, but it can be infinite; however its maximal
|
| 43 |
+
separable subextension is finite).
|
| 44 |
+
|
| 45 |
+
This result means that if the inertia group I_Q is trivial and the residue fields are finite,
|
| 46 |
+
there's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class
|
| 47 |
+
Frob_P in G.
|
| 48 |
+
|
| 49 |
+
-/
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
variable {A : Type*} [CommRing A]
|
| 53 |
+
{B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]
|
| 54 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
open scoped algebraMap
|
| 59 |
+
|
| 60 |
+
--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)
|
| 61 |
+
--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 62 |
+
|
| 63 |
+
section misc
|
| 64 |
+
|
| 65 |
+
variable {A : Type*} [CommRing A]
|
| 66 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 67 |
+
{G : Type*} [Group G] [MulSemiringAction G B]
|
| 68 |
+
[SMulCommClass G A B]
|
| 69 |
+
|
| 70 |
+
open scoped Pointwise
|
| 71 |
+
|
| 72 |
+
/-
|
| 73 |
+
If you're happy to stick to finite G, it's just this:
|
| 74 |
+
|
| 75 |
+
private theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc
|
| 76 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 77 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 78 |
+
fun x ↦ smul_smul g x b
|
| 79 |
+
|
| 80 |
+
But the below proof works in general.
|
| 81 |
+
-/
|
| 82 |
+
|
| 83 |
+
private theorem norm_fixed (b : B) (g : G) : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := by
|
| 84 |
+
obtain (hfin | hinf) := em <| Finite G
|
| 85 |
+
· calc
|
| 86 |
+
g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _
|
| 87 |
+
_ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)
|
| 88 |
+
fun x ↦ smul_smul g x b
|
| 89 |
+
· obtain (rfl | hb) := eq_or_ne b 1
|
| 90 |
+
· simp
|
| 91 |
+
· suffices (Function.mulSupport ((· • b) : G → B)).Infinite by
|
| 92 |
+
classical
|
| 93 |
+
simp [finprod_def, dif_neg this]
|
| 94 |
+
have htop : (⊤ : Set G).Infinite := by simpa using Set.infinite_univ_iff.mpr ({ not_finite := hinf })
|
| 95 |
+
convert htop
|
| 96 |
+
rw [eq_top_iff]
|
| 97 |
+
intro g _
|
| 98 |
+
simp only [Function.mem_mulSupport]
|
| 99 |
+
contrapose! hb
|
| 100 |
+
apply_fun (fun x ↦ g⁻¹ • x) at hb
|
| 101 |
+
simpa using hb
|
| 102 |
+
|
| 103 |
+
theorem _root_.Ideal.IsPrime.finprod_mem_iff_exists_mem {R S : Type*} [Finite R] [CommSemiring S]
|
| 104 |
+
(I : Ideal S) [hI : I.IsPrime] (f : R → S) :
|
| 105 |
+
∏ᶠ x, f x ∈ I ↔ ∃ p, f p ∈ I := by
|
| 106 |
+
have := Fintype.ofFinite R
|
| 107 |
+
rw [finprod_eq_prod_of_fintype, Finset.prod_eq_multiset_prod, hI.multiset_prod_mem_iff_exists_mem]
|
| 108 |
+
simp
|
| 109 |
+
|
| 110 |
+
end misc
|
| 111 |
+
|
| 112 |
+
section charpoly
|
| 113 |
+
|
| 114 |
+
open Polynomial BigOperators
|
| 115 |
+
|
| 116 |
+
variable {A : Type*} [CommRing A]
|
| 117 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 118 |
+
{G : Type*} [Group G] [MulSemiringAction G B] --[SMulCommClass G A B]
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
variable (G) in
|
| 122 |
+
/-- The characteristic polynomial of an element `b` of a `G`-semiring `B`
|
| 123 |
+
is the polynomial `∏_{g ∈ G} (X - g • b)` (here `G` is finite; junk
|
| 124 |
+
returned in the infinite case) .-/
|
| 125 |
+
noncomputable def MulSemiringAction.CharacteristicPolynomial.F (b : B) : B[X] :=
|
| 126 |
+
∏ᶠ τ : G, (X - C (τ ��� b))
|
| 127 |
+
|
| 128 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 129 |
+
|
| 130 |
+
theorem F_spec (b : B) : F G b = ∏ᶠ τ : G, (X - C (τ • b)) := rfl
|
| 131 |
+
|
| 132 |
+
section F_API
|
| 133 |
+
|
| 134 |
+
variable [Finite G]
|
| 135 |
+
|
| 136 |
+
theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
|
| 137 |
+
have := Fintype.ofFinite G
|
| 138 |
+
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
|
| 139 |
+
|
| 140 |
+
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
|
| 141 |
+
have := Fintype.ofFinite G
|
| 142 |
+
rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
|
| 143 |
+
simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
|
| 144 |
+
nsmul_eq_mul, mul_one, Nat.cast_id]
|
| 145 |
+
|
| 146 |
+
variable (G) in
|
| 147 |
+
theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
|
| 148 |
+
have := Fintype.ofFinite G
|
| 149 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
|
| 150 |
+
|
| 151 |
+
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
|
| 152 |
+
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
|
| 153 |
+
_ = ∏ᶠ τ : G, σ • (X - C (τ • b)) := smul_finprod' _
|
| 154 |
+
_ = ∏ᶠ τ : G, (X - C ((σ * τ) • b)) := by simp [smul_sub, smul_smul]
|
| 155 |
+
_ = ∏ᶠ τ' : G, (X - C (τ' • b)) := finprod_eq_of_bijective (fun τ ↦ σ * τ)
|
| 156 |
+
(Group.mulLeft_bijective σ) (fun _ ↦ rfl)
|
| 157 |
+
_ = F G b := by rw [F_spec]
|
| 158 |
+
|
| 159 |
+
theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
|
| 160 |
+
let foo := Fintype.ofFinite G
|
| 161 |
+
simp [F_spec,finprod_eq_prod_of_fintype,eval_prod]
|
| 162 |
+
apply @Finset.prod_eq_zero _ _ _ _ _ (1 : G) (Finset.mem_univ 1)
|
| 163 |
+
simp
|
| 164 |
+
|
| 165 |
+
private theorem F_coeff_fixed (b : B) (n : ℕ) (g : G) :
|
| 166 |
+
g • (F G b).coeff n = (F G b).coeff n := by
|
| 167 |
+
change (g • (F G b)).coeff n = _
|
| 168 |
+
rw [F_smul_eq_self]
|
| 169 |
+
|
| 170 |
+
end F_API
|
| 171 |
+
|
| 172 |
+
open scoped algebraMap
|
| 173 |
+
|
| 174 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 175 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 176 |
+
|
| 177 |
+
@[simp, norm_cast]
|
| 178 |
+
theorem _root_.coe_monomial (n : ℕ) (a : A) : ((monomial n a : A[X]) : B[X]) = monomial n (a : B) :=
|
| 179 |
+
map_monomial _
|
| 180 |
+
|
| 181 |
+
section full_descent
|
| 182 |
+
|
| 183 |
+
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 184 |
+
|
| 185 |
+
-- Remark: the `splitting_of_full` approach is lousy and should be
|
| 186 |
+
-- replaced by the commented-out code below (lines 275-296 currently)
|
| 187 |
+
|
| 188 |
+
/-- This "splitting" function from B to A will only ever be evaluated on
|
| 189 |
+
G-invariant elements of B, and the two key facts about it are
|
| 190 |
+
that it lifts such an element to `A`, and for reasons of
|
| 191 |
+
convenience it lifts `1` to `1`. -/
|
| 192 |
+
noncomputable def splitting_of_full
|
| 193 |
+
(b : B) : A := by classical
|
| 194 |
+
exact
|
| 195 |
+
if b = 1 then 1 else
|
| 196 |
+
if h : ∀ σ : G, σ • b = b then (hFull b h).choose
|
| 197 |
+
else 37
|
| 198 |
+
|
| 199 |
+
theorem splitting_of_full_spec {b : B} (hb : ∀ σ : G, σ • b = b) :
|
| 200 |
+
splitting_of_full hFull b = b := by
|
| 201 |
+
unfold splitting_of_full
|
| 202 |
+
split_ifs with h1
|
| 203 |
+
· rw_mod_cast [h1]
|
| 204 |
+
· exact (hFull b hb).choose_spec.symm
|
| 205 |
+
|
| 206 |
+
theorem splitting_of_full_one : splitting_of_full hFull 1 = 1 := by
|
| 207 |
+
unfold splitting_of_full
|
| 208 |
+
rw [if_pos rfl]
|
| 209 |
+
|
| 210 |
+
noncomputable def M (b : B) : A[X] :=
|
| 211 |
+
(∑ x ∈ (F G b).support, monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 212 |
+
|
| 213 |
+
theorem M_deg_le (b : B) : (M hFull b).degree ≤ (F G b).degree := by
|
| 214 |
+
unfold M
|
| 215 |
+
have := Polynomial.degree_sum_le (F G b).support (fun x => monomial x (splitting_of_full hFull ((F G b).coeff x)))
|
| 216 |
+
refine le_trans this ?_
|
| 217 |
+
rw [Finset.sup_le_iff]
|
| 218 |
+
intro n hn
|
| 219 |
+
apply le_trans (degree_monomial_le n _) ?_
|
| 220 |
+
exact le_degree_of_mem_supp n hn
|
| 221 |
+
|
| 222 |
+
variable [Nontrivial B] [Finite G]
|
| 223 |
+
|
| 224 |
+
theorem M_coeff_card (b : B) :
|
| 225 |
+
(M hFull b).coeff (Nat.card G) = 1 := by
|
| 226 |
+
unfold M
|
| 227 |
+
simp only [finset_sum_coeff]
|
| 228 |
+
have hdeg := F_degree G b
|
| 229 |
+
rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos] at hdeg
|
| 230 |
+
rw [ ← hdeg]
|
| 231 |
+
rw [Finset.sum_eq_single_of_mem ((F G b).natDegree)]
|
| 232 |
+
· have : (F G b).Monic := F_monic b
|
| 233 |
+
simp
|
| 234 |
+
simp_all [splitting_of_full_one]
|
| 235 |
+
· refine natDegree_mem_support_of_nonzero ?h.H
|
| 236 |
+
intro h
|
| 237 |
+
rw [h] at hdeg
|
| 238 |
+
have : 0 < Nat.card G := Nat.card_pos
|
| 239 |
+
simp_all
|
| 240 |
+
· intro d _ hd
|
| 241 |
+
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
|
| 242 |
+
|
| 243 |
+
theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
|
| 244 |
+
apply le_antisymm (M_deg_le hFull b)
|
| 245 |
+
rw [F_degree]
|
| 246 |
+
have := M_coeff_card hFull b
|
| 247 |
+
refine le_degree_of_ne_zero ?h
|
| 248 |
+
rw [this]
|
| 249 |
+
exact one_ne_zero
|
| 250 |
+
|
| 251 |
+
theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
|
| 252 |
+
rw [M_deg_eq_F_deg hFull b]
|
| 253 |
+
exact F_degree G b
|
| 254 |
+
|
| 255 |
+
theorem M_monic (b : B) : (M hFull b).Monic := by
|
| 256 |
+
have this1 := M_deg_le hFull b
|
| 257 |
+
have this2 := M_coeff_card hFull b
|
| 258 |
+
have this3 : 0 < Nat.card G := Nat.card_pos
|
| 259 |
+
rw [← F_natdegree b] at this2 this3
|
| 260 |
+
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
|
| 261 |
+
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
|
| 262 |
+
exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
|
| 263 |
+
|
| 264 |
+
omit [Nontrivial B] in
|
| 265 |
+
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
|
| 266 |
+
unfold M
|
| 267 |
+
ext N
|
| 268 |
+
push_cast
|
| 269 |
+
simp_rw [splitting_of_full_spec hFull <| F_coeff_fixed b _]
|
| 270 |
+
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
|
| 271 |
+
aesop
|
| 272 |
+
|
| 273 |
+
omit [Nontrivial B] in
|
| 274 |
+
theorem M_spec_map (b : B) : (map (algebraMap A B) (M hFull b)) = F G b := by
|
| 275 |
+
rw [← M_spec hFull b]; rfl
|
| 276 |
+
|
| 277 |
+
omit [Nontrivial B] in
|
| 278 |
+
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
|
| 279 |
+
rw [eval₂_eq_eval_map, M_spec_map, F_eval_eq_zero]
|
| 280 |
+
|
| 281 |
+
include hFull in
|
| 282 |
+
theorem isIntegral : Algebra.IsIntegral A B where
|
| 283 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 284 |
+
|
| 285 |
+
end full_descent
|
| 286 |
+
|
| 287 |
+
end MulSemiringAction.CharacteristicPolynomial
|
| 288 |
+
|
| 289 |
+
end charpoly
|
| 290 |
+
|
| 291 |
+
section part_a
|
| 292 |
+
|
| 293 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 294 |
+
|
| 295 |
+
variable {A : Type*} [CommRing A]
|
| 296 |
+
{B : Type*} [CommRing B] [Algebra A B] [Nontrivial B]
|
| 297 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B]
|
| 298 |
+
|
| 299 |
+
theorem isIntegral_of_Full (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 300 |
+
Algebra.IsIntegral A B where
|
| 301 |
+
isIntegral b := ⟨M hFull b, M_monic hFull b, M_eval_eq_zero hFull b⟩
|
| 302 |
+
|
| 303 |
+
variable (P Q : Ideal B) [P.IsPrime] [Q.IsPrime]
|
| 304 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 305 |
+
|
| 306 |
+
open scoped Pointwise
|
| 307 |
+
|
| 308 |
+
theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
|
| 309 |
+
(h : ∃ P : Ideal R, P.IsPrime) : Nontrivial R := by
|
| 310 |
+
contrapose! h
|
| 311 |
+
intro P hP
|
| 312 |
+
rw [@not_nontrivial_iff_subsingleton] at h
|
| 313 |
+
obtain ⟨h, _⟩ := hP
|
| 314 |
+
apply h
|
| 315 |
+
apply Subsingleton.elim
|
| 316 |
+
|
| 317 |
+
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
|
| 318 |
+
omit [Nontrivial B] in
|
| 319 |
+
theorem part_a [SMulCommClass G A B]
|
| 320 |
+
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
|
| 321 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 322 |
+
∃ g : G, Q = g • P := by
|
| 323 |
+
haveI : Nontrivial B := Nontrivial_of_exists_prime ⟨Q, inferInstance⟩
|
| 324 |
+
haveI : Algebra.IsIntegral A B := isIntegral_of_Full hFull'
|
| 325 |
+
cases nonempty_fintype G
|
| 326 |
+
suffices ∃ g : G, Q ≤ g • P by
|
| 327 |
+
obtain ⟨g, hg⟩ := this
|
| 328 |
+
use g
|
| 329 |
+
by_contra! hQ
|
| 330 |
+
have : Q < g • P := lt_of_le_of_ne hg hQ
|
| 331 |
+
obtain ⟨x, hxP, hxQ⟩ := Set.exists_of_ssubset <| this
|
| 332 |
+
apply (Ideal.comap_lt_comap_of_integral_mem_sdiff (R := A) hg ⟨hxP, hxQ⟩ <|
|
| 333 |
+
Algebra.isIntegral_def.1 inferInstance x).ne
|
| 334 |
+
rw [← hPQ]
|
| 335 |
+
ext x
|
| 336 |
+
specialize hFull' (algebraMap A B x)
|
| 337 |
+
have : ∀ (g : G), g • (algebraMap A B x) = (algebraMap A B x) := fun g ↦ by
|
| 338 |
+
rw [Algebra.algebraMap_eq_smul_one, smul_comm, smul_one]
|
| 339 |
+
simp only [Ideal.mem_comap]
|
| 340 |
+
nth_rw 2 [← this]
|
| 341 |
+
exact Ideal.smul_mem_pointwise_smul_iff.symm
|
| 342 |
+
suffices ∃ g ∈ (⊤ : Finset G), Q ≤ g • P by
|
| 343 |
+
convert this; simp
|
| 344 |
+
rw [← Ideal.subset_union_prime 1 1 <| fun g _ _ _ ↦ ?_]; swap
|
| 345 |
+
· exact Ideal.map_isPrime_of_equiv (MulSemiringAction.toRingEquiv _ _ g)
|
| 346 |
+
intro x hx
|
| 347 |
+
specialize hFull' (∏ᶠ σ : G, σ • x)
|
| 348 |
+
obtain ⟨a, ha⟩ := hFull' (norm_fixed _)
|
| 349 |
+
have : (a : B) ∈ Q := by
|
| 350 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem]
|
| 351 |
+
use 1
|
| 352 |
+
simpa using hx
|
| 353 |
+
have : (a : B) ∈ P := by
|
| 354 |
+
unfold Algebra.cast
|
| 355 |
+
rwa [← Ideal.mem_comap, hPQ, Ideal.mem_comap]
|
| 356 |
+
rw [← ha, Ideal.IsPrime.finprod_mem_iff_exists_mem] at this
|
| 357 |
+
obtain ⟨σ, hσ⟩ : ∃ σ : G, σ • x ∈ P := this
|
| 358 |
+
simp only [Finset.top_eq_univ, Finset.coe_univ, Set.mem_univ, Set.iUnion_true, Set.mem_iUnion,
|
| 359 |
+
SetLike.mem_coe]
|
| 360 |
+
use σ⁻¹
|
| 361 |
+
rwa [Ideal.mem_inv_pointwise_smul_iff]
|
| 362 |
+
|
| 363 |
+
end part_a
|
| 364 |
+
|
| 365 |
+
-- section normal_elements
|
| 366 |
+
-- I'm going to avoid this because I'm just going to use scaling.
|
| 367 |
+
-- I'll show that every nonzero element of B/Q divides an element of A/P.
|
| 368 |
+
|
| 369 |
+
-- variable (K : Type*) [Field K] {L : Type*} [Field L] [Algebra K L]
|
| 370 |
+
|
| 371 |
+
-- open Polynomial
|
| 372 |
+
|
| 373 |
+
-- I've commented out the next section because ACL suggested
|
| 374 |
+
-- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
|
| 375 |
+
-- and apparently this will avoid the def below.
|
| 376 |
+
|
| 377 |
+
-- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
|
| 378 |
+
|
| 379 |
+
-- namespace IsNormalElement
|
| 380 |
+
|
| 381 |
+
-- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
|
| 382 |
+
-- IsNormalElement K x ↔
|
| 383 |
+
-- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
|
| 384 |
+
-- constructor
|
| 385 |
+
-- · intro h
|
| 386 |
+
-- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
|
| 387 |
+
-- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
|
| 388 |
+
-- -- need min poly divides P and then it should all be over
|
| 389 |
+
-- sorry -- presumably some form of this is in the library
|
| 390 |
+
|
| 391 |
+
-- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
|
| 392 |
+
-- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
|
| 393 |
+
-- IsNormalElement K (x * y) := by
|
| 394 |
+
-- rw [iff_exists_monic_splits K hxint] at hx
|
| 395 |
+
-- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
|
| 396 |
+
-- rw [iff_exists_monic_splits K hyint] at hy
|
| 397 |
+
-- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
|
| 398 |
+
-- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
|
| 399 |
+
-- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
|
| 400 |
+
-- -- Do we have this?
|
| 401 |
+
-- -- Is this even the best way to go about this?
|
| 402 |
+
-- -- Note: Chambert-Loir says there's a proof in Bourbaki
|
| 403 |
+
-- sorry
|
| 404 |
+
|
| 405 |
+
-- -- API
|
| 406 |
+
|
| 407 |
+
-- end IsNormalElement
|
| 408 |
+
|
| 409 |
+
-- end normal_elements
|
| 410 |
+
|
| 411 |
+
section part_b
|
| 412 |
+
|
| 413 |
+
variable {A : Type*} [CommRing A]
|
| 414 |
+
{B : Type*} [CommRing B] [Algebra A B]
|
| 415 |
+
{G : Type*} [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B]
|
| 416 |
+
|
| 417 |
+
/-
|
| 418 |
+
Set-up for part (b) of the lemma. G acts on B with invariants A (or more precisely the
|
| 419 |
+
image of A). Warning: `P` was a prime ideal of `B` in part (a) but it's a prime ideal
|
| 420 |
+
of `A` here, in fact it's `Q ∩ A`, the preimage of `Q` in `A`.
|
| 421 |
+
|
| 422 |
+
We want to consider the following commutative diagram.
|
| 423 |
+
|
| 424 |
+
B ---> B / Q -----> L = Frac(B/Q)
|
| 425 |
+
/\ /\ /\
|
| 426 |
+
| | |
|
| 427 |
+
| | |
|
| 428 |
+
A ---> A / P ----> K = Frac(A/P)
|
| 429 |
+
|
| 430 |
+
We will get to L, K, and the second square later.
|
| 431 |
+
First let's explain how to do P and Q.
|
| 432 |
+
-/
|
| 433 |
+
variable (Q : Ideal B) [Q.IsPrime] (P : Ideal A) [P.IsPrime]
|
| 434 |
+
-- #synth Algebra A (B ⧸ Q) #exit -- works
|
| 435 |
+
---synth IsScalarTower A B (B ⧸ Q) #exit-- works
|
| 436 |
+
-- (hPQ : Ideal.comap (algebraMap A B) P = p) -- we will *prove* this from the
|
| 437 |
+
-- commutativity of the diagram! This is a trick I learnt from Jou who apparently
|
| 438 |
+
-- learnt it from Amelia
|
| 439 |
+
[Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)]
|
| 440 |
+
-- So now we know the left square commutes.
|
| 441 |
+
-- Amelia's first trick: commutativity of th LH diagram implies `P ⊆ Q ∩ A`
|
| 442 |
+
-- For the map `A -> A/P -> B/Q` must equal the map `A -> B -> B/Q` so `P` must
|
| 443 |
+
-- be a subset of the kernel of `A → B/Q`, which is `A ∩ Q`
|
| 444 |
+
|
| 445 |
+
omit [P.IsPrime] in
|
| 446 |
+
theorem Ideal.Quotient.eq_zero_iff_mem' (x : A) :
|
| 447 |
+
algebraMap A (A ⧸ P) x = 0 ↔ x ∈ P :=
|
| 448 |
+
Ideal.Quotient.eq_zero_iff_mem
|
| 449 |
+
|
| 450 |
+
section B_mod_Q_over_A_mod_P_stuff
|
| 451 |
+
|
| 452 |
+
section Mathlib.RingTheory.Ideal.Quotient
|
| 453 |
+
|
| 454 |
+
namespace Ideal
|
| 455 |
+
|
| 456 |
+
variable {R : Type*} [CommRing R] {I : Ideal R}
|
| 457 |
+
|
| 458 |
+
protected noncomputable
|
| 459 |
+
def Quotient.out (x : R ⧸ I) :=
|
| 460 |
+
Quotient.out' x
|
| 461 |
+
|
| 462 |
+
theorem Quotient.out_eq (x : R ⧸ I) : Ideal.Quotient.mk I (Ideal.Quotient.out x) = x := by
|
| 463 |
+
simp only [Ideal.Quotient.out, Ideal.Quotient.mk, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
|
| 464 |
+
Submodule.Quotient.mk, Quotient.out_eq']
|
| 465 |
+
|
| 466 |
+
@[elab_as_elim]
|
| 467 |
+
protected theorem Quotient.induction_on
|
| 468 |
+
{p : R ⧸ I → Prop} (x : R ⧸ I) (h : ∀ a, p (Ideal.Quotient.mk I a)) : p x :=
|
| 469 |
+
Quotient.inductionOn x h
|
| 470 |
+
|
| 471 |
+
end Ideal
|
| 472 |
+
|
| 473 |
+
end Mathlib.RingTheory.Ideal.Quotient
|
| 474 |
+
|
| 475 |
+
namespace MulSemiringAction.CharacteristicPolynomial
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
open Polynomial
|
| 479 |
+
/-
|
| 480 |
+
I didn't check that this definition was independent
|
| 481 |
+
of the lift `b` of `bbar` (and it might not even be true).
|
| 482 |
+
But this doesn't matter, because `G` no longer acts on `B/Q`.
|
| 483 |
+
All we need is that `Mbar` is monic of degree `|G|`, is defined over the bottom ring
|
| 484 |
+
and kills `bbar`.
|
| 485 |
+
-/
|
| 486 |
+
variable {Q} in
|
| 487 |
+
noncomputable def Mbar
|
| 488 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 489 |
+
(bbar : B ⧸ Q) : (A ⧸ P)[X] :=
|
| 490 |
+
Polynomial.map (Ideal.Quotient.mk P) <| M hFull' <| Ideal.Quotient.out bbar
|
| 491 |
+
|
| 492 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
|
| 493 |
+
|
| 494 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 495 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 496 |
+
theorem Mbar_monic [Nontrivial B] (bbar : B ⧸ Q) : (Mbar P hFull' bbar).Monic := by
|
| 497 |
+
have := M_monic hFull'
|
| 498 |
+
simp [Mbar, (M_monic hFull' _).map]
|
| 499 |
+
|
| 500 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)] [IsScalarTower A (A ⧸ P) (B ⧸ Q)] in
|
| 501 |
+
theorem Mbar_deg [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 502 |
+
degree (Mbar P hFull' bbar) = Nat.card G := by
|
| 503 |
+
simp only [Mbar]
|
| 504 |
+
rw [degree_map_eq_of_leadingCoeff_ne_zero]
|
| 505 |
+
· exact M_deg hFull' _
|
| 506 |
+
· rw [(M_monic hFull' _).leadingCoeff]
|
| 507 |
+
simp only [map_one, ne_eq, one_ne_zero, not_false_eq_true]
|
| 508 |
+
|
| 509 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 510 |
+
theorem Mbar_eval_eq_zero [Nontrivial A] [Nontrivial B] (bbar : B ⧸ Q) :
|
| 511 |
+
eval₂ (algebraMap (A ⧸ P) (B ⧸ Q)) bbar (Mbar P hFull' bbar) = 0 := by
|
| 512 |
+
have h := congr_arg (algebraMap B (B ⧸ Q)) (M_eval_eq_zero hFull' (Ideal.Quotient.out bbar))
|
| 513 |
+
rw [map_zero, hom_eval₂, Ideal.Quotient.algebraMap_eq, Ideal.Quotient.out_eq] at h
|
| 514 |
+
simpa [Mbar, eval₂_map, ← Ideal.Quotient.algebraMap_eq,
|
| 515 |
+
← IsScalarTower.algebraMap_eq A (A ⧸ P) (B ⧸ Q), IsScalarTower.algebraMap_eq A B (B ⧸ Q)]
|
| 516 |
+
|
| 517 |
+
end CharacteristicPolynomial
|
| 518 |
+
|
| 519 |
+
open CharacteristicPolynomial in
|
| 520 |
+
omit [SMulCommClass G A B] [Q.IsPrime] [P.IsPrime] in
|
| 521 |
+
theorem reduction_isIntegral
|
| 522 |
+
[Nontrivial A] [Nontrivial B]
|
| 523 |
+
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
|
| 524 |
+
Algebra.IsIntegral (A ⧸ P) (B ⧸ Q) where
|
| 525 |
+
isIntegral x := ⟨Mbar P hFull' x, Mbar_monic Q P hFull' x, Mbar_eval_eq_zero Q P hFull' x⟩
|
| 526 |
+
|
| 527 |
+
end MulSemiringAction
|
| 528 |
+
|
| 529 |
+
theorem Polynomial.nonzero_const_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 530 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 531 |
+
∃ (q : Polynomial R), q.coeff 0 ≠ 0 ∧ q.eval₂ (algebraMap R S) s = 0 := by
|
| 532 |
+
obtain ⟨p, p_monic, p_eval⟩ := (@Algebra.isIntegral_def R S).mp inferInstance s
|
| 533 |
+
have p_nzero := ne_zero_of_ne_zero_of_monic X_ne_zero p_monic
|
| 534 |
+
obtain ⟨q, p_eq, q_ndvd⟩ := Polynomial.exists_eq_pow_rootMultiplicity_mul_and_not_dvd p p_nzero 0
|
| 535 |
+
rw [C_0, sub_zero] at p_eq
|
| 536 |
+
rw [C_0, sub_zero] at q_ndvd
|
| 537 |
+
use q
|
| 538 |
+
constructor
|
| 539 |
+
. intro q_coeff_0
|
| 540 |
+
exact q_ndvd <| X_dvd_iff.mpr q_coeff_0
|
| 541 |
+
. rw [p_eq, eval₂_mul] at p_eval
|
| 542 |
+
rcases NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero p_eval with Xpow_eval | q_eval
|
| 543 |
+
. by_contra
|
| 544 |
+
apply hs
|
| 545 |
+
rw [eval₂_X_pow] at Xpow_eval
|
| 546 |
+
exact pow_eq_zero Xpow_eval
|
| 547 |
+
. exact q_eval
|
| 548 |
+
|
| 549 |
+
theorem Algebra.exists_dvd_nonzero_if_isIntegral (R S : Type) [CommRing R] [Nontrivial R]
|
| 550 |
+
[CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [IsDomain S] (s : S) (hs : s ≠ 0) :
|
| 551 |
+
∃ r : R, r ≠ 0 ∧ s ∣ (algebraMap R S) r := by
|
| 552 |
+
obtain ⟨q, q_zero_coeff, q_eval_zero⟩ := Polynomial.nonzero_const_if_isIntegral R S s hs
|
| 553 |
+
use q.coeff 0
|
| 554 |
+
refine ⟨q_zero_coeff, ?_⟩
|
| 555 |
+
rw [← Polynomial.eval₂_X (algebraMap R S) s, ← dvd_neg, ← Polynomial.eval₂_C (algebraMap R S) s]
|
| 556 |
+
rw [← zero_add (-_), Mathlib.Tactic.RingNF.add_neg, ← q_eval_zero, ← Polynomial.eval₂_sub]
|
| 557 |
+
apply Polynomial.eval₂_dvd
|
| 558 |
+
exact Polynomial.X_dvd_sub_C
|
| 559 |
+
|
| 560 |
+
end B_mod_Q_over_A_mod_P_stuff
|
| 561 |
+
|
| 562 |
+
/-
|
| 563 |
+
\section{The extension $L/K$.}
|
| 564 |
+
|
| 565 |
+
\begin{theorem}
|
| 566 |
+
\label{foo1}
|
| 567 |
+
If $\lambda\in L$ then there's a monic polynomial $P_\lambda\in K[X]$ of degree $|G|$
|
| 568 |
+
with $\lambda$ as a root, and which splits completely in $L[X]$.
|
| 569 |
+
\end{theorem}
|
| 570 |
+
\begin{proof}
|
| 571 |
+
A general $\lambda\in L$ can be written as $\beta_1/\beta_2$ where $\beta_1,\beta_2\in B/Q$.
|
| 572 |
+
The previous corollary showed that there's some nonzero $\alpha\in A/P$ such that $\beta_2$
|
| 573 |
+
divides $\alpha$, and hence $\alpha\lambda\in B/Q$ (we just cleared denominators).
|
| 574 |
+
Thus $\alpha\lambda$ is a root of some monic polynomial $f(x)\in (A/P)[X]$,
|
| 575 |
+
by~\ref{MulSemiringAction.CharacteristicPolynomial.Mbar_eval_eq_zero}.
|
| 576 |
+
The polynomial $f(\alpha x)\in (A/P)[X]$ thus
|
| 577 |
+
has $\lambda$ as a root, but it is not monic; its leading term is $\alpha^n$.
|
| 578 |
+
Dividing through in $K[X]$ gives us the polynomial we seek.
|
| 579 |
+
\end{proof}
|
| 580 |
+
|
| 581 |
+
\begin{corollary} The extension $L/K$ is algebraic and normal.
|
| 582 |
+
\end{corollary}
|
| 583 |
+
\begin{proof} \uses{foo1}
|
| 584 |
+
Exercise using the previous theorem.
|
| 585 |
+
\end{proof}
|
| 586 |
+
|
| 587 |
+
Note that $L/K$ might not be separable and might have infinite degree. However
|
| 588 |
+
|
| 589 |
+
\begin{corollary} Any subextension of $L/K$ which is finite and separable over $K$
|
| 590 |
+
has degree at most $|G|$.
|
| 591 |
+
\end{corollary}
|
| 592 |
+
\begin{proof}
|
| 593 |
+
Finite and separable implies simple, and we've already seen that any
|
| 594 |
+
element of $L$ has degree at most $|G|$ over $K$.
|
| 595 |
+
\end{proof}
|
| 596 |
+
|
| 597 |
+
\begin{corollary} The maximal separable subextension $M$ of $L/K$ has degree at most $|G|$.
|
| 598 |
+
\end{corollary}
|
| 599 |
+
\begin{proof} If it has dimension greater than $|G|$ over $K$, then it has a finitely-generated
|
| 600 |
+
subfeld of $K$-dimension greater than $|G|$, and is finite and separable, contradicting
|
| 601 |
+
the previous result.
|
| 602 |
+
\end{proof}
|
| 603 |
+
|
| 604 |
+
\begin{corollary} $\Aut_K(L)$ is finite.
|
| 605 |
+
\end{corollary}
|
| 606 |
+
\begin{proof} Any $K$-automorphism of $L$ is determined by where it sends $M$.
|
| 607 |
+
\end{proof}
|
| 608 |
+
|
| 609 |
+
\begin{corollary} $\Aut_{A/P}(B/Q)$ is finite.
|
| 610 |
+
\end{corollary}
|
| 611 |
+
\begin{proof}
|
| 612 |
+
Two elements of $\Aut_{A/P}(B/Q)$ which agree once extended to automorphisms of $L$
|
| 613 |
+
must have already been equal, as $B/Q\subseteq L$. Hence the canonical map
|
| 614 |
+
from $\Aut_{A/P}(B/Q)$ to $\Aut_K(L)$ is injective.
|
| 615 |
+
\end{proof}
|
| 616 |
+
|
| 617 |
+
\section{Proof of surjectivity.}
|
| 618 |
+
|
| 619 |
+
\begin{definition} We fix once and for all some nonzero $y\in B/Q$ such that $M=K(y)$,
|
| 620 |
+
with $M$ the maximal separable subextension of $L/K$.
|
| 621 |
+
\end{definition}
|
| 622 |
+
|
| 623 |
+
Note that the existence of some $\lambda\in L$ with this property just comes from finite
|
| 624 |
+
and separable implies simple; we can use the ``clear denominator'' technique introduced
|
| 625 |
+
earlier to scale this by some nonzero $\alpha\in A$ into $B/Q$, as
|
| 626 |
+
$K(\lambda)=K(\alpha\lambda)$.
|
| 627 |
+
|
| 628 |
+
Here is a slightly delicate result whose proof I haven't thought too hard about.
|
| 629 |
+
\begin{theorem} There exists some $x\in B$ and $\alpha\in A$ with the following
|
| 630 |
+
properties.
|
| 631 |
+
\begin{enumerate}
|
| 632 |
+
\item $x=\alpha y$ mod $Q$ and $\alpha$ isn't zero mod $Q$.
|
| 633 |
+
\item $x\in Q'$ for all $Q'\not=Q$ in the $G$-orbit of $Q$.
|
| 634 |
+
\end{enumerate}
|
| 635 |
+
\end{theorem}
|
| 636 |
+
\begin{proof}
|
| 637 |
+
Idea. Localise away from P, then all the $Q_i$ are maximal, use CRT and then clear denominators.
|
| 638 |
+
\end{proof}
|
| 639 |
+
|
| 640 |
+
We now choose some $x\in B[1/S]$ which is $y$ modulo $Q$ and $0$ modulo all the other
|
| 641 |
+
primes of $B$ above $P$, and consider the monic degree $|G|$ polynomial $f$ in $K[X]$
|
| 642 |
+
with $x$ and its conjugates as roots. If $\sigma\in\Aut_K(L)$ then $\sigma(\overline{x})$
|
| 643 |
+
is a root of $f$ as $\sigma$ fixes $K$ pointwise. Hence $\sigma(\overline{x})=\overline{g(x)}$
|
| 644 |
+
for some $g\in G$, and because $\sigma(\overline{x})\not=0$ we have $\overline{g(x)}\not=0$
|
| 645 |
+
and hence $g(x)\notin Q[1/S]$. Hence $x\notin g^{-1} Q[1/S]$ and thus $g^{-1}Q=Q$ and $g\in SD_Q$.
|
| 646 |
+
Finally we have $\phi_g=\sigma$ on $K$ and on $y$, so they are equal on $M$ and hence on $L$ as
|
| 647 |
+
$L/M$ is purely inseparable.
|
| 648 |
+
|
| 649 |
+
This part of the argument seems weak.
|
| 650 |
+
-/
|
| 651 |
+
|
| 652 |
+
section L_over_K_stuff
|
| 653 |
+
|
| 654 |
+
-- Let's now make the right square. First `L`
|
| 655 |
+
variable (L : Type*) [Field L] [Algebra (B ⧸ Q) L] [IsFractionRing (B ⧸ Q) L]
|
| 656 |
+
-- Now top left triangle: A / P → B / Q → L commutes
|
| 657 |
+
[Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 658 |
+
-- now introduce K
|
| 659 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 660 |
+
-- now make bottom triangle commute
|
| 661 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L]
|
| 662 |
+
-- So now both squares commute.
|
| 663 |
+
|
| 664 |
+
-- do I need this?
|
| 665 |
+
-- [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 666 |
+
|
| 667 |
+
-- Do I need this:
|
| 668 |
+
-- [Algebra B L] [IsScalarTower B (B ⧸ Q) L]
|
| 669 |
+
|
| 670 |
+
variable [Nontrivial B]
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
-- Do we need a version of Ideal.Quotient.eq_zero_iff_mem with algebraMap?
|
| 674 |
+
|
| 675 |
+
|
| 676 |
+
-- not sure if we need this but let's prove it just to check our setup is OK.
|
| 677 |
+
-- The claim is that the preimage of Q really is P (rather than just containing P)
|
| 678 |
+
-- and the proof is that A/P -> B/Q extends to a map of fields which is injective,
|
| 679 |
+
-- so A/P -> B/Q must also be injective.
|
| 680 |
+
open IsScalarTower in
|
| 681 |
+
example : Ideal.comap (algebraMap A B) Q = P := by
|
| 682 |
+
ext x
|
| 683 |
+
simp only [Ideal.mem_comap]
|
| 684 |
+
rw [← Ideal.Quotient.eq_zero_iff_mem', ← Ideal.Quotient.eq_zero_iff_mem']
|
| 685 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (A ⧸ P) K]
|
| 686 |
+
rw [← map_eq_zero_iff _ <| IsFractionRing.injective (B ⧸ Q) L]
|
| 687 |
+
rw [← map_eq_zero_iff _ <| RingHom.injective ((algebraMap K L) : K →+* L)]
|
| 688 |
+
rw [← algebraMap_apply A B (B ⧸ Q)]
|
| 689 |
+
rw [← algebraMap_apply (A ⧸ P) K L]
|
| 690 |
+
rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]
|
| 691 |
+
rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]
|
| 692 |
+
|
| 693 |
+
open Polynomial BigOperators
|
| 694 |
+
|
| 695 |
+
open scoped algebraMap
|
| 696 |
+
|
| 697 |
+
noncomputable local instance : Algebra A[X] B[X] :=
|
| 698 |
+
RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))
|
| 699 |
+
|
| 700 |
+
theorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}
|
| 701 |
+
(hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry
|
| 702 |
+
|
| 703 |
+
theorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]
|
| 704 |
+
[IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):
|
| 705 |
+
IsAlgebraic K (IsLocalization.mk' S 1 x) := by
|
| 706 |
+
rw [← IsAlgebraic.invOf_iff, IsLocalization.invertible_mk'_one_invOf]
|
| 707 |
+
exact h
|
| 708 |
+
|
| 709 |
+
open MulSemiringAction.CharacteristicPolynomial
|
| 710 |
+
|
| 711 |
+
namespace Bourbaki52222
|
| 712 |
+
|
| 713 |
+
variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in
|
| 714 |
+
variable (G) in
|
| 715 |
+
noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=
|
| 716 |
+
if x = 0 then monomial (Nat.card G) 1
|
| 717 |
+
else 37 -- this is not actually right. In the nonzero case you
|
| 718 |
+
-- clear denominators with a nonzero element of A, using
|
| 719 |
+
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
|
| 720 |
+
-- scaled appropriately.
|
| 721 |
+
|
| 722 |
+
theorem f_exists [DecidableEq L] (l : L) :
|
| 723 |
+
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
|
| 724 |
+
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
|
| 725 |
+
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
|
| 726 |
+
sorry
|
| 727 |
+
|
| 728 |
+
theorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :
|
| 729 |
+
(r : S) = (algebraMap R S) r := by
|
| 730 |
+
rfl
|
| 731 |
+
|
| 732 |
+
theorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]
|
| 733 |
+
[Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :
|
| 734 |
+
(algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := by
|
| 735 |
+
exact Eq.symm (IsScalarTower.algebraMap_apply R S T r)
|
| 736 |
+
|
| 737 |
+
theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]
|
| 738 |
+
[CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]
|
| 739 |
+
(h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := by
|
| 740 |
+
rw [Algebra.isAlgebraic_def]
|
| 741 |
+
let M := nonZeroDivisors R
|
| 742 |
+
intro x
|
| 743 |
+
have ⟨r, s, h'⟩ := IsLocalization.mk'_surjective M x
|
| 744 |
+
have : x = r * IsLocalization.mk' K 1 s := by
|
| 745 |
+
rw [← h', IsLocalization.mul_mk'_eq_mk'_of_mul]
|
| 746 |
+
simp
|
| 747 |
+
rw [this]
|
| 748 |
+
apply IsAlgebraic.mul (h r)
|
| 749 |
+
exact IsAlgebraic.invLoc (h s)
|
| 750 |
+
|
| 751 |
+
-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have
|
| 752 |
+
-- to introduce `f` anyway because we need not just that the extension is algebraic but
|
| 753 |
+
-- that every element satisfies a poly of degree <= |G|.
|
| 754 |
+
theorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]
|
| 755 |
+
[Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
|
| 756 |
+
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
|
| 757 |
+
[IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]
|
| 758 |
+
[IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]
|
| 759 |
+
(K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]
|
| 760 |
+
[Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]
|
| 761 |
+
[Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]
|
| 762 |
+
[IsScalarTower A B L]
|
| 763 |
+
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := by
|
| 764 |
+
apply @Algebra.isAlgebraic_of_subring_isAlgebraic (B ⧸ Q)
|
| 765 |
+
intro b_bar
|
| 766 |
+
have ⟨b, hb⟩ := Ideal.Quotient.mk_surjective b_bar
|
| 767 |
+
have hb : (algebraMap B (B ⧸ Q)) b = b_bar := hb
|
| 768 |
+
use ((M hFull b).map (algebraMap A (A ⧸ P))).map (algebraMap (A ⧸ P) K)
|
| 769 |
+
constructor
|
| 770 |
+
. apply ne_zero_of_ne_zero_of_monic X_ne_zero
|
| 771 |
+
apply Monic.map
|
| 772 |
+
apply Monic.map
|
| 773 |
+
exact M_monic hFull b
|
| 774 |
+
. rw [← hb, algebraMap_cast, map_map, ← IsScalarTower.algebraMap_eq]
|
| 775 |
+
rw [algebraMap_algebraMap, aeval_def, eval₂_eq_eval_map, map_map, ← IsScalarTower.algebraMap_eq]
|
| 776 |
+
rw [IsScalarTower.algebraMap_eq A B L, ← map_map, M_spec_map]
|
| 777 |
+
rw [eval_map, eval₂_hom, F_eval_eq_zero]
|
| 778 |
+
exact algebraMap.coe_zero
|
| 779 |
+
|
| 780 |
+
include G in
|
| 781 |
+
theorem normal [DecidableEq L] : Normal K L := by
|
| 782 |
+
rw [normal_iff]
|
| 783 |
+
intro l
|
| 784 |
+
obtain ⟨f, hfmonic, _, hf, hfsplits⟩ := @f_exists G _ _ L _ K _ _ _ l
|
| 785 |
+
have hnz : f ≠ 0 := hfmonic.ne_zero
|
| 786 |
+
constructor
|
| 787 |
+
· rw [← isAlgebraic_iff_isIntegral]
|
| 788 |
+
exact ⟨f, hfmonic.ne_zero, hf⟩
|
| 789 |
+
refine Polynomial.splits_of_splits_of_dvd (algebraMap K L) hnz hfsplits ?_
|
| 790 |
+
exact minpoly.dvd _ _ hf
|
| 791 |
+
|
| 792 |
+
open Module
|
| 793 |
+
|
| 794 |
+
theorem separableClosure_finiteDimensional : FiniteDimensional K (separableClosure K L) := sorry
|
| 795 |
+
|
| 796 |
+
-- degree of max sep subextension is ≤ |G|
|
| 797 |
+
|
| 798 |
+
theorem separableClosure_finrank_le : finrank K (separableClosure K L) ≤ Nat.card G := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/input_messages_compress_3.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.FieldTheory.Cardinality\nimport Mathlib.RingTheory.DedekindDomain.Ideal\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.IntegralClosure.IntegralRestrict\nimport Mathlib.RingTheory.Ideal.Pointwise\nimport Mathlib.RingTheory.Ideal.Over\nimport Mathlib.FieldTheory.Normal\nimport Mathlib.FieldTheory.SeparableClosure\nimport Mathlib.RingTheory.OreLocalization.Ring\n\n/-!\n\n# Frobenius elements.\n\nThis file proves a general result in commutative algebra which can be used to define Frobenius\nelements of Galois groups of local or fields (for example number fields).\n\nKB was alerted to this very general result (which needs no Noetherian or finiteness assumptions\non the rings, just on the Galois group) by Joel Riou\nhere https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Uses.20of.20Frobenius.20elements.20in.20mathematics/near/448934112\n\n## Mathematical details\n\n### The general commutative algebra result\n\nThis is Theorem 2 in Chapter V, Section 2, number 2 of Bourbaki Alg Comm. It says the following.\nLet `A → B` be commutative rings and let `G` be a finite group acting on `B` by ring automorphisms,\nsuch that the `G`-invariants of `B` are exactly the image of `A`.\n\nThe two claims of the theorem are:\n(i) If `P` is a prime ideal of `A` then `G` acts transitively on the primes of `B` above `P`.\n(ii) If `Q` is a prime ideal of `B` lying over `P` then the canonica map from the stabilizer of `Q`\nin `G` to the automorphism group of the residue field extension `Frac(B/Q) / Frac(A/P)` is\nsurjective.\n\nWe say \"automorphism group\" rather than \"Galois group\" because the extension might not be\nseparable (it is algebraic and normal however, but it can be infinite; however its maximal\nseparable subextension is finite).\n\nThis result means that if the inertia group I_Q is trivial and the residue fields are finite,\nthere's a Frobenius element Frob_Q in the stabiliser of Q, and a Frobenius conjugacy class\nFrob_P in G.\n\n-/\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] --[Algebra.IsIntegral A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen scoped algebraMap\n\n--variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) ↔ ∃ a : A, b = a)\n--variable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)\n\nsection misc\n\nvariable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B]\n [SMulCommClass G A B]\n\nopen scoped Pointwise\n\n/-\nIf you're happy to stick to finite G, it's just this:\n\nprivate theorem norm_fixed' (b : B) (g : G) [Finite G] : g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, σ • b := calc\n g • (∏ᶠ σ : G, σ • b) = ∏ᶠ σ : G, g • (σ • b) := smul_finprod' _\n _ = ∏ᶠ σ : G, σ • b := finprod_eq_of_bijective (g • ·) (MulAction.bijective g)\n fun x ↦ smul_smul g x b\n... [TRUNCATED] ...\n rw [← algebraMap_apply A B (B ⧸ Q)]\n rw [← algebraMap_apply (A ⧸ P) K L]\n rw [algebraMap_apply A (A ⧸ P) (B ⧸ Q)]\n rw [algebraMap_apply (A ⧸ P) (B ⧸ Q) L]\n\nopen Polynomial BigOperators\n\nopen scoped algebraMap\n\nnoncomputable local instance : Algebra A[X] B[X] :=\n RingHom.toAlgebra (Polynomial.mapRingHom (Algebra.toRingHom))\n\ntheorem IsAlgebraic.mul {R K : Type*} [CommRing R] [CommRing K] [Algebra R K] {x y : K}\n (hx : IsAlgebraic R x) (hy : IsAlgebraic R y) : IsAlgebraic R (x * y) := sorry\n\ntheorem IsAlgebraic.invLoc {R S K : Type*} [CommRing R] {M : Submonoid R} [CommRing S] [Algebra R S]\n [IsLocalization M S] {x : M} [CommRing K] [Algebra K S] (h : IsAlgebraic K ((x : R) : S)):\n IsAlgebraic K (IsLocalization.mk' S 1 x) := sorry\n\nopen MulSemiringAction.CharacteristicPolynomial\n\nnamespace Bourbaki52222\n\nvariable (hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) in\nvariable (G) in\nnoncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\ntheorem f_exists [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := sorry\n\ntheorem algebraMap_cast {R S: Type*} [CommRing R] [CommRing S] [Algebra R S] (r : R) :\n (r : S) = (algebraMap R S) r := sorry\n\ntheorem algebraMap_algebraMap {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] [Algebra R S]\n [Algebra S T] [Algebra R T] [IsScalarTower R S T] (r : R) :\n (algebraMap S T) ((algebraMap R S) r) = (algebraMap R T) r := sorry\n\ntheorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R] [CommRing k]\n [CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]\n (h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := sorry\n\n-- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have\n-- to introduce `f` anyway because we need not just that the extension is algebraic but\n-- that every element satisfies a poly of degree <= |G|.\ntheorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) (B ⧸ Q) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): Algebra.IsAlgebraic K L := sorry\n\ninclude G in\ntheorem normal [DecidableEq L] : Normal K L := sorry\n\nopen Module\n\ntheorem separableClosure_finiteDimensional : FiniteDimensional K (separableClosure K L) := sorry\n\n-- degree of max sep subextension is ≤ |G|\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nThe maximal separable subextension $M$ of $L/K$ has degree at most $|G|$."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem separableClosure_finrank_le : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a := by sorry"}
|
| 3 |
+
{"prediction": "theorem separableClosure_finrank_le [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by sorry"}
|
| 4 |
+
{"prediction": "theorem separableClosure_finrank_le : IsCyclic (@SeparableAlgebra.mk L K).G := by sorry"}
|
| 5 |
+
{"prediction": "theorem separableClosure_finrank_le (A : Type*) [CommRing A] {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) (hP1 : P ≠ ⊥) (Q : Ideal B) [Q.IsPrime] (hQ : Q ≠ ⊤) (hQ1 : Q ≠ ⊥) (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) : (Algebra.mk A B).separability()< |G| := by sorry"}
|
| 6 |
+
{"prediction": "theorem separableClosure_finrank_le : ∀ (P : Ideal A) [P.IsPrime] (Q : Ideal B) [Q.IsPrime] (hP : P = ↑A) (hQ : Q = ↑B) (h : image (MulSemiringAction.mk G hQ) = ↑B) : (IsSepMax K L)._okay := by sorry"}
|
| 7 |
+
{"prediction": "theorem separableClosure_finrank_le {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): FiniteDimensional K (separableClosure K L) ∧ @separableClosure.finrank K L = G_finrank := by sorry"}
|
| 8 |
+
{"prediction": "theorem separableClosure_finrank_le : (∀ (M : Module K L), M ∈ returnExtensions G hG → ∃ (x : L), IsPrimitiveRoot x M) ∧ (∀ (C : Module G (Module K L)), C ∈ returnFrobeniusConjugacyClasses G hG → ∃ (x : L), IsPrimitiveRoot x C) ∧ (∀ (F : Module G (Module K L)), F ∈ returnFrobeniusElements G hG → ∃ (x : L), IsPrimitiveRoot x F) := by sorry"}
|
| 9 |
+
{"prediction": "theorem separableClosure_finrank_le : frobenius_ELEMENT_CONjugacy = frobenius_CONjugacy ∘ frobenius_ELEMENT := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-9c7bf2b80ac04b0a85876e36863d16de",
|
| 3 |
+
"created": 1749028667,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] (b : B) : G ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def maxSepSubextension (G : Type*) [Group G] [Finite G] (k : Type*) [Field k] (L : Type*) [Field L] [Algebra k L] : (L ⧸ k) →* L ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "noncomputable def frobenius_element (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime]\n : G ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "noncomputable def maxSepExt : K → L → Prop := ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "noncomputable def Frobenius conj (g : G) (p : Ideal B) : Ideal B := ((Ideal.Quotient.mk (g • p)) : Ideal B ⧸ span ({g • p} : Set (Ideal B))). localization.mk _ _\nnoncomputable def frosh (g : G) : Ideal B := frosh G.mk\n\ntheorem my_favorite_theorem : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "noncomputable def GaloisGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B] (P : Ideal A) [P.IsPrime] : Type* := MulSemiringAction (ZMod P) B\n\nnoncomputable def frobenius (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B] (P : Ideal A) [P.IsPrime] : GaloisGroup A B ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nnoncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X] :=\n if x = 0 then monomial (Nat.card G) 1\n else 37 -- this is not actually right. In the nonzero case you\n -- clear denominators with a nonzero element of A, using\n -- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar\n -- scaled appropriately.\n\ntheorem f_exists [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def frobenius_element (G : Type*) (A : Type*) [CommRing A] [Field A] [MulSemiringAction G A] : G → A ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] {B : Type*} [CommRing B] (h : Fintype.card G = frobeniusDegree G B) : G ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "noncomputable def maximal_separable_subextension : K →+* L → Prop ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "def FrobeniusElement {G : Type*} [Group G] {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B] [GaloisGroup G A B]\n : G → B ≃* B ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] (B : Type*) [CommRing B]\n (h : MulSemiringAction G B) : G ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B] (P : Ideal A) [P.IsPrime] (Q : Ideal B) [Q.IsPrime] : G ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B]\n [Algebra G B] : G ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "def countablyGenerated (R : Type*) [CommRing R] (M : Submodule R MvPolynomial)\n : Prop := ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "noncomputable defores (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] [Algebra.IsIntegral A B]\n {P : Ideal A} [P.IsPrime] (hP : P ≠ ⊥) (hP1 : P ≠ ⊤)\n (Q : Ideal B) [Q.IsPrime] (hQ : Q ≠ ⊥) (hQ1 : Q ≠ ⊤)\n : ∃ M : Ideal (B ⧸ Q), M.IsSeparable K L ∧ M.IsMaximal K L ∧\n M Dimen L = (Nat.card G) ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def galoisGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] : Type* :=\n",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def subextensionOf (R : Type*) [CommRing R] [IsScalarTower R K L] : Prop := ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "noncomputable def frobenius_element (G : Type*) [Group G] [Finite G] {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B] : G ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "def Frobenius_element (G : Type*) [Group G] [Finite G] (g : G) : G ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "noncomputable def maxSepExt (G : Type*) [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (Q : Ideal B) [Q.IsPrime] : Ideal B :=\n",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "noncomputable def GaloisGroup {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] : Type* :=\n",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "noncomputable def extensionPolynomial {R : Type*} [CommRing R] {L : Type*} [Field L]\n {P : Polynomial L} (hP : P.Monic) (hP1 : P.natDegree = Nat.card G) :\n ∃ F : G →* (L ⧸ span ({P.eval x} : Set L)), ∀ x : L, F x • x = x ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable deflocalinstance : IsSeparable L K := @SeparableAlgebra.mk L K\n\nnoncomputable deflocalinstance : IsMaxSeparable L K := @SeparableAlgebra.mk L K\n\ntheorem algebraMap.mk.exists.mk.lcm : IsCyclic (@SeparableAlgebra.mk L K).G ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "variable {A : Type*} [CommRing A]\n {B : Type*} [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [Finite G] [MulSemiringAction G B]\n\nopen Fintype Subgroup Set Polynomial Ideal\nopen scoped BigOperators\n\ndef frobenius (G : Type*) [Group G] [Fintype G] : G ≃* G ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime]\n : G → B ⧸ P ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "def frobeniusElementType {R G : Type*} [CommRing R] [Group G] [Fintype G]\n [MulSemiringAction G R] : G → R ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "noncomputable def maximalSeparableSubextension (K L : Type*) [Field K] [Field L] : Subextension K L :=\n",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "noncomputable def residualField (K : Type*) [Field K] : Type* := {x : K | ∃ a : A, x = a}\n\nnoncomputable def extension (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime] (P : Ideal A)\n [P.IsPrime] (hP : Submodule.IsAlgebraic P_A_B P) (hQ : Submodule.IsAlgebraic Q_A_B Q)\n : Type* := {x : B | ∃ a : A, x = a}\n\nnoncomputable def conjugacyGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime] (hQ : Submodule.IsAlgebraic Q_A_B Q) :\n Type* := {g : G | ∃ x : B, g • x = x}\n\nnoncomputable def frobeniusConjugacyGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime] (hQ : Submodule.IsAlgebraic Q_A_B Q) :\n Type* := {g : G | ∃ x : B, g • x = x ∧ g • (x ^ (Q_A_B).ncard) = x}\n\nnoncomputable def frobeniusElement (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [MulSemiringAction G B] (Q : Ideal B) [Q.IsPrime] (hQ : Submodule.IsAlgebraic Q_A_B Q) :\n G ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def GaloisGroup : Type* := Subgroup.Perm (Fin (Nat.card G))\n\ndef frobenius : GaloisGroup → Subgroup.Perm B ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def GaloisGroup (G : Type*) [Group G] (A : Type*) [CommRing A] (B : Type*) [CommRing B]\n [Algebra A B] : Type* := MulSemiringAction G B\n\nnoncomputable def frobeniusElement (G : Type*) [Group G] [Fintype G] (A : Type*) [CommRing A] (B : Type*) [CommRing B]\n [Algebra A B] : GaloisGroup G A B ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def fracs : Type := {x : ℚ | ∃ a : ℤ, x = a / 37}\n\nnoncomputable def Fr frob : fracs → fracs ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def frobenius_element {A : Type*} [CommRing A] {B : Type*} [CommRing B]\n [Algebra A B] {G : Type*} [Group G] [MulSemiringAction G B] : G →* G :=\n",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "theorem my_favorite_theorem (A : Type*) [CommRing A] {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) (hP1 : P ≠ ⊥) (Q : Ideal B) [Q.IsPrime] (hQ : Q ≠ ⊤) (hQ1 : Q ≠ ⊥) (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) : (Algebra.mk A B).separability()< |G| ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def image (f : G → B) : Set B := {b : B | ∃ g : G, f g • b = b}\n\ntheorem my_favorite_theorem : ∀ (P : Ideal A) [P.IsPrime] (Q : Ideal B) [Q.IsPrime] (hP : P = ↑A) (hQ : Q = ↑B) (h : image (MulSemiringAction.mk G hQ) = ↑B) : (IsSepMax K L)._okay ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "noncomputable def GaloisGroup (A : Type*) [CommRing A] (B : Type*) [CommRing B]\n [Algebra A B] [Algebra.IsIntegral A B] (G : Type*) [Group G] [Finite G]\n [MulSemiringAction G B] : Type* := MulSemiringAction G B\n\nnoncomputable def frobenius_element (A : Type*) [CommRing A] (B : Type*) [CommRing B]\n [Algebra A B] [Algebra.IsIntegral A B] (G : Type*) [Group G] [Finite G]\n [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) (hP1 : P ≠ ⊥)\n : GaloisGroup A B ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "noncomputable def maxSepSubextension (K L : Type*) [Field K] [Field L] [Algebra K L] : Module K L ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def answer ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable defGeneralization def frobenius_element (G : Type*) [Group G] [Finite G] (B : Type*) [CommRing B] [Algebra G B] (p : Ideal B) [p.IsPrime] (x : B) : G ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "noncomputable def isFrobenius (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]\n (G : Type*) [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime]\n (Q : Ideal B) [Q.IsPrime] (h : Q = P.restrict B) : G →* (B ⧸ Q)ˣ ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "noncomputable def OreLocalisation {A B : Type*} [CommRing A] [CommRing B] [Algebra A B]\n {G : Type*} [Group G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) :\n ∃ F : G →* B, ∀ x : B, (∀ g : G, g • x = x) ↔\n ∃ a : A, x = a ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "theorem my_favorite_theorem {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): FiniteDimensional K (separableClosure K L) ∧ @separableClosure.finrank K L = G_finrank ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def returnExtensions (G : Type*) [Group G] (hG : Finite G) : Set (Module K L) := {M : Module K L | ∃ f : Module L M, f.Monic ∧ f.Splits id ∧ f.MapsTo id}\n\nnoncomputable def returnFrobeniusConjugacyClasses (G : Type*) [Group G] (hG : Finite G) : Set (Module G (Module K L)) := {ConjugacyClass.mk G L _ _ | (M : Module K L) (_ : M ∈ returnExtensions G hG)}\n\nnoncomputable def returnFrobeniusElements (G : Type*) [Group G] (hG : Finite G) : Set (Module G (Module K L)) := {Frobenius.mk G L _ _ | (M : Module K L) (_ : M ∈ returnExtensions G hG)}\n\ntheorem my_favorite_theorem : (∀ (M : Module K L), M ∈ returnExtensions G hG → ∃ (x : L), IsPrimitiveRoot x M) ∧ (∀ (C : Module G (Module K L)), C ∈ returnFrobeniusConjugacyClasses G hG → ∃ (x : L), IsPrimitiveRoot x C) ∧ (∀ (F : Module G (Module K L)), F ∈ returnFrobeniusElements G hG → ∃ (x : L), IsPrimitiveRoot x F) ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "noncomputable def GaloisGroup {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] : Type* ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def GaloisGroup : Type* ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Finite G] (B : Type*) [CommRing B] [Algebra A B]\n (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) : G :=\n",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "noncomputable def G : Type* := GaloisGroup.mk _ _ _\nnoncomputable def A : Type* := GaloisGroup.mk _ _ _.carrier\nnoncomputable def B : Type* := GaloisGroup.mk _ _.carrier\nnoncomputable def GAlgebra : Type* := Algebra.mk G B\nnoncomputable def frobenius : GAlgebra → GAlgebra := GaloisGroup.frobenius.mk G _\nnoncomputable def frobenius_ELEMENT : GAlgebra := GaloisGroup.frobenius_ELEMENT G _.carrier\nnoncomputable def frobenius_CONjugacy : GAlgebra ≃* GAlgebra := GaloisGroup.frobenius_CONjugacy G _.carrier\n\nnoncomputable def frobenius_ELEMENT_CONjugacy : GAlgebra ≃* GAlgebra := GaloisGroup.frobenius_ELEMENT_CONjugacy G _.carrier\n\ntheorem my_favorite_theorem : frobenius_ELEMENT_CONjugacy = frobenius_CONjugacy ∘ frobenius_ELEMENT ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "noncomputable def GaloisGroup : Type* := Subgroup.Closure {g : G | ∃ a : A, g • a = a}\n\ndef frobenius_element : GaloisGroup → B ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "def frobenius_element (G : Type*) [Group G] [Fintype G] (B : Type*) [CommRing B] [Algebra G B]\n: B →ₗ[G]ₗ[G] B :=\n",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 4476,
|
| 511 |
+
"prompt_tokens": 2213,
|
| 512 |
+
"total_tokens": 6689,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/Bourbaki52222.separableClosure_finrank_le/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": "theorem separableClosure_finrank_le : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": "theorem separableClosure_finrank_le [DecidableEq L] (l : L) :\n ∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧\n eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": "theorem separableClosure_finrank_le : IsCyclic (@SeparableAlgebra.mk L K).G := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": "theorem separableClosure_finrank_le (A : Type*) [CommRing A] {B : Type*} [CommRing B] [Algebra A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (P : Ideal A) [P.IsPrime] (hP : P ≠ ⊤) (hP1 : P ≠ ⊥) (Q : Ideal B) [Q.IsPrime] (hQ : Q ≠ ⊤) (hQ1 : Q ≠ ⊥) (h : ∀ b : B, (∀ g : G, g • b = b) ↔ ∃ a : A, b = a) : (Algebra.mk A B).separability()< |G| := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": "theorem separableClosure_finrank_le : ∀ (P : Ideal A) [P.IsPrime] (Q : Ideal B) [Q.IsPrime] (hP : P = ↑A) (hQ : Q = ↑B) (h : image (MulSemiringAction.mk G hQ) = ↑B) : (IsSepMax K L)._okay := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": "theorem separableClosure_finrank_le {A : Type*} [CommRing A] {B : Type*} [CommRing B] [Algebra A B]\n [Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)\n [Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]\n [IsScalarTower A (A ⧸ P) (B ⧸ Q)] (L : Type*) [Field L] [Algebra (B ⧸ Q) L]\n [IsFractionRing (B ⧸ Q) L] [Algebra (A ⧸ P) L] [IsScalarTower (A ⧸ P) L]\n (K : Type*) [Field K] [Algebra (A ⧸ P) K] [IsFractionRing (A ⧸ P) K]\n [Algebra K L] [IsScalarTower (A ⧸ P) K L] [Algebra A K] [IsScalarTower A (A ⧸ P) K]\n [Algebra B L] [IsScalarTower B (B ⧸ Q) L] [Algebra A L] [IsScalarTower A K L]\n [IsScalarTower A B L]\n (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a): FiniteDimensional K (separableClosure K L) ∧ @separableClosure.finrank K L = G_finrank := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": "theorem separableClosure_finrank_le : (∀ (M : Module K L), M ∈ returnExtensions G hG → ∃ (x : L), IsPrimitiveRoot x M) ∧ (∀ (C : Module G (Module K L)), C ∈ returnFrobeniusConjugacyClasses G hG → ∃ (x : L), IsPrimitiveRoot x C) ∧ (∀ (F : Module G (Module K L)), F ∈ returnFrobeniusElements G hG → ∃ (x : L), IsPrimitiveRoot x F) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": "theorem separableClosure_finrank_le : frobenius_ELEMENT_CONjugacy = frobenius_CONjugacy ∘ frobenius_ELEMENT := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/ground_truth.lean
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Kevin Buzzard. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Kevin Buzzard, Ludwig Monnerjahn, Hannah Scholz
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.Geometry.Manifold.Instances.UnitsOfNormedAlgebra
|
| 7 |
+
import Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Basic
|
| 8 |
+
import Mathlib.NumberTheory.NumberField.Basic
|
| 9 |
+
import Mathlib.RingTheory.DedekindDomain.FiniteAdeleRing
|
| 10 |
+
import Mathlib.Algebra.Group.Subgroup.Pointwise
|
| 11 |
+
import FLT.ForMathlib.ActionTopology
|
| 12 |
+
import FLT.NumberField.IsTotallyReal
|
| 13 |
+
import FLT.NumberField.AdeleRing
|
| 14 |
+
import Mathlib.GroupTheory.DoubleCoset
|
| 15 |
+
|
| 16 |
+
/-
|
| 17 |
+
|
| 18 |
+
# Fujisaki's lemma
|
| 19 |
+
|
| 20 |
+
We prove a lemma which Voight (in his quaternion algebra book) attributes to Fujisaki:
|
| 21 |
+
if `D` is a finite-dimensional division algebra over a number field `K`
|
| 22 |
+
and if `U ⊆ (D ⊗[K] 𝔸_K^infty)ˣ` is a compact open subgroup then the double coset
|
| 23 |
+
space `Dˣ \ (D ⊗ 𝔸_F^infty)ˣ / U` is finite.
|
| 24 |
+
|
| 25 |
+
-/
|
| 26 |
+
|
| 27 |
+
suppress_compilation
|
| 28 |
+
|
| 29 |
+
open DedekindDomain
|
| 30 |
+
|
| 31 |
+
open scoped NumberField TensorProduct
|
| 32 |
+
|
| 33 |
+
variable (K : Type*) [Field K] [NumberField K]
|
| 34 |
+
variable (D : Type*) [DivisionRing D] [Algebra K D]
|
| 35 |
+
|
| 36 |
+
local instance : TopologicalSpace (FiniteAdeleRing (𝓞 K) K ⊗[K] D) :=
|
| 37 |
+
actionTopology (FiniteAdeleRing (𝓞 K) K) _
|
| 38 |
+
local instance : IsActionTopology (FiniteAdeleRing (𝓞 K) K) ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D) :=
|
| 39 |
+
⟨rfl⟩
|
| 40 |
+
|
| 41 |
+
variable [FiniteDimensional K D]
|
| 42 |
+
|
| 43 |
+
instance : TopologicalRing ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D) :=
|
| 44 |
+
ActionTopology.Module.topologicalRing (FiniteAdeleRing (𝓞 K) K) _
|
| 45 |
+
|
| 46 |
+
variable [Algebra.IsCentral K D]
|
| 47 |
+
|
| 48 |
+
abbrev Dfx := ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D)ˣ
|
| 49 |
+
|
| 50 |
+
noncomputable abbrev incl₁ : Dˣ →* Dfx K D :=
|
| 51 |
+
Units.map Algebra.TensorProduct.includeRight.toMonoidHom
|
| 52 |
+
|
| 53 |
+
-- noncomputable abbrev incl₂ : (FiniteAdeleRing (𝓞 K) K)ˣ →* Dfx K D :=
|
| 54 |
+
-- Units.map Algebra.TensorProduct.includeLeftRingHom.toMonoidHom
|
| 55 |
+
|
| 56 |
+
-- Voight "Main theorem 27.6.14(b) (Fujisaki's lemma)"
|
| 57 |
+
/-!
|
| 58 |
+
If `D` is a finite-dimensional division algebra over a number field `K`
|
| 59 |
+
then the double coset space `Dˣ \ (D ⊗ 𝔸_K^infty)ˣ / U` is finite for any compact open subgroup `U`
|
| 60 |
+
of `(D ⊗ 𝔸_F^infty)ˣ`.
|
| 61 |
+
-/
|
| 62 |
+
|
| 63 |
+
theorem DivisionAlgebra.finiteDoubleCoset {U : Subgroup (Dfx K D)} (hU : IsOpen (U : Set (Dfx K D))) :
|
| 64 |
+
Finite (Doset.Quotient (Set.range (incl₁ K D)) U) := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/input_messages_compress_0.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.Geometry.Manifold.Instances.UnitsOfNormedAlgebra\nimport Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Basic\nimport Mathlib.NumberTheory.NumberField.Basic\nimport Mathlib.RingTheory.DedekindDomain.FiniteAdeleRing\nimport Mathlib.Algebra.Group.Subgroup.Pointwise\nimport FLT.ForMathlib.ActionTopology\nimport FLT.NumberField.IsTotallyReal\nimport FLT.NumberField.AdeleRing\nimport Mathlib.GroupTheory.DoubleCoset\n\n/-\n\n# Fujisaki's lemma\n\nWe prove a lemma which Voight (in his quaternion algebra book) attributes to Fujisaki:\nif `D` is a finite-dimensional division algebra over a number field `K`\nand if `U ⊆ (D ⊗[K] 𝔸_K^infty)ˣ` is a compact open subgroup then the double coset\nspace `Dˣ \\ (D ⊗ 𝔸_F^infty)ˣ / U` is finite.\n\n-/\n\nsuppress_compilation\n\nopen DedekindDomain\n\nopen scoped NumberField TensorProduct\n\nvariable (K : Type*) [Field K] [NumberField K]\nvariable (D : Type*) [DivisionRing D] [Algebra K D]\n\nlocal instance : TopologicalSpace (FiniteAdeleRing (𝓞 K) K ⊗[K] D) :=\n actionTopology (FiniteAdeleRing (𝓞 K) K) _\nlocal instance : IsActionTopology (FiniteAdeleRing (𝓞 K) K) ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D) :=\n ⟨rfl⟩\n\nvariable [FiniteDimensional K D]\n\ninstance : TopologicalRing ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D) :=\n ActionTopology.Module.topologicalRing (FiniteAdeleRing (𝓞 K) K) _\n\nvariable [Algebra.IsCentral K D]\n\nabbrev Dfx := ((FiniteAdeleRing (𝓞 K) K) ⊗[K] D)ˣ\n\nnoncomputable abbrev incl₁ : Dˣ →* Dfx K D :=\n Units.map Algebra.TensorProduct.includeRight.toMonoidHom\n\n-- noncomputable abbrev incl₂ : (FiniteAdeleRing (𝓞 K) K)ˣ →* Dfx K D :=\n-- Units.map Algebra.TensorProduct.includeLeftRingHom.toMonoidHom\n\n-- Voight \"Main theorem 27.6.14(b) (Fujisaki's lemma)\"\n/-!\nIf `D` is a finite-dimensional division algebra over a number field `K`\nthen the double coset space `Dˣ \\ (D ⊗ 𝔸_K^infty)ˣ / U` is finite for any compact open subgroup `U`\nof `(D ⊗ 𝔸_F^infty)ˣ`.\n-/\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nIf $U\\subseteq (B\\otimes _K\\mathbb {A}_K^\\infty )^\\times $ is a compact open subgroup, then the double coset space $B^\\times \\backslash (B\\otimes _K\\mathbb {A}_K^\\infty )^\\times /U$ is a finite set."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B} (hU : IsOpen U ∧ U.IsCompact) : Finite (Bˣ \\ (B ⊗[K] (Bˣ)) / U) := by sorry"}
|
| 3 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup (B ⊗ₗ[K] (𝓞 K))) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((Bˣ) \\ (B ⊗ₗ[K] (𝓞 K))ˣ / U) := by sorry"}
|
| 4 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] Aₗ[K])) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B⊗ₗ[K] Aₗ[K])ˣ \\ (B⊗ₗ[K] Aₗ[K])ˣ / U) := by sorry"}
|
| 5 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ)) (hU : IsOpen U) :\n Finite ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ \\ (B ⧸ span ({⟨0, 1⟩} : Set B))ˣ / U) := by sorry"}
|
| 6 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup ((B ⊗[K] (borah K))ˣ)) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite (Bˣ \\ (B ⊗[K] (borah K))ˣ / U) := by sorry"}
|
| 7 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B⊗ K $ AdeleRing K)} (hU : IsOpen U ∧ U.IsCompact) : Finite ((B⊗ K $ AdeleRing K)ˣ \\ (B⊗ K $ AdeleRing K)ˣ / U) := by sorry"}
|
| 8 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset (B : Type*) [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ))\n (hU : IsCompact U ∧ IsOpen U) :\n Finite (doubleCoset B U) := by sorry"}
|
| 9 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B}\n(hU : IsCompact U ∧ IsOpen U) : Finite (doubleCosetSpace U) := by sorry"}
|
| 10 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup (B ×ₗ[K] B)} (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ×ₗ[K] B) ⧸ U) := by sorry"}
|
| 11 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [NormedAddCommGroup B] [InnerProductSpace K B] [FiniteDimensional K B]\n (U : Subgroup ((B ◓ (环氧 K))ˣ)) (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ◓ (环氧 K))ˣ ⧸ ((B ◓ (环氧 K))ˣ) / U) := by sorry"}
|
| 12 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset (K : Type*) [Field K] [NumberField K]\n (B : Type*) [DivisionRing B] [Algebra K B] :\n ∀ U : Subgroup ((B ⊗[K] (Algebra.of K B))ˣ), IsCompact U → IsOpen U → Finite (Bˣ \\ (B ⊗[K] (Algebra.of K B))ˣ / U) := by sorry"}
|
| 13 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗ₗ[K] B)}\n(hU : IsOpen U ∧ IsCompact U) : Finite (B × \\ (B ⊗ₗ[K] B) × / U) := by sorry"}
|
| 14 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup ((B ◸ span ({⟨0⟩} : Set B)) × B)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B ◸ span ({⟨0⟩} : Set B)) × B)ˣ / U := by sorry"}
|
| 15 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (hB : FiniteDimensional K B)\n (U : Subgroup ((B × K)ˣ))\n (hU : IsCompact U)\n (hU1 : IsOpen U) :\n Finite ((B × K)ˣ \\ (B × K)ˣ / U) := by sorry"}
|
| 16 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B × 𝔸 K)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B × 𝔸 K) / U) := by sorry"}
|
| 17 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] (hB : FiniteDimensional K B) (U : Subgroup B) (hU : IsOpen U) (hU1 : IsCompact U) : Finite (Bˣ \\ (B ⊗ 𝔸 K)ˣ / U) := by sorry"}
|
| 18 |
+
{"prediction": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗[K] Algebra.AffineSpace K)}\n (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B ⊗[K] Algebra.AffineSpace K)ˣ \\ (B ⊗[K] Algebra.AffineSpace K)ˣ / U) := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-826f3d565a23479e9dcda86f145f87fa",
|
| 3 |
+
"created": 1749028660,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "noncomputable def doubleCosetSpace {K : Type*} [Field K] [NumberField K] {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup (B ⊗ₗ[K] (AdèleRing K))) : Set (B ×ₗ[K] (AdèleRing K)) :=\n",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B × 𝔸 K)) : Set (B × 𝔸 K) ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : AddSubgroup (B ⊗[K] Algebra.Archimedean B)) : Type* ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] (AdeleRing K))) : Set (B ⊗[K] (AdeleRing K)) ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] A)) : Set (B ⊗[K] A) ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "open scoped BigOperators\n\ntheorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B} (hU : IsOpen U ∧ U.IsCompact) : Finite (Bˣ \\ (B ⊗[K] (Bˣ)) / U) ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "variable {B : Type*} [DivisionRing B] [Algebra K B]\n\nnoncomputable def double_coset (U : Subgroup (B ⊗ₗ[K] A)) : Set (B ⊗ₗ[K] A) ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup (B ⊗ₗ[K] (𝓞 K))) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((Bˣ) \\ (B ⊗ₗ[K] (𝓞 K))ˣ / U) :=\n",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] (Algebra K B))) : Set (B × B ⊗[K] (Algebra K B) / U) ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "variable {B : Type*} [DivisionRing B] [Algebra K B]\n\nnoncomputable def double_coset (U : Subgroup (B⊗ₗ[K] Aₗ[K] B)) : Set (B⊗ₗ[K] Aₗ[K] B) ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "open scoped BigOperators\n\ntheorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] Aₗ[K])) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B⊗ₗ[K] Aₗ[K])ˣ \\ (B⊗ₗ[K] Aₗ[K])ˣ / U) ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "open Fintype Set Real Ideal Polynomial\nopen scoped BigOperators\n\ntheorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ)) (hU : IsOpen U) :\n Finite ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ \\ (B ⧸ span ({⟨0, 1⟩} : Set B))ˣ / U) :=\n",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "variable {B : Type*} [DivisionRing B] [Algebra K B]\n\nnoncomputable def doubleCosetSpace (UB : Subgroup ((B ⊗ 𝔸 K)ˣ)) : Type* ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup ((B ⊗[K] (borah K))ˣ)) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite (Bˣ \\ (B ⊗[K] (borah K))ˣ / U) :=\n",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : AddSubgroup (B ⊗ₗ[K] A)) : Type* ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B⊗ K $ AdeleRing K)} (hU : IsOpen U ∧ U.IsCompact) : Finite ((B⊗ K $ AdeleRing K)ˣ \\ (B⊗ K $ AdeleRing K)ˣ / U) ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "open scoped BigOperators\n\ndef doubleCosetSpace {K : Type*} [Field K] [NumberField K]\n {B : Type*} [DivisionRing B] [Algebra K B] (hB : FiniteDimensional K B)\n {U : Subgroup ((B ⊗[K] (AdeleRing K))ˣ)} (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite (Bˣ \\ (B ⊗[K] (AdeleRing K))ˣ / U) :=\n",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : AddSubgroup (B ⊗[K] A))\n : Set Bˣ ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] A)) : Type ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] (Dfx K B))) : Set (B × (B ⊗[K] (Dfx K B))) ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup ((B ⊗[K] A)ˣ)) : Set (Bˣ) ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "open scoped BigOperators\n\nnoncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B]\n (U : Subgroup ((B ⊗[K] A)ˣ)) : Set (Bˣ) ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ)) : Set (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ) :=\n (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ)⁻¹ ⊓ U\n\ntheorem my_favorite_theorem\n (B : Type*) [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ))\n (hU : IsCompact U ∧ IsOpen U) :\n Finite (doubleCoset B U) :=\n",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "noncomputable def doubleCosetSpace {B : Type*} [DivisionRing B] [Algebra K B] (U : Subgroup (Bˣ)) : Type :=\n (Bˣ) ⧸ U\n\nnoncomputable def AdeleRing : Type := FiniteAdeleRing (𝓞 K) K\n\nnoncomputable def quaternionAlgebra : Type := TensorProduct AdeleRing ( QuaternionAlgebra.build QuaternionAlgebra.componentwise QuaternionAlgebra.literature QuaternionAlgebra.sym )\n\nnoncomputable def U : Subgroup (quaternionAlgebraˣ) := Subgroup.closure { incl₁ , incl₂ }\n\nnoncomputable def doubleCosetSpace QuaternionAlgebra : Type := doubleCosetSpace QuaternionAlgebra U\n\nnoncomputable def Voight_ Main_ Theorem_27_6_14_b_Fujisaki_87 : Prop ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup ((B ⊗[K] A)ˣ)) : Set ((B ⊗[K] A)ˣ) ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup ((B ⊗[K] A)ˣ)) : Set Bˣ ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B}\n(hU : IsCompact U ∧ IsOpen U) : Finite (doubleCosetSpace U) ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [NormedAddCommGroup B] [InnerProductSpace K B] [FiniteDimensional K B] (U : Subgroup (InnerProductSpace K B)) : Set (InnerProductSpace K B) ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup (B ×ₗ[K] B)} (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ×ₗ[K] B) ⧸ U) :=\n",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B⊗ₗ[K] (A : Type*) [DivisionRing A])) : Set (B⊗ₗ[K] (A : Type*) [DivisionRing A]) ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] [FiniteDimensional K B]\n (U : Subgroup (B ⊗[K] Algebra.of K B)) : Set*Bˣ ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B⊗K(AdeleRing K B))) : Set (B⊗K(AdeleRing K B)) ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup ((B ⊗[K] A)ˣ)) : Type ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] [FiniteDimensional K B]\n (U : Subgroup ((B ⊗ K ⌊B⌋)ˣ)) : Set ((B ⊗ K ⌊B⌋)ˣ) :=\n",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] A K)) : Set (B × B ⊗[K] A K) ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] [FiniteDimensional K B]\n (U : Subgroup ((B ×代 K)ˣ)) : Set (B ×代 K) :=\n",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "open scoped BigOperators\n\ntheorem my_favorite_theorem\n {B : Type*} [NormedAddCommGroup B] [InnerProductSpace K B] [FiniteDimensional K B]\n (U : Subgroup ((B ◓ (环氧 K))ˣ)) (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ◓ (环氧 K))ˣ ⧸ ((B ◓ (环氧 K))ˣ) / U) ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "open scoped BigOperators\n\ntheorem NumberField.Basic.totalDegree\n (K : Type*) [Field K] [NumberField K]\n (B : Type*) [DivisionRing B] [Algebra K B] :\n ∀ U : Subgroup ((B ⊗[K] (Algebra.of K B))ˣ), IsCompact U → IsOpen U → Finite (Bˣ \\ (B ⊗[K] (Algebra.of K B))ˣ / U) :=\n",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def double_coset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup ((B ⊗[K] A)ˣ)) : Set ((B ⊗[K] A)ˣ) ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B⊗ₗ[K] (AdeleRing K))) : Set (B⊗ₗ[K] (AdeleRing K)) ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "open scoped BigOperators\n\ntheorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗ₗ[K] B)}\n(hU : IsOpen U ∧ IsCompact U) : Finite (B × \\ (B ⊗ₗ[K] B) × / U) ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup ((B ◸ span ({⟨0⟩} : Set B)) × B)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B ◸ span ({⟨0⟩} : Set B)) × B)ˣ / U :=\n",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "open scoped BigOperators\n\ntheorem my_favorite_theorem\n {B : Type*} [DivisionRing B] [Algebra K B]\n (hB : FiniteDimensional K B)\n (U : Subgroup ((B × K)ˣ))\n (hU : IsCompact U)\n (hU1 : IsOpen U) :\n Finite ((B × K)ˣ \\ (B × K)ˣ / U) :=\n",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B × �� K)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B × 𝔸 K) / U) ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B] (U : Subgroup (B ⊗[K] 𝔸 K)) : Set Bˣ :=\n let R := (B ⊗[K] 𝔸 K)ˣ\n let S := Bˣ \\ R / U\n let T := Subgroup.closure {x : R | ∃ y : S, x = incl₁ y}\n let U' := Subgroup.closure {x : R | ∃ y : S, x = incl₂ y}\n let V := T \\ U'\n let W := Subgroup.closure {x : T | ∃ y : V, x = y}\n let Z := Subgroup.closure {x : T | ∃ y : W, x = y}\n let doubleCoset := T \\ Z\n doubleCoset\n\nnoncomputable def Fujisaki_Levi_94_28_2623_27_6_14_b (B : Type*) [DivisionRing B] [Algebra K B] (hB : FiniteDimensional K B) (U : Subgroup (B ⊗[K] 𝔸 K)) : Finite (doubleCoset B hB U) :=\n",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "noncomputable def doubleCosetSpace (B : Type*) [DivisionRing B] [Algebra K B] (U : AddSubgroup (B ⊗[K] (Algebra.powerset B))) : Type* ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "noncomputable def doubleCosetSpace {K : Type*} [Field K] [NumberField K] {B : Type*} [DivisionRing B] [Algebra K B] (U : Subgroup ((B ×K B)ˣ)) : Set ((B ×K B)ˣ) ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "noncomputable def doubleCoset (B : Type*) [DivisionRing B] [Algebra K B]\n (U : Subgroup ((B ⊗[K] (A K))ˣ)) : Set (Bˣ) :=\n",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] (hB : FiniteDimensional K B) (U : Subgroup B) (hU : IsOpen U) (hU1 : IsCompact U) : Finite (Bˣ \\ (B ⊗ 𝔸 K)ˣ / U) :=\n",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "theorem my_favorite_theorem {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗[K] Algebra.AffineSpace K)}\n (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B ⊗[K] Algebra.AffineSpace K)ˣ \\ (B ⊗[K] Algebra.AffineSpace K)ˣ / U) ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 3776,
|
| 511 |
+
"prompt_tokens": 735,
|
| 512 |
+
"total_tokens": 4511,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/DivisionAlgebra.finiteDoubleCoset/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B} (hU : IsOpen U ∧ U.IsCompact) : Finite (Bˣ \\ (B ⊗[K] (Bˣ)) / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup (B ⊗ₗ[K] (𝓞 K))) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((Bˣ) \\ (B ⊗ₗ[K] (𝓞 K))ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] Aₗ[K])) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B⊗ₗ[K] Aₗ[K])ˣ \\ (B⊗ₗ[K] Aₗ[K])ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (U : Subgroup ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ)) (hU : IsOpen U) :\n Finite ((B ⧸ span ({⟨0, 1⟩} : Set B))ˣ \\ (B ⧸ span ({⟨0, 1⟩} : Set B))ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n [FiniteDimensional K B] (U : Subgroup ((B ⊗[K] (borah K))ˣ)) (hU : IsOpen U) (hU' : IsCompact U) :\n Finite (Bˣ \\ (B ⊗[K] (borah K))ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B⊗ K $ AdeleRing K)} (hU : IsOpen U ∧ U.IsCompact) : Finite ((B⊗ K $ AdeleRing K)ˣ \\ (B⊗ K $ AdeleRing K)ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset (B : Type*) [DivisionRing B] [Algebra K B]\n (U : Subgroup (B⊗ₗ[K] (B ⧸ span ({⟨0⟩} : Set B))ˣ))\n (hU : IsCompact U ∧ IsOpen U) :\n Finite (doubleCoset B U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup B}\n(hU : IsCompact U ∧ IsOpen U) : Finite (doubleCosetSpace U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup (B ×ₗ[K] B)} (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ×ₗ[K] B) ⧸ U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [NormedAddCommGroup B] [InnerProductSpace K B] [FiniteDimensional K B]\n (U : Subgroup ((B ◓ (环氧 K))ˣ)) (hU : IsOpen U) (hU1 : IsCompact U) :\n Finite ((B ◓ (环氧 K))ˣ ⧸ ((B ◓ (环氧 K))ˣ) / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset (K : Type*) [Field K] [NumberField K]\n (B : Type*) [DivisionRing B] [Algebra K B] :\n ∀ U : Subgroup ((B ⊗[K] (Algebra.of K B))ˣ), IsCompact U → IsOpen U → Finite (Bˣ \\ (B ⊗[K] (Algebra.of K B))ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗ₗ[K] B)}\n(hU : IsOpen U ∧ IsCompact U) : Finite (B × \\ (B ⊗ₗ[K] B) × / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n {U : Subgroup ((B ◸ span ({⟨0⟩} : Set B)) × B)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B ◸ span ({⟨0⟩} : Set B)) × B)ˣ / U := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B]\n (hB : FiniteDimensional K B)\n (U : Subgroup ((B × K)ˣ))\n (hU : IsCompact U)\n (hU1 : IsOpen U) :\n Finite ((B × K)ˣ \\ (B × K)ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B × 𝔸 K)}\n (hU : IsCompact U) (hU1 : IsOpen U) :\n Finite ((B × 𝔸 K) / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] (hB : FiniteDimensional K B) (U : Subgroup B) (hU : IsOpen U) (hU1 : IsCompact U) : Finite (Bˣ \\ (B ⊗ 𝔸 K)ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": "theorem DivisionAlgebra.finiteDoubleCoset {B : Type*} [DivisionRing B] [Algebra K B] {U : Subgroup (B ⊗[K] Algebra.AffineSpace K)}\n (hU : IsOpen U) (hU' : IsCompact U) :\n Finite ((B ⊗[K] Algebra.AffineSpace K)ˣ \\ (B ⊗[K] Algebra.AffineSpace K)ˣ / U) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/ground_truth.lean
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Kevin Buzzard. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.AlgebraicGeometry.EllipticCurve.Group
|
| 7 |
+
import Mathlib.FieldTheory.IsSepClosed
|
| 8 |
+
import Mathlib.RepresentationTheory.Basic
|
| 9 |
+
|
| 10 |
+
/-!
|
| 11 |
+
|
| 12 |
+
See
|
| 13 |
+
https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078
|
| 14 |
+
|
| 15 |
+
The main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's
|
| 16 |
+
PhD students. It would be great if anyone who is interested in working on these results
|
| 17 |
+
could talk to David first. Note that he has already made substantial progress.
|
| 18 |
+
|
| 19 |
+
-/
|
| 20 |
+
|
| 21 |
+
universe u
|
| 22 |
+
|
| 23 |
+
variable {k : Type u} [Field k] (E : EllipticCurve k)
|
| 24 |
+
|
| 25 |
+
open WeierstrassCurve WeierstrassCurve.Affine
|
| 26 |
+
|
| 27 |
+
abbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n
|
| 28 |
+
|
| 29 |
+
--variable (n : ℕ) in
|
| 30 |
+
--#synth AddCommGroup (E.n_torsion n)
|
| 31 |
+
|
| 32 |
+
def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :
|
| 33 |
+
Module (ZMod n) A :=
|
| 34 |
+
sorry
|
| 35 |
+
|
| 36 |
+
-- not sure if this instance will cause more trouble than it's worth
|
| 37 |
+
instance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard
|
| 38 |
+
|
| 39 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 40 |
+
-- Please do not work on it without talking to KB and David first.
|
| 41 |
+
theorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry
|
| 42 |
+
|
| 43 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 44 |
+
-- Please do not work on it without talking to KB and David first.
|
| 45 |
+
theorem EllipticCurve.n_torsion_card [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :
|
| 46 |
+
Nat.card (E.n_torsion n) = n^2 := sorry
|
| 47 |
+
|
| 48 |
+
set_option autoImplicit true in -- TODO: fix statement
|
| 49 |
+
theorem group_theory_lemma {A : Type*} [AddCommGroup A] {n : ℕ} (hn : 0 < n) (r : ℕ)
|
| 50 |
+
(h : ∀ d : ℕ, d ∣ n → Nat.card (Submodule.torsionBy ℤ A d) = d ^ r) :
|
| 51 |
+
∃ φ :(Submodule.torsionBy ℤ A n) ≃+ Fin d → (ZMod n), True := sorry
|
| 52 |
+
|
| 53 |
+
-- I only need this if n is prime but there's no harm thinking about it in general I guess.
|
| 54 |
+
-- It follows from the previous theorem using pure group theory (possibly including the
|
| 55 |
+
-- structure theorem for finite abelian groups)
|
| 56 |
+
theorem EllipticCurve.n_torsion_dimension [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :
|
| 57 |
+
∃ φ : E.n_torsion n ≃+ (ZMod n) × (ZMod n), True := sorry
|
| 58 |
+
|
| 59 |
+
-- This should be a straightforward but perhaps long unravelling of the definition
|
| 60 |
+
/-- The map on points for an elliptic curve over `k` induced by a morphism of `k`-algebras
|
| 61 |
+
is a group homomorphism. -/
|
| 62 |
+
def EllipticCurve.Points.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]
|
| 63 |
+
(f : K →ₐ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ := sorry
|
| 64 |
+
|
| 65 |
+
lemma EllipticCurve.Points.map_id (K : Type u) [Field K] [Algebra k K] :
|
| 66 |
+
EllipticCurve.Points.map E (AlgHom.id k K) = AddMonoidHom.id _ := sorry
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
theorem EllipticCurve.Points.map_comp (K L M : Type u) [Field K] [Field L] [Field M]
|
| 70 |
+
[Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₐ[k] L) (g : L →ₐ[k] M) :
|
| 71 |
+
(EllipticCurve.Points.map E g).comp (EllipticCurve.Points.map E f) =
|
| 72 |
+
EllipticCurve.Points.map E (g.comp f) := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/input_messages_compress_0.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.AlgebraicGeometry.EllipticCurve.Group\nimport Mathlib.FieldTheory.IsSepClosed\nimport Mathlib.RepresentationTheory.Basic\n\n/-!\n\nSee\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078\n\nThe main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's\nPhD students. It would be great if anyone who is interested in working on these results\ncould talk to David first. Note that he has already made substantial progress.\n\n-/\n\nuniverse u\n\nvariable {k : Type u} [Field k] (E : EllipticCurve k)\n\nopen WeierstrassCurve WeierstrassCurve.Affine\n\nabbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\n--variable (n : ℕ) in\n--#synth AddCommGroup (E.n_torsion n)\n\ndef ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n sorry\n\n-- not sure if this instance will cause more trouble than it's worth\ninstance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\ntheorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\ntheorem EllipticCurve.n_torsion_card [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :\n Nat.card (E.n_torsion n) = n^2 := sorry\n\nset_option autoImplicit true in -- TODO: fix statement\ntheorem group_theory_lemma {A : Type*} [AddCommGroup A] {n : ℕ} (hn : 0 < n) (r : ℕ)\n (h : ∀ d : ℕ, d ∣ n → Nat.card (Submodule.torsionBy ℤ A d) = d ^ r) :\n ∃ φ :(Submodule.torsionBy ℤ A n) ≃+ Fin d → (ZMod n), True := sorry\n\n-- I only need this if n is prime but there's no harm thinking about it in general I guess.\n-- It follows from the previous theorem using pure group theory (possibly including the\n-- structure theorem for finite abelian groups)\ntheorem EllipticCurve.n_torsion_dimension [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :\n ∃ φ : E.n_torsion n ≃+ (ZMod n) × (ZMod n), True := sorry\n\n-- This should be a straightforward but perhaps long unravelling of the definition\n/-- The map on points for an elliptic curve over `k` induced by a morphism of `k`-algebras\nis a group homomorphism. -/\ndef EllipticCurve.Points.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₐ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ := sorry\n\nlemma EllipticCurve.Points.map_id (K : Type u) [Field K] [Algebra k K] :\n EllipticCurve.Points.map E (AlgHom.id k K) = AddMonoidHom.id _ := sorry\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nIf $K\\to L\\to M$ are $k$-algebra homomorphisms then the group homomorphism $E(K)\\to E(M)$ induced by the map $K\\to M$ is the composite of the map $E(K)\\to E(L)$ induced by $K\\to L$ and the map $E(L)\\to E(M)$ induced by the map $L\\to M$."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n let E : Type u := by sorry"}
|
| 3 |
+
{"prediction": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ := by sorry"}
|
| 4 |
+
{"prediction": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L]\n [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n let e := EllipticCurve.Points.map E f\n let f' := EllipticCurve.Points.map E g\n e ∘ f' = EllipticCurve.Points.map E (f ∘ g) := by sorry"}
|
| 5 |
+
{"prediction": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n ( EllipticCurve.Points.map E f ) ∘ ( EllipticCurve.Points.map E g ) =\n EllipticCurve.Points.map E ( f ∘ g ) := by sorry"}
|
| 6 |
+
{"prediction": "theorem EllipticCurve.Points.map_comp {K L M : Type u} (hK :Field K) (hL :Field L) (hM :Field M) (f : EHom K L) (g : EHom L M) : EHom K M = EHom.comp f g := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-d455bf44453b4bf194faf729df54f2ce",
|
| 3 |
+
"created": 1749028657,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def EllipticCurve.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "theorem EllipticCurve.map_composite {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n let E : Type u := Submodule.map f (E.toWeierstrassCurve ⟮K⟯) -- For the moment, we just use the fact that the resulting curve has the same name as the original curve\n let E' : Type u := Submodule.map g (E.toWeierstrassCurve ⟮L⟯) -- For the moment, we just use the fact that the resulting curve has the same name as the original curve\n let f' : E →ₗ[k] E' ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "def Points.map_composite {k : Type u} {K L M : Type u} [Field k] [Field L] [Field M]\n (f : L →ₗ[K] M) (g : K →ₗ[K] L) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "def EllipticCurve.map {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n (E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯) ∘ f =\n (E.toWeierstrassCurve ⟮L⟯ →+ E.toWeierstrassCurve ⟮M⟯) ∘ g ∘ f ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "def EHom (K L : Type u) [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ → E.toWeierstrassCurve ⟮L⟯ ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "def EllipticCurve.map_points {K L : Type u} {k : Type u} [Field k] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "def EllipticCurve.map_points {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "def groupHomomorphism {k : Type u} {A B : Type u} [Field k] [AddCommGroup A] [AddCommGroup B]\n (f : A →ₗ[k] B) : E.toWeierstrassCurve ⟮A⟯ →+ E.toWeierstrassCurve ⟮B⟯ ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "def EllipticCurve.map {k : Type u} {K L M : Type u} [Field k] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ+k L) (g : L →ₗ+k M) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "def EllipticCurve.map_points {k : Type u} {E : EllipticCurve k} {K L : Type u}\n [Field k] [Algebra k K] [Algebra k L] (f : K →���[k] L) :\n E.toWeierstrassCurve K →+ E.toWeierstrassCurve L ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "def EllipticCurve.Points.map_composite {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n ( EllipticCurve.Points.map E f ) ∘ ( EllipticCurve.Points.map E g ) =\n EllipticCurve.Points.map E ( f ∘ g ) ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "def EllipticCurve.map_points {K L : Type u} {k : Type u} [Field k] [Algebra k K] [Algebra k L]\n (f : K →ₗ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "def EllipticCurve.map {K L : Type u} {k : Type u} (hk : IsField k) (f : K →ₗ[k] L) :\n ∃ g h : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯,\n ∀ x : E.toWeierstrassCurve ⟮K⟯, g x = h (f x) ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "def EllipticCurve.map {k : Type u} {E : EllipticCurve k} (f : k →ₗ[K] k) :\n E.toWeierstrassCurve.map f = E.toWeierstrassCurve.map (fun x => f (x.1)) * E.toWeierstrassCurve.map (fun x => x.2) ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "theorem EllipticCurve.map_composite {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "def EllipticCurve.map_points {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n let points_f := EllipticCurve.Points.map E f\n let points_g := EllipticCurve.Points.map E g\n points_f ∘ points_g = EllipticCurve.Points.map E (f ∘ g) ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "def EllipticCurve.Maps.map {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] M) (g : L →ₗ[K] M)\n : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def EllipticCurve.Points.map_composite {K L M : Type u} (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n EllipticCurve.Points.map K M = (EllipticCurve.Points.map K L) ∘ (EllipticCurve.Points.map L M) ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "def EllipticCurve.Points.map_composite {K L M : Type u} [Field k] [Field K] [Field L] [Field M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "def EllipticCurve.map_points {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "noncomputable def composite (f g : E.toWeierstrassCurve ⟮k⟯ → E.toWeierstrassCurve ⟮k⟯) : E.toWeierstrassCurve ⟮k⟯ → E.toWeierstrassCurve ⟮k⟯ ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "def EllipticCurve Points.map_composite {K L M : Type u} [Field k] [Field K] [Field L] [Field M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n ( EllipticCurve.Points.map E f ) ∘ ( EllipticCurve.Points.map E g ) =\n EllipticCurve.Points.map E ( f ∘ g ) ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "theorem EllipticCurve.map_composite {K L M : Type u} [Field k] [Algebra k K] [Algebra k L]\n [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n let e := EllipticCurve.Points.map E f\n let f' := EllipticCurve.Points.map E g\n e ∘ f' = EllipticCurve.Points.map E (f ∘ g) ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "def EllipticCurve.map {K L : Type u} {k : Type u} (f : E.toWeierstrassCurve ⟮K⟯ →ₗ[k] E.toWeierstrassCurve ⟮L⟯) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "def EllipticCurve.Maps.to (K L : Type u) [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "noncomputable def groupHomomorphism {k : Type u} {A B : Type u} [Field k] [AddCommGroup A] [AddCommGroup B]\n (f : A →ₗ[k] B) : (ElticCurve k A) →* (ElticCurve k B) ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "def groupHom (G : Type*) [Group G] (k : Type u) [Field k] : Type u := SubmoduleHom G k\n\ndef EllipticCurve.map (f : k →ₗ[K] k) : groupHom (E.toWeierstrassCurve ⟮k⟫) k ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "def EllipticCurve.map_points {K L : Type u} {k : Type u} [Field k] [Algebra k K] [Algebra k L]\n (f : K →ₗ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "def EllipticCurve.map {k : Type u} {K L M : Type u} [Field k] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "def EllipticCurve.map {k : Type u} {K L M : Type u} [Field k] [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n E.toWeierstrassCurve.map f ∘ E.toWeierstrassCurve.map g = E.toWeierstrassCurve.map (fun x => f x * g x) ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def compositeHomomorphisms {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "def EllipticCurve.map {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n E.toWeierstrassCurve.map (E.toWeierstrassCurve.map f g) =\n E.toWeierstrassCurve.map f ∘ E.toWeierstrassCurve.map g ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "def EllipticCurve.Points.map_composite {K L M : Type u} [Field k] [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ+k M) (g : L →ₗ+k M)\n (h : ∀ x : K, f x = g (x : L)) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def G : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ndef f_429096078 : G →+ G ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "def EllipticCurve.map {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n (E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯) ∘ (E.toWeierstrassCurve ⟮L⟯ →+ E.toWeierstrassCurve ⟮M⟯) =\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "def EllipticCurve.map_points {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] M) (g : L →ₗ[K] M) :\n let h ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "def EllipticCurve Points.map_composite {k : Type u} {K L M : Type u} [Field k] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ = E.toWeierstrassCurve ⟮L⟯ →+* E.toWeierstrassCurve ⟮L⟯ →+* E.toWeierstrassCurve ⟮M⟯ ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "noncomputable def curve_points (k : Type u) [Field k] (E : EllipticCurve k) : Type u := E.toWeierstrassCurve ⟮k⟯\n\nnoncomputable def curve_points.map (k : Type u) [Field k] (E : EllipticCurve k) (L : Type u) [Field L] (f : k →ₗ[L] L): curve_points k E → curve_points k (EllipticCurve.map f E) ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "def EllipticCurve.map_points {K L M : Type u} [Field K] [Field L] [Field M]\n [Algebra k K] [Algebra k L] [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n (E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯) ∘ f =\n (E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯) ∘ g ∘ f ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "noncomputable def groupHomomorphism {G H : Type*} [Group G] [Group H] : G ≃* H →\n G →* H ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "def E_points : Type u := Submodule.points E.toWeierstrassCurve ⟮k⟯\n\ndef E_points.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E_points →+ E_points ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "def composite (f g : E.toWeierstrassCurve →*) : E.toWeierstrassCurve →* ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "def EHom (k : Type u) {K L : Type u} [Field k] [Algebra k K] [Algebra k L] : E k →* E (k • L) ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "def EllipticCurve.map_points {k : Type u} {K L : Type u} {E : EllipticCurve k}\n (f : K →ₗ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "def EllipticCurve.Points.map_composite {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n (EPoints.map (EPoints.map f g)) =\n (EPoints.map f) ∘ (EPoints.map g) ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "def EllipticCurve.map_points {k : Type u} {K L : Type u} [Field k] [Field K] [Field L]\n [Algebra k K] [Algebra k L] (f : K →ₗ[k] L) :\n E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "theorem EllipticCurve.map_composite {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n ( EllipticCurve.Points.map E f ) ∘ ( EllipticCurve.Points.map E g ) =\n EllipticCurve.Points.map E ( f ∘ g ) ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "def EllipticCurve.map {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n (E.toWeierstrassCurve ⟮K⟯).map (E.toWeierstrassCurve ⟮L⟯) ∘\n (E.toWeierstrassCurve ⟮L⟯).map (E.toWeierstrassCurve ⟮M⟯) =\n (E.toWeierstrassCurve ⟮K⟯).map (E.toWeierstrassCurve ⟮M⟯) ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def EllipticCurve.map {k : Type u} {E : Type u} [Field k] [Field E] [Algebra k E]\n (f : E →ₗ[k] E) : E →ₗ[k] E ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "noncomputable def EHom (K L : Type u) (hK :Field K) (hL :Field L) : Type u := Submodule.MapsTo ℤ (E.toWeierstrassCurve ⟮K⟯) (E.toWeierstrassCurve ⟮L⟯)\n\ntheorem EllipticCurve.map_composite {K L M : Type u} (hK :Field K) (hL :Field L) (hM :Field M) (f : EHom K L) (g : EHom L M) : EHom K M = EHom.comp f g ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 4620,
|
| 511 |
+
"prompt_tokens": 1103,
|
| 512 |
+
"total_tokens": 5723,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_comp/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[k] L) (g : L →ₗ[k] M) :\n let E : Type u := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮M⟯ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L]\n [Algebra k M] (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n let e := EllipticCurve.Points.map E f\n let f' := EllipticCurve.Points.map E g\n e ∘ f' = EllipticCurve.Points.map E (f ∘ g) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": "theorem EllipticCurve.Points.map_comp {K L M : Type u} [Field k] [Algebra k K] [Algebra k L] [Algebra k M]\n (f : K →ₗ[K] L) (g : L →ₗ[K] M) :\n ( EllipticCurve.Points.map E f ) ∘ ( EllipticCurve.Points.map E g ) =\n EllipticCurve.Points.map E ( f ∘ g ) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": "theorem EllipticCurve.Points.map_comp {K L M : Type u} (hK :Field K) (hL :Field L) (hM :Field M) (f : EHom K L) (g : EHom L M) : EHom K M = EHom.comp f g := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/ground_truth.lean
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Kevin Buzzard. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.AlgebraicGeometry.EllipticCurve.Group
|
| 7 |
+
import Mathlib.FieldTheory.IsSepClosed
|
| 8 |
+
import Mathlib.RepresentationTheory.Basic
|
| 9 |
+
|
| 10 |
+
/-!
|
| 11 |
+
|
| 12 |
+
See
|
| 13 |
+
https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078
|
| 14 |
+
|
| 15 |
+
The main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's
|
| 16 |
+
PhD students. It would be great if anyone who is interested in working on these results
|
| 17 |
+
could talk to David first. Note that he has already made substantial progress.
|
| 18 |
+
|
| 19 |
+
-/
|
| 20 |
+
|
| 21 |
+
universe u
|
| 22 |
+
|
| 23 |
+
variable {k : Type u} [Field k] (E : EllipticCurve k)
|
| 24 |
+
|
| 25 |
+
open WeierstrassCurve WeierstrassCurve.Affine
|
| 26 |
+
|
| 27 |
+
abbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n
|
| 28 |
+
|
| 29 |
+
--variable (n : ℕ) in
|
| 30 |
+
--#synth AddCommGroup (E.n_torsion n)
|
| 31 |
+
|
| 32 |
+
def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :
|
| 33 |
+
Module (ZMod n) A :=
|
| 34 |
+
sorry
|
| 35 |
+
|
| 36 |
+
-- not sure if this instance will cause more trouble than it's worth
|
| 37 |
+
instance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard
|
| 38 |
+
|
| 39 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 40 |
+
-- Please do not work on it without talking to KB and David first.
|
| 41 |
+
theorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry
|
| 42 |
+
|
| 43 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 44 |
+
-- Please do not work on it without talking to KB and David first.
|
| 45 |
+
theorem EllipticCurve.n_torsion_card [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :
|
| 46 |
+
Nat.card (E.n_torsion n) = n^2 := sorry
|
| 47 |
+
|
| 48 |
+
set_option autoImplicit true in -- TODO: fix statement
|
| 49 |
+
theorem group_theory_lemma {A : Type*} [AddCommGroup A] {n : ℕ} (hn : 0 < n) (r : ℕ)
|
| 50 |
+
(h : ∀ d : ℕ, d ∣ n → Nat.card (Submodule.torsionBy ℤ A d) = d ^ r) :
|
| 51 |
+
∃ φ :(Submodule.torsionBy ℤ A n) ≃+ Fin d → (ZMod n), True := sorry
|
| 52 |
+
|
| 53 |
+
-- I only need this if n is prime but there's no harm thinking about it in general I guess.
|
| 54 |
+
-- It follows from the previous theorem using pure group theory (possibly including the
|
| 55 |
+
-- structure theorem for finite abelian groups)
|
| 56 |
+
theorem EllipticCurve.n_torsion_dimension [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :
|
| 57 |
+
∃ φ : E.n_torsion n ≃+ (ZMod n) × (ZMod n), True := sorry
|
| 58 |
+
|
| 59 |
+
-- This should be a straightforward but perhaps long unravelling of the definition
|
| 60 |
+
/-- The map on points for an elliptic curve over `k` induced by a morphism of `k`-algebras
|
| 61 |
+
is a group homomorphism. -/
|
| 62 |
+
def EllipticCurve.Points.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]
|
| 63 |
+
(f : K →ₐ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ := sorry
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
theorem EllipticCurve.Points.map_id (K : Type u) [Field K] [Algebra k K] :
|
| 67 |
+
EllipticCurve.Points.map E (AlgHom.id k K) = AddMonoidHom.id _ := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/input_messages_compress_0.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.AlgebraicGeometry.EllipticCurve.Group\nimport Mathlib.FieldTheory.IsSepClosed\nimport Mathlib.RepresentationTheory.Basic\n\n/-!\n\nSee\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078\n\nThe main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's\nPhD students. It would be great if anyone who is interested in working on these results\ncould talk to David first. Note that he has already made substantial progress.\n\n-/\n\nuniverse u\n\nvariable {k : Type u} [Field k] (E : EllipticCurve k)\n\nopen WeierstrassCurve WeierstrassCurve.Affine\n\nabbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\n--variable (n : ℕ) in\n--#synth AddCommGroup (E.n_torsion n)\n\ndef ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n sorry\n\n-- not sure if this instance will cause more trouble than it's worth\ninstance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\ntheorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\ntheorem EllipticCurve.n_torsion_card [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :\n Nat.card (E.n_torsion n) = n^2 := sorry\n\nset_option autoImplicit true in -- TODO: fix statement\ntheorem group_theory_lemma {A : Type*} [AddCommGroup A] {n : ℕ} (hn : 0 < n) (r : ℕ)\n (h : ∀ d : ℕ, d ∣ n → Nat.card (Submodule.torsionBy ℤ A d) = d ^ r) :\n ∃ φ :(Submodule.torsionBy ℤ A n) ≃+ Fin d → (ZMod n), True := sorry\n\n-- I only need this if n is prime but there's no harm thinking about it in general I guess.\n-- It follows from the previous theorem using pure group theory (possibly including the\n-- structure theorem for finite abelian groups)\ntheorem EllipticCurve.n_torsion_dimension [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :\n ∃ φ : E.n_torsion n ≃+ (ZMod n) × (ZMod n), True := sorry\n\n-- This should be a straightforward but perhaps long unravelling of the definition\n/-- The map on points for an elliptic curve over `k` induced by a morphism of `k`-algebras\nis a group homomorphism. -/\ndef EllipticCurve.Points.map {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₐ[k] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ := sorry\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\nThe group homomorphism $E(K)\\to E(K)$ induced by the identity map $K\\to K$ is the identity group homomorphism."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] {E : EllipticCurve k} (f : k →ₗ[K] k) :\n E.toWeierstrassCurve ≃+ E.toWeierstrassCurve := by sorry"}
|
| 3 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] (E : EllipticCurve k) :\n (E.toWeierstrassCurve k) →+* (E.toWeierstrassCurve k) = id := by sorry"}
|
| 4 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ := by sorry"}
|
| 5 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [IsSepClosed k] [Algebra k E] [Group E]\n (f : E →ₗ[E] E) (hf : f = id) :\n ∀ x : E, f x = x := by sorry"}
|
| 6 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] (E : EllipticCurve k) : E to itself ≃+ E to itself := by sorry"}
|
| 7 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [AddCommGroup E] [IsSepClosed k] :\n ∃ φ : E ≃+ E, ∀ x : E, φ x = x := by sorry"}
|
| 8 |
+
{"prediction": "theorem EllipticCurve.Points.map_id : ∀ (K : Type u) [Field K] [Algebra k K], E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ := by sorry"}
|
| 9 |
+
{"prediction": "theorem EllipticCurve.Points.map_id (K : Type u) [Field K] (f : K →ₗ[K] K) (hf : f = id) :\n ( EllipticCurve.Points.map f ) = id := by sorry"}
|
| 10 |
+
{"prediction": "theorem EllipticCurve.Points.map_id : ∀ (k : Type u) [Field k] (E : EllipticCurve k), (E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯) = Submodule.id := by sorry"}
|
| 11 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] {E : EllipticCurve k} : E.toWeierstrassCurve ≃+ E.toWeierstrassCurve := by sorry"}
|
| 12 |
+
{"prediction": "theorem EllipticCurve.Points.map_id : E.toWeierstrassCurve ⟮k⟯ ≃+ E.toWeierstrassCurve ⟮k⟯ := by sorry"}
|
| 13 |
+
{"prediction": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [EllipticCurve k E] :\n E ≃+ E := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-73df3205f5964183a10981d6c814eceb",
|
| 3 |
+
"created": 1749028659,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def EllipticCurve.id_points {k : Type u} [Field k] : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "theorem group_theory_348765 {k : Type u} [Field k] {E : EllipticCurve k} (f : k →ₗ[K] k) :\n E.toWeierstrassCurve ≃+ E.toWeierstrassCurve ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "stop",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "theorem my_favorite_theorem {k : Type u} [Field k] (E : EllipticCurve k) :\n (E.toWeierstrassCurve k) →+* (E.toWeierstrassCurve k) = id ",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "def EllipticCurve.identity_pointsmap {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "theorem my_favorite_theorem {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "def EllipticCurve_points (E : EllipticCurve k) : Type u := {P : E.toWeierstrassCurve | P.toAFine = 1}\n\ndef EllipticCurve_points.map (E : EllipticCurve k) : EllipticCurve_points E →+ EllipticCurve_points E ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "noncomputable def idHom (E : Type u) [Equiv.Perm E] : E ≃* E ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "def E_points : E (ZMod n) ≃+ E (ZMod n) ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "def EllipticCurve.identity_hom (E : Type u) [EllipticCurve E] : E →ₗ[E] E ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "def EllipticCurve.pointsMapUsing [IsSepClosed k] {K L : Type u} [Field K] [Field L] [Algebra k K] [Algebra k L]\n (f : K →ₗ[K] L) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "theorem my_favorite_theorem {E : Type u} [Field k] [IsSepClosed k] [Algebra k E] [Group E]\n (f : E →ₗ[E] E) (hf : f = id) :\n ∀ x : E, f x = x ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "def EllipticCurve.idHom {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "def EPOINTS_MAP : E.toWeierstrassCurve k → E.toWeierstrassCurve k ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def E_points (K : Type u) : Type u := Submodule.map (EllipticCurve.Points.map K K) E.toWeierstrassCurve\n\nnoncomputable def E_points_identity (K : Type u) : E_points K ≃+ E_points K ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "noncomputable def Endpoints.map (f : E k →+ E k) : E k →+ E k ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "noncomputable def E_points : Type u := Submodule.points E.toWeierstrassCurve ⟮k⟯\n\nnoncomputable def E_points.map (f : k →ₗ[K] k) : E_points →+ E_points := Submodule.map E.toWeierstrassCurve ⟮k⟯ f",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "def EllipticCurve.Points.id {k : Type u} [Field k] : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "def EllipticCurve.Points.id[K][L] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮L⟯ ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "def EllipticCurve_points (@E_points k E) : Type u := Submodule.points E\n\ndef EllipticCurve_points.map {K : Type u} [Field k] [Algebra k K] (f : k →ₗ[K] K) : E_points k E →+ E_points K E ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "theorem my_favorite_theorem {k : Type u} [Field k] (E : EllipticCurve k) : E to itself ≃+ E to itself ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "def EllipticCurve.morphisms {k : Type u} [Field k] : (E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯) ↔\n (E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯) ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "theorem group_theory_94727 {E : Type u} [Field k] [AddCommGroup E] [IsSepClosed k] :\n ∃ φ : E ≃+ E, ∀ x : E, φ x = x ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "def EllipticCurve.id_points {k : Type u} {E : EllipticCurve k} : E →+ E ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "def EllipticCurve Points.map_to自身 {k : Type u} [Field k] [Algebra k k] (f : k →ₗ[K] k) :\n E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable def Endpoints.mk {k : Type u} [Field k] (E : EllipticCurve k) : Set (E.toWeierstrassCurve AffineSpace ℝ) ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "def EllipticCurve.id_points (E : EllipticCurve k) : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "theorem my_favorite_theorem : ∀ (K : Type u) [Field K] [Algebra k K], E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "def EllipticCurve.idHom {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "def idHom (E : Type u) [EllipticCurve E] : E →ₗ[E] E ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "def EllipticCurve.idHom {k : Type u} {E : EllipticCurve k} : E →ₗ[E] E ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "noncomputable def Points.map [IsSepClosed k] (f : k → k) : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "def EllipticCurve.identity : E.toWeierstrassCurve →+* E.toWeierstrassCurve ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "theorem my_favorite_theorem (K : Type u) [Field K] (f : K →ₗ[K] K) (hf : f = id) :\n ( EllipticCurve.Points.map f ) = id ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "noncomputable def idHom : E.toWeierstrassCurve k →+ E.toWeierstrassCurve k ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "theorem my_favorite_theorem : ∀ (k : Type u) [Field k] (E : EllipticCurve k), (E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯) = Submodule.id ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "def E_points : E ≃* E ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "theorem my_favorite_theorem {k : Type u} [Field k] {E : EllipticCurve k} : E.toWeierstrassCurve ≃+ E.toWeierstrassCurve ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "def E_points : E toWeierstrassCurve ≃+ E toWeierstrassCurve ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "noncomputable def groupHomomorphism (G : Type u) [Group G] (f : G �� G) : G → G ≃* G ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "def E_points : E toWeierstrassCurve →+ E toWeierstrassCurve ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "def EllipticCurve.id_points {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "def EllipticCurve.Points.idmap {k : Type u} [Field k] : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "def E_points : E →+* E ",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "noncomputable def Endpoints.map {k : Type u} (f : k →ₗ[K] k) : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "theorem my_favorite_theorem : E.toWeierstrassCurve ⟮k⟯ ≃+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "def EllipticCurve.Points.map.Identity {K : Type u} [Field K] (f : K →ₗ[K] K) : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "theorem my_favorite_theorem {E : Type u} [Field k] [EllipticCurve k E] :\n E ≃+ E ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "def EllipticCurve.Points.identity {k : Type u} {E : EllipticCurve k} : E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯ ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def ellipticCurve_points_identityHom {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "def EllipticCurve.morphism {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 2205,
|
| 511 |
+
"prompt_tokens": 997,
|
| 512 |
+
"total_tokens": 3202,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.Points.map_id/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] {E : EllipticCurve k} (f : k →ₗ[K] k) :\n E.toWeierstrassCurve ≃+ E.toWeierstrassCurve := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] (E : EllipticCurve k) :\n (E.toWeierstrassCurve k) →+* (E.toWeierstrassCurve k) = id := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {K : Type u} [Field K] : E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [IsSepClosed k] [Algebra k E] [Group E]\n (f : E →ₗ[E] E) (hf : f = id) :\n ∀ x : E, f x = x := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] (E : EllipticCurve k) : E to itself ≃+ E to itself := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [AddCommGroup E] [IsSepClosed k] :\n ∃ φ : E ≃+ E, ∀ x : E, φ x = x := by sorry", "well_typed": true, "beq_result": {"beql_unidirections": [null, null], "beq_plus_unidirections": [null, null]}, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id : ∀ (K : Type u) [Field K] [Algebra k K], E.toWeierstrassCurve ⟮K⟯ →+ E.toWeierstrassCurve ⟮K⟯ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id (K : Type u) [Field K] (f : K →ₗ[K] K) (hf : f = id) :\n ( EllipticCurve.Points.map f ) = id := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id : ∀ (k : Type u) [Field k] (E : EllipticCurve k), (E.toWeierstrassCurve ⟮k⟯ →+ E.toWeierstrassCurve ⟮k⟯) = Submodule.id := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {k : Type u} [Field k] {E : EllipticCurve k} : E.toWeierstrassCurve ≃+ E.toWeierstrassCurve := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id : E.toWeierstrassCurve ⟮k⟯ ≃+ E.toWeierstrassCurve ⟮k⟯ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": "theorem EllipticCurve.Points.map_id {E : Type u} [Field k] [EllipticCurve k E] :\n E ≃+ E := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/ground_truth.lean
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/-
|
| 2 |
+
Copyright (c) 2024 Kevin Buzzard. All rights reserved.
|
| 3 |
+
Released under Apache 2.0 license as described in the file LICENSE.
|
| 4 |
+
Authors: Kevin Buzzard
|
| 5 |
+
-/
|
| 6 |
+
import Mathlib.AlgebraicGeometry.EllipticCurve.Group
|
| 7 |
+
import Mathlib.FieldTheory.IsSepClosed
|
| 8 |
+
import Mathlib.RepresentationTheory.Basic
|
| 9 |
+
|
| 10 |
+
/-!
|
| 11 |
+
|
| 12 |
+
See
|
| 13 |
+
https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078
|
| 14 |
+
|
| 15 |
+
The main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's
|
| 16 |
+
PhD students. It would be great if anyone who is interested in working on these results
|
| 17 |
+
could talk to David first. Note that he has already made substantial progress.
|
| 18 |
+
|
| 19 |
+
-/
|
| 20 |
+
|
| 21 |
+
universe u
|
| 22 |
+
|
| 23 |
+
variable {k : Type u} [Field k] (E : EllipticCurve k)
|
| 24 |
+
|
| 25 |
+
open WeierstrassCurve WeierstrassCurve.Affine
|
| 26 |
+
|
| 27 |
+
abbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n
|
| 28 |
+
|
| 29 |
+
--variable (n : ℕ) in
|
| 30 |
+
--#synth AddCommGroup (E.n_torsion n)
|
| 31 |
+
|
| 32 |
+
def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :
|
| 33 |
+
Module (ZMod n) A :=
|
| 34 |
+
sorry
|
| 35 |
+
|
| 36 |
+
-- not sure if this instance will cause more trouble than it's worth
|
| 37 |
+
instance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard
|
| 38 |
+
|
| 39 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 40 |
+
-- Please do not work on it without talking to KB and David first.
|
| 41 |
+
theorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry
|
| 42 |
+
|
| 43 |
+
-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.
|
| 44 |
+
-- Please do not work on it without talking to KB and David first.
|
| 45 |
+
|
| 46 |
+
theorem EllipticCurve.n_torsion_card [IsSepClosed k] {n : ℕ} (hn : (n : k) ≠ 0) :
|
| 47 |
+
Nat.card (E.n_torsion n) = n^2 := by sorry
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/input_messages_compress_0.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"role": "system",
|
| 4 |
+
"content": "You are an expert in mathematics and Lean 4."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"role": "user",
|
| 8 |
+
"content": "Please autoformalize the following problem in Lean 4 with a header. Here is some context for the problem:\n\nimport Mathlib.AlgebraicGeometry.EllipticCurve.Group\nimport Mathlib.FieldTheory.IsSepClosed\nimport Mathlib.RepresentationTheory.Basic\n\n/-!\n\nSee\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/n-torsion.20or.20multiplication.20by.20n.20as.20an.20additive.20group.20hom/near/429096078\n\nThe main theorems in this file are part of the PhD thesis work of David Angdinata, one of KB's\nPhD students. It would be great if anyone who is interested in working on these results\ncould talk to David first. Note that he has already made substantial progress.\n\n-/\n\nuniverse u\n\nvariable {k : Type u} [Field k] (E : EllipticCurve k)\n\nopen WeierstrassCurve WeierstrassCurve.Affine\n\nabbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\n--variable (n : ℕ) in\n--#synth AddCommGroup (E.n_torsion n)\n\ndef ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n sorry\n\n-- not sure if this instance will cause more trouble than it's worth\ninstance (n : ℕ) : Module (ZMod n) (E.n_torsion n) := sorry -- shouldn't be too hard\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\ntheorem EllipticCurve.n_torsion_finite {n : ℕ} (hn : 0 < n) : Finite (E.n_torsion n) := sorry\n\n-- This theorem needs e.g. a theory of division polynomials. It's ongoing work of David Angdinata.\n-- Please do not work on it without talking to KB and David first.\n\nNow formalize the problem. Use the following theorem names: my_favorite_theorem.\n\n\n\\notready Let $n$ be a positive integer, let $F$ be a separably closed field with $n$ nonzero in $F$, and let $E$ be an elliptic curve over $F$. Then the $n$-torsion $E(K)[n]$ in the $F$-points of $E$ is a finite group of size $n^2$."
|
| 9 |
+
}
|
| 10 |
+
]
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/postprocessed_dedup_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"prediction": null}
|
| 2 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (n_torsion E n) ∧ (n_torsion E n).ncard = n ^ 2 := by sorry"}
|
| 3 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype Fˣ) (E : Ecurve F) : Fintype (E.points F)ˣ := by sorry"}
|
| 4 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) : Prop := by sorry"}
|
| 5 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] [SepClosed k] (E : Type*) [Field E] [EllipticCurve E] [IsSepClosed E k] (n : ℕ) (hn : 0 < n) :\n Finite (curve_torsor E k n) ∧ curve_torsor E k n.encard = n ^ 2 := by sorry"}
|
| 6 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] (n : ℕ) (hn : 0 < n) (hF : IsSepClosed F) (hF1 : Fintype F)\n (hF2 : Nonempty F) (E : EllipticCurve F) :\n curve_n_torsion_finite F n ∧ curve_n_torsion_add_group F n = (ZMod n)ˣ := by sorry"}
|
| 7 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : n > 0)\n (E : Affine WeierstrassCurve F) (hE : E.toWeierstrassCurve.natDegree = 2) :\n ∃ g : Fintype (E.points ⧸ span ({1} : Set (E.points))), (E.points ⧸ span ({1} : Set (E.points))) = g ∧\n Fintype.card (E.points ⧸ span ({1} : Set (E.points))) = n ^ 2 := by sorry"}
|
| 8 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n IsSepClosed k → (E.n_torsion n).Finite ∧ (E.n_torsion n).ncard = n ^ 2 := by sorry"}
|
| 9 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F]\n (hF : Fintype F) (hF1 : Fintype.card F = n) (E : Affine E) :\n (E.points.filter (fun x => x ^ n = 1)).Finite ∧\n Fintype ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) ∧\n Fintype.card ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) = n ^ 2 := by sorry"}
|
| 10 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card {F : Type} [Field F] [IsSepClosed F] (hF : Nonempty Fˣ) (E : EllipticCurve F) (n : ℕ) (hn : 0 < n) :\n Nonempty (E.points ⧸ span ({0} : Set (E.points)))ˣ ∧\n (E.points ⧸ span ({0} : Set (E.points)))ˣ.ncard = n ^ 2 := by sorry"}
|
| 11 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ)\n (hn : 0 < n)\n (F : Type*) [Field F]\n (hF : IsSepClosed F)\n (hF1 : Nonempty (Fˣ))\n (E : AffineCurse F)\n (hE : E.Nonempty)\n : Finite (E.points.filter (fun x => x ^ n = 1)) ∧ (E.points.filter (fun x => x ^ n = 1)).ncard = n ^ 2 := by sorry"}
|
| 12 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : Fintype F) (E : Type*) [EllipticCurve F E]\n (hE : IsCyclic Eˣ) :\n Nonempty (E n_torsion) ∧ Fintype (E n_torsion) ∧\n (E n_torsion).ncard = n ^ 2 := by sorry"}
|
| 13 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : SeparablyClosed k) [Field F] (hF : Fintype F) (hF1 : card F = n) :\n Fintype (E.toWeierstrassCurve F 0) ∧ @card (E.toWeierstrassCurve F 0) = n ^ 2 := by sorry"}
|
| 14 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [SeparableClosed F] (hF : n ≠ 0) (E : Type*) [EllipticCurve E] :\n Finite (curve_points (E.n_torsion n)) ∧ curve_points (E.n_torsion n).ncard = n ^ 2 := by sorry"}
|
| 15 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) (E : EllipticCurve F) :\n Finite (E.toWeierstrassCurve n_torsion) ∧ E.toWeierstrassCurve n_torsion.ncard = n ^ 2 := by sorry"}
|
| 16 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F) (hF1 : Fintype.card F = n) : Finite (E.n_torsion n) ∧ (E.n_torsion n).card = n ^ 2 := by sorry"}
|
| 17 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k)\n (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F)\n (hF1 : Fintype.card F = n) :\n let G := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n [inst : NeZero k] [inst : Fintype G] [inst : Group G] [inst : AddCommGroup G] [inst : Module k G]\n G.fintype.card = n ^ 2 := by sorry"}
|
| 18 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] [IsSepClosed k]\n (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) :\n ∃ F : Fintype (E.n_torsion n), F.card = n ^ 2 ∧\n (E.n_torsion n : Type*)[AddCommGroup (E.n_torsion n)] = AddCommGroup.mk\n (E.n_torsion n : Type*)[Module (ZMod n) (E.n_torsion n)] = Module.mk\n (E.n_torsion n : Type*)[Fintype (E.n_torsion n)] = Fintype.mk := by sorry"}
|
| 19 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (E : WeierstrassCurve k) : Finite (curve_n_torsion E n) := by sorry"}
|
| 20 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (h : IsSepClosed k) :\n IsAddCommGroup (E.n_torsion n) ∧ Finite (E.n_torsion n) ∧ (E.n_torsion n).ncard = n ^ 2 := by sorry"}
|
| 21 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (k : Type) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) (hE1 : ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1) : Finite (curve_n_torsion n E) ∧ (curve_n_torsion n E).ncard = n ^ 2 := by sorry"}
|
| 22 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : n ≠ 0) (E : ECurve F) :\n Finite (EPoints F)[n]! ∧\n (EPoints F)[n]!.ncard = n ^ 2 := by sorry"}
|
| 23 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Nonempty (Fˣ)) (E : EllipticCurve F) :\n Nonempty (E.toWeierstrassCurve Fˣ) ∧ Fintype (E.toWeierstrassCurve Fˣ) ∧ Fintype.card (E.toWeierstrassCurve Fˣ) = n ^ 2 := by sorry"}
|
| 24 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (k : Type*) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) : IsGroup (E.toWeierstrassCurve ⟮k⟯)ˣ ∧ ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1 := by sorry"}
|
| 25 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) :\n Nonempty (E n_torsion) ∧\n ∃ fin : Fintype (E n_torsion), fin.card = n ^ 2 := by sorry"}
|
| 26 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card {n : ℕ} (hn : 0 < n) (k : Type*) [Field k] (hk : IsSepClosed k)\n (hk1 : Nonempty k) (E : EllipticCurve k) :\n Finite (E.toWeierstrassCurve k) ∧ card (E.toWeierstrassCurve k) = n^2 := by sorry"}
|
| 27 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (curve_n_torsion E n) ∧ curve_n_torsion E n =+* curve_n_torsion E n := by sorry"}
|
| 28 |
+
{"prediction": "theorem EllipticCurve.n_torsion_card (k : Type*) [Field k] (E : ECurve k) (n : ℕ) (hn : n ≠ 0)\n (hSepClosed : IsSepClosed k) : Nonempty (E.points k ⧸ span ({0} : Set k)) ∧\n (E.points k ⧸ span ({0} : Set k)).Finite ∧\n (E.points k ⧸ span ({0} : Set k)).ncard = n ^ 2 := by sorry"}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/raw_completion.json
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "chatcmpl-bad6d119847441c5bb58f8b0b59b8ff0",
|
| 3 |
+
"created": 1749028693,
|
| 4 |
+
"model": "hosted_vllm/sorgfresser/kiminaembedbeta",
|
| 5 |
+
"object": "chat.completion",
|
| 6 |
+
"system_fingerprint": null,
|
| 7 |
+
"choices": [
|
| 8 |
+
{
|
| 9 |
+
"finish_reason": "stop",
|
| 10 |
+
"index": 0,
|
| 11 |
+
"message": {
|
| 12 |
+
"content": "def SeparablyClosedField (F : Type*) [Field F] : Prop :=\n let rcases := Fintype F\n let cardF := rcases.toNat.card\n cardF ≠ 0 ∧ ∀ x : F, x ≠ 0 → x ^ cardF = 1\n\ndef ellipticCurveModule (E : Type*) [Field k] [ EllipticCurve k] (n : ℕ) : Module (ZMod n) E :=\n",
|
| 13 |
+
"role": "assistant",
|
| 14 |
+
"tool_calls": null,
|
| 15 |
+
"function_call": null
|
| 16 |
+
}
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"finish_reason": "stop",
|
| 20 |
+
"index": 1,
|
| 21 |
+
"message": {
|
| 22 |
+
"content": "noncomputable def n_torsion (E : EllipticCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ntheorem EllipticCurve.n_torsion_finite (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (n_torsion E n) ∧ (n_torsion E n).ncard = n ^ 2 ",
|
| 23 |
+
"role": "assistant",
|
| 24 |
+
"tool_calls": null,
|
| 25 |
+
"function_call": null
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"finish_reason": "length",
|
| 30 |
+
"index": 2,
|
| 31 |
+
"message": {
|
| 32 |
+
"content": "noncomputable def SeparatelyClosed (F : Type u) (hF : IsSepClosed F) : Type u := Submodulesep.Fintype F\n\nnoncomputable def EllipticCurve.fintype (E : EllipticCurve k) : Type u := E.toWeierstrassCurve.Fintype\n\nnoncomputable def AddCommGroup.fintype {A : Type u} [AddCommGroup A] : Type u := Submodulesep.Fintype A\n\nnoncomputable def Module.fintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype F A\n\nnoncomputable def Finite.fintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype F A\n\nnoncomputable def card (F : Type u) {A : Type u} [AddCommGroup A] [Field F] : ℕ := Submodulesep.card F A\n\nnoncomputable def card.fintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype.card F A\n\nnoncomputable def Countable.fintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype.Countable F A\n\nnoncomputable def Fintype.fintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype.Fintype F A\n\nnoncomputable def clearFintype {F : Type u} {A : Type u} [AddCommGroup A] [Field F] : Type u := Submodulesep.Fintype.clearFintype F A\n\nnoncomputable def card.fintype (E : EllipticCurve k) : Type u := Submodulesep.Fintype.card (E.toWeierstrassCurve ⟮k⟯)\n\nnoncomputable def Countable.fintype (E : EllipticCurve k) : Type u := Submodulesep.Fintype.Countable (E.toWeierstrassCurve ⟮k⟯)\n\nnoncomputable def Finite.fintype (E : EllipticCurve",
|
| 33 |
+
"role": "assistant",
|
| 34 |
+
"tool_calls": null,
|
| 35 |
+
"function_call": null
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"finish_reason": "stop",
|
| 40 |
+
"index": 3,
|
| 41 |
+
"message": {
|
| 42 |
+
"content": "theorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype Fˣ) (E : Ecurve F) : Fintype (E.points F)ˣ ",
|
| 43 |
+
"role": "assistant",
|
| 44 |
+
"tool_calls": null,
|
| 45 |
+
"function_call": null
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"finish_reason": "stop",
|
| 50 |
+
"index": 4,
|
| 51 |
+
"message": {
|
| 52 |
+
"content": "noncomputable def AddCommGroupHom (A B : Type*) [AddCommGroup A] [AddCommGroup B] : Type u := Submodule.mapHom ℤ A B\n\ndef SeparablyClosedField (F : Type*) [Field F] : Prop := Submodule.Separable ℤ F ∧ Submodule.Closed F\n\ndef EllipticCurve.finite_n_torsion (E : EllipticCurve k) (n : ℕ) : Prop := Finite (E.n_torsion n)\n\ndef EllipticCurve.card_n_torsion (E : EllipticCurve k) (n : ℕ) : ℕ := Nat.card (E.n_torsion n)\n\ntheorem EllipticCurve.finite_n_torsion_iff (E : EllipticCurve k) (n : ℕ) : Prop ",
|
| 53 |
+
"role": "assistant",
|
| 54 |
+
"tool_calls": null,
|
| 55 |
+
"function_call": null
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"finish_reason": "stop",
|
| 60 |
+
"index": 5,
|
| 61 |
+
"message": {
|
| 62 |
+
"content": "noncomputable def curve_torsor (E : Type*) [Field E] [EllipticCurve E] (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮E⟩) n\n\ntheorem EllipticCurve.torsor_finite {k : Type u} [Field k] [SepClosed k] (E : Type*) [Field E] [EllipticCurve E] [IsSepClosed E k] (n : ℕ) (hn : 0 < n) :\n Finite (curve_torsor E k n) ∧ curve_torsor E k n.encard = n ^ 2 ",
|
| 63 |
+
"role": "assistant",
|
| 64 |
+
"tool_calls": null,
|
| 65 |
+
"function_call": null
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"finish_reason": "stop",
|
| 70 |
+
"index": 6,
|
| 71 |
+
"message": {
|
| 72 |
+
"content": "def SeparablyClosedField.n_zero (F : Type u) [Field F] (n : ℕ) : Prop := ",
|
| 73 |
+
"role": "assistant",
|
| 74 |
+
"tool_calls": null,
|
| 75 |
+
"function_call": null
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"finish_reason": "stop",
|
| 80 |
+
"index": 7,
|
| 81 |
+
"message": {
|
| 82 |
+
"content": "noncomputable def E_n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\nnoncomputable def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n ",
|
| 83 |
+
"role": "assistant",
|
| 84 |
+
"tool_calls": null,
|
| 85 |
+
"function_call": null
|
| 86 |
+
}
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"finish_reason": "stop",
|
| 90 |
+
"index": 8,
|
| 91 |
+
"message": {
|
| 92 |
+
"content": "noncomputable def curve_n_torsion (F : Type*) [Field F] (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮F⟯) n\n\nnoncomputable def curve_n_torsion_add_group (F : Type*) [Field F] (n : ℕ) : AddCommGroup (curve_n_torsion F n) := Submodule.addCommGroupOfTorsor _curve_n_torsion F n\n\nnoncomputable def curve_n_torsion_finite (F : Type*) [Field F] (n : ℕ) : Finite (curve_n_torsion F n) := Submodule.finiteTorsor _curve_n_torsion F n\n\ntheorem my_favorite_theorem\n (F : Type*) [Field F] (n : ℕ) (hn : 0 < n) (hF : IsSepClosed F) (hF1 : Fintype F)\n (hF2 : Nonempty F) (E : EllipticCurve F) :\n curve_n_torsion_finite F n ∧ curve_n_torsion_add_group F n = (ZMod n)ˣ ",
|
| 93 |
+
"role": "assistant",
|
| 94 |
+
"tool_calls": null,
|
| 95 |
+
"function_call": null
|
| 96 |
+
}
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"finish_reason": "stop",
|
| 100 |
+
"index": 9,
|
| 101 |
+
"message": {
|
| 102 |
+
"content": "theorem my_favorite_theorem (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : n > 0)\n (E : Affine WeierstrassCurve F) (hE : E.toWeierstrassCurve.natDegree = 2) :\n ∃ g : Fintype (E.points ⧸ span ({1} : Set (E.points))), (E.points ⧸ span ({1} : Set (E.points))) = g ∧\n Fintype.card (E.points ⧸ span ({1} : Set (E.points))) = n ^ 2 ",
|
| 103 |
+
"role": "assistant",
|
| 104 |
+
"tool_calls": null,
|
| 105 |
+
"function_call": null
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"finish_reason": "stop",
|
| 110 |
+
"index": 10,
|
| 111 |
+
"message": {
|
| 112 |
+
"content": "theorem my_favorite_theorem (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n IsSepClosed k → (E.n_torsion n).Finite ∧ (E.n_torsion n).ncard = n ^ 2 ",
|
| 113 |
+
"role": "assistant",
|
| 114 |
+
"tool_calls": null,
|
| 115 |
+
"function_call": null
|
| 116 |
+
}
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"finish_reason": "stop",
|
| 120 |
+
"index": 11,
|
| 121 |
+
"message": {
|
| 122 |
+
"content": "theorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F]\n (hF : Fintype F) (hF1 : Fintype.card F = n) (E : Affine E) :\n (E.points.filter (fun x => x ^ n = 1)).Finite ∧\n Fintype ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) ∧\n Fintype.card ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) = n ^ 2 ",
|
| 123 |
+
"role": "assistant",
|
| 124 |
+
"tool_calls": null,
|
| 125 |
+
"function_call": null
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"finish_reason": "stop",
|
| 130 |
+
"index": 12,
|
| 131 |
+
"message": {
|
| 132 |
+
"content": "theorem my_favorite_theorem {F : Type} [Field F] [IsSepClosed F] (hF : Nonempty Fˣ) (E : EllipticCurve F) (n : ℕ) (hn : 0 < n) :\n Nonempty (E.points ⧸ span ({0} : Set (E.points)))ˣ ∧\n (E.points ⧸ span ({0} : Set (E.points)))ˣ.ncard = n ^ 2 ",
|
| 133 |
+
"role": "assistant",
|
| 134 |
+
"tool_calls": null,
|
| 135 |
+
"function_call": null
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"finish_reason": "stop",
|
| 140 |
+
"index": 13,
|
| 141 |
+
"message": {
|
| 142 |
+
"content": "noncomputable def separator (k : Type u) (F : Type u) [Field F] [SeparablyClosed F] (n : ℕ) : Prop ",
|
| 143 |
+
"role": "assistant",
|
| 144 |
+
"tool_calls": null,
|
| 145 |
+
"function_call": null
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
{
|
| 149 |
+
"finish_reason": "stop",
|
| 150 |
+
"index": 14,
|
| 151 |
+
"message": {
|
| 152 |
+
"content": "def SeparablyClosedField (F : Type*) [Field F] : Prop := ",
|
| 153 |
+
"role": "assistant",
|
| 154 |
+
"tool_calls": null,
|
| 155 |
+
"function_call": null
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"finish_reason": "stop",
|
| 160 |
+
"index": 15,
|
| 161 |
+
"message": {
|
| 162 |
+
"content": "theorem my_favorite_theorem\n (n : ℕ)\n (hn : 0 < n)\n (F : Type*) [Field F]\n (hF : IsSepClosed F)\n (hF1 : Nonempty (Fˣ))\n (E : AffineCurse F)\n (hE : E.Nonempty)\n : Finite (E.points.filter (fun x => x ^ n = 1)) ∧ (E.points.filter (fun x => x ^ n = 1)).ncard = n ^ 2 ",
|
| 163 |
+
"role": "assistant",
|
| 164 |
+
"tool_calls": null,
|
| 165 |
+
"function_call": null
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"finish_reason": "stop",
|
| 170 |
+
"index": 16,
|
| 171 |
+
"message": {
|
| 172 |
+
"content": "def SeparablyClosed (F : Type*) [Field F] : Prop ",
|
| 173 |
+
"role": "assistant",
|
| 174 |
+
"tool_calls": null,
|
| 175 |
+
"function_call": null
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"finish_reason": "stop",
|
| 180 |
+
"index": 17,
|
| 181 |
+
"message": {
|
| 182 |
+
"content": "theorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : Fintype F) (E : Type*) [EllipticCurve F E]\n (hE : IsCyclic Eˣ) :\n Nonempty (E n_torsion) ∧ Fintype (E n_torsion) ∧\n (E n_torsion).ncard = n ^ 2 ",
|
| 183 |
+
"role": "assistant",
|
| 184 |
+
"tool_calls": null,
|
| 185 |
+
"function_call": null
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"finish_reason": "stop",
|
| 190 |
+
"index": 18,
|
| 191 |
+
"message": {
|
| 192 |
+
"content": "open Fintype Set Real Ideal Polynomial\nopen scoped BigOperators\n\ntheorem my_favorite_theorem {k : Type u} [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : SeparablyClosed k) [Field F] (hF : Fintype F) (hF1 : card F = n) :\n Fintype (E.toWeierstrassCurve F 0) ∧ @card (E.toWeierstrassCurve F 0) = n ^ 2 ",
|
| 193 |
+
"role": "assistant",
|
| 194 |
+
"tool_calls": null,
|
| 195 |
+
"function_call": null
|
| 196 |
+
}
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"finish_reason": "stop",
|
| 200 |
+
"index": 19,
|
| 201 |
+
"message": {
|
| 202 |
+
"content": "def SeparableClosed (F : Type*) [Field F] : Prop :=\n ∀ x : F, x ≠ 0 → IsUnit x\n\ndef curve_points (E : Type*) [EllipticCurve E] : Set E := {P : E | P.toWeierstrassCurve.X ≠ 0}\n\ntheorem EllipticCurve.finite_n_torsion (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [SeparableClosed F] (hF : n ≠ 0) (E : Type*) [EllipticCurve E] :\n Finite (curve_points (E.n_torsion n)) ∧ curve_points (E.n_torsion n).ncard = n ^ 2 ",
|
| 203 |
+
"role": "assistant",
|
| 204 |
+
"tool_calls": null,
|
| 205 |
+
"function_call": null
|
| 206 |
+
}
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"finish_reason": "stop",
|
| 210 |
+
"index": 20,
|
| 211 |
+
"message": {
|
| 212 |
+
"content": "theorem my_favorite_theorem (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) (E : EllipticCurve F) :\n Finite (E.toWeierstrassCurve n_torsion) ∧ E.toWeierstrassCurve n_torsion.ncard = n ^ 2 ",
|
| 213 |
+
"role": "assistant",
|
| 214 |
+
"tool_calls": null,
|
| 215 |
+
"function_call": null
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"finish_reason": "stop",
|
| 220 |
+
"index": 21,
|
| 221 |
+
"message": {
|
| 222 |
+
"content": "theorem my_favorite_theorem (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F) (hF1 : Fintype.card F = n) : Finite (E.n_torsion n) ∧ (E.n_torsion n).card = n ^ 2 ",
|
| 223 |
+
"role": "assistant",
|
| 224 |
+
"tool_calls": null,
|
| 225 |
+
"function_call": null
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"finish_reason": "stop",
|
| 230 |
+
"index": 22,
|
| 231 |
+
"message": {
|
| 232 |
+
"content": "def SeparablyClosed (F : Type*) [Field F] : Prop :=\n ",
|
| 233 |
+
"role": "assistant",
|
| 234 |
+
"tool_calls": null,
|
| 235 |
+
"function_call": null
|
| 236 |
+
}
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"finish_reason": "stop",
|
| 240 |
+
"index": 23,
|
| 241 |
+
"message": {
|
| 242 |
+
"content": "theorem my_favorite_theorem (k : Type u) [Field k] (E : EllipticCurve k)\n (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F)\n (hF1 : Fintype.card F = n) :\n let G := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n [inst : NeZero k] [inst : Fintype G] [inst : Group G] [inst : AddCommGroup G] [inst : Module k G]\n G.fintype.card = n ^ 2 ",
|
| 243 |
+
"role": "assistant",
|
| 244 |
+
"tool_calls": null,
|
| 245 |
+
"function_call": null
|
| 246 |
+
}
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"finish_reason": "stop",
|
| 250 |
+
"index": 24,
|
| 251 |
+
"message": {
|
| 252 |
+
"content": "noncomputable def n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\nnoncomputable def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) : Module (ZMod n) A ",
|
| 253 |
+
"role": "assistant",
|
| 254 |
+
"tool_calls": null,
|
| 255 |
+
"function_call": null
|
| 256 |
+
}
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"finish_reason": "stop",
|
| 260 |
+
"index": 25,
|
| 261 |
+
"message": {
|
| 262 |
+
"content": "noncomputable def E_n_torsion (E : EllipticCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\nnoncomputable def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n ",
|
| 263 |
+
"role": "assistant",
|
| 264 |
+
"tool_calls": null,
|
| 265 |
+
"function_call": null
|
| 266 |
+
}
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"finish_reason": "stop",
|
| 270 |
+
"index": 26,
|
| 271 |
+
"message": {
|
| 272 |
+
"content": "def SeparatelyClosedField (F : Type u) : Prop := ",
|
| 273 |
+
"role": "assistant",
|
| 274 |
+
"tool_calls": null,
|
| 275 |
+
"function_call": null
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
{
|
| 279 |
+
"finish_reason": "stop",
|
| 280 |
+
"index": 27,
|
| 281 |
+
"message": {
|
| 282 |
+
"content": "open Fintype Set Real Ideal Polynomial\nopen scoped BigOperators\n\ntheorem my_favorite_theorem {k : Type u} [Field k] [IsSepClosed k]\n (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) :\n ∃ F : Fintype (E.n_torsion n), F.card = n ^ 2 ∧\n (E.n_torsion n : Type*)[AddCommGroup (E.n_torsion n)] = AddCommGroup.mk\n (E.n_torsion n : Type*)[Module (ZMod n) (E.n_torsion n)] = Module.mk\n (E.n_torsion n : Type*)[Fintype (E.n_torsion n)] = Fintype.mk ",
|
| 283 |
+
"role": "assistant",
|
| 284 |
+
"tool_calls": null,
|
| 285 |
+
"function_call": null
|
| 286 |
+
}
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"finish_reason": "stop",
|
| 290 |
+
"index": 28,
|
| 291 |
+
"message": {
|
| 292 |
+
"content": "noncomputable def SeparatelyClosed (F : Type) [Field F] : Prop := ",
|
| 293 |
+
"role": "assistant",
|
| 294 |
+
"tool_calls": null,
|
| 295 |
+
"function_call": null
|
| 296 |
+
}
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"finish_reason": "stop",
|
| 300 |
+
"index": 29,
|
| 301 |
+
"message": {
|
| 302 |
+
"content": "noncomputable def curve_n_torsion (E : WeierstrassCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ntheorem EllipticCurve.n_torsion_finite (n : ℕ) (hn : 0 < n) (E : WeierstrassCurve k) : Finite (curve_n_torsion E n) ",
|
| 303 |
+
"role": "assistant",
|
| 304 |
+
"tool_calls": null,
|
| 305 |
+
"function_call": null
|
| 306 |
+
}
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"finish_reason": "stop",
|
| 310 |
+
"index": 30,
|
| 311 |
+
"message": {
|
| 312 |
+
"content": "theorem my_favorite_theorem (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (h : IsSepClosed k) :\n IsAddCommGroup (E.n_torsion n) ∧ Finite (E.n_torsion n) ∧ (E.n_torsion n).ncard = n ^ 2 ",
|
| 313 |
+
"role": "assistant",
|
| 314 |
+
"tool_calls": null,
|
| 315 |
+
"function_call": null
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"finish_reason": "stop",
|
| 320 |
+
"index": 31,
|
| 321 |
+
"message": {
|
| 322 |
+
"content": "noncomputable def curve_group (E : EllipticCurve k) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) 1\n\ndef curve_multiplication (E : EllipticCurve k) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) 2\n\ndef curve_add (E : EllipticCurve k) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) 3\n\nnoncomputable def curve_n_torsion (n : ℕ) (E : EllipticCurve k) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ntheorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (k : Type) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) (hE1 : ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1) : Finite (curve_n_torsion n E) ∧ (curve_n_torsion n E).ncard = n ^ 2 ",
|
| 323 |
+
"role": "assistant",
|
| 324 |
+
"tool_calls": null,
|
| 325 |
+
"function_call": null
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"finish_reason": "stop",
|
| 330 |
+
"index": 32,
|
| 331 |
+
"message": {
|
| 332 |
+
"content": "theorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : n ≠ 0) (E : ECurve F) :\n Finite (EPoints F)[n]! ∧\n (EPoints F)[n]!.ncard = n ^ 2 ",
|
| 333 |
+
"role": "assistant",
|
| 334 |
+
"tool_calls": null,
|
| 335 |
+
"function_call": null
|
| 336 |
+
}
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"finish_reason": "stop",
|
| 340 |
+
"index": 33,
|
| 341 |
+
"message": {
|
| 342 |
+
"content": "theorem my_favorite_theorem (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Nonempty (Fˣ)) (E : EllipticCurve F) :\n Nonempty (E.toWeierstrassCurve Fˣ) ∧ Fintype (E.toWeierstrassCurve Fˣ) ∧ Fintype.card (E.toWeierstrassCurve Fˣ) = n ^ 2 ",
|
| 343 |
+
"role": "assistant",
|
| 344 |
+
"tool_calls": null,
|
| 345 |
+
"function_call": null
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"finish_reason": "stop",
|
| 350 |
+
"index": 34,
|
| 351 |
+
"message": {
|
| 352 |
+
"content": "noncomputable def SeparallyClosedField (F : Type*) [Field F] : Prop := ",
|
| 353 |
+
"role": "assistant",
|
| 354 |
+
"tool_calls": null,
|
| 355 |
+
"function_call": null
|
| 356 |
+
}
|
| 357 |
+
},
|
| 358 |
+
{
|
| 359 |
+
"finish_reason": "stop",
|
| 360 |
+
"index": 35,
|
| 361 |
+
"message": {
|
| 362 |
+
"content": "def SeparatelyClosed (F : Type*) [Field F] : Prop := ",
|
| 363 |
+
"role": "assistant",
|
| 364 |
+
"tool_calls": null,
|
| 365 |
+
"function_call": null
|
| 366 |
+
}
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"finish_reason": "stop",
|
| 370 |
+
"index": 36,
|
| 371 |
+
"message": {
|
| 372 |
+
"content": "def SeparablyClosed (F : Type*) [Field F] : Prop := ",
|
| 373 |
+
"role": "assistant",
|
| 374 |
+
"tool_calls": null,
|
| 375 |
+
"function_call": null
|
| 376 |
+
}
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"finish_reason": "stop",
|
| 380 |
+
"index": 37,
|
| 381 |
+
"message": {
|
| 382 |
+
"content": "open Fintype Set Real Ideal Polynomial\nopen scoped BigOperators\n\ntheorem EllipticCurve.n_torsion_group (n : ℕ) (hn : 0 < n) (k : Type*) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) : IsGroup (E.toWeierstrassCurve ⟮k⟯)ˣ ∧ ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1 ",
|
| 383 |
+
"role": "assistant",
|
| 384 |
+
"tool_calls": null,
|
| 385 |
+
"function_call": null
|
| 386 |
+
}
|
| 387 |
+
},
|
| 388 |
+
{
|
| 389 |
+
"finish_reason": "stop",
|
| 390 |
+
"index": 38,
|
| 391 |
+
"message": {
|
| 392 |
+
"content": "theorem my_favorite_theorem (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) :\n Nonempty (E n_torsion) ∧\n ∃ fin : Fintype (E n_torsion), fin.card = n ^ 2 ",
|
| 393 |
+
"role": "assistant",
|
| 394 |
+
"tool_calls": null,
|
| 395 |
+
"function_call": null
|
| 396 |
+
}
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"finish_reason": "stop",
|
| 400 |
+
"index": 39,
|
| 401 |
+
"message": {
|
| 402 |
+
"content": "def SeparatelyClosed (F : Type u) [Field F] : Prop := ",
|
| 403 |
+
"role": "assistant",
|
| 404 |
+
"tool_calls": null,
|
| 405 |
+
"function_call": null
|
| 406 |
+
}
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"finish_reason": "stop",
|
| 410 |
+
"index": 40,
|
| 411 |
+
"message": {
|
| 412 |
+
"content": "def SeparatelyClosed (F : Type) : Prop ",
|
| 413 |
+
"role": "assistant",
|
| 414 |
+
"tool_calls": null,
|
| 415 |
+
"function_call": null
|
| 416 |
+
}
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"finish_reason": "stop",
|
| 420 |
+
"index": 41,
|
| 421 |
+
"message": {
|
| 422 |
+
"content": "noncomputable def other_544869 (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\nabbrev EllipticCurve.n_torsion (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\nnoncomputable def ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n ",
|
| 423 |
+
"role": "assistant",
|
| 424 |
+
"tool_calls": null,
|
| 425 |
+
"function_call": null
|
| 426 |
+
}
|
| 427 |
+
},
|
| 428 |
+
{
|
| 429 |
+
"finish_reason": "stop",
|
| 430 |
+
"index": 42,
|
| 431 |
+
"message": {
|
| 432 |
+
"content": "open Fintype Subgroup Set Polynomial Ideal\nopen scoped BigOperators\n\ntheorem my_favorite_theorem {n : ℕ} (hn : 0 < n) (k : Type*) [Field k] (hk : IsSepClosed k)\n (hk1 : Nonempty k) (E : EllipticCurve k) :\n Finite (E.toWeierstrassCurve k) ∧ card (E.toWeierstrassCurve k) = n^2 :=\n",
|
| 433 |
+
"role": "assistant",
|
| 434 |
+
"tool_calls": null,
|
| 435 |
+
"function_call": null
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"finish_reason": "stop",
|
| 440 |
+
"index": 43,
|
| 441 |
+
"message": {
|
| 442 |
+
"content": "def SeparatelyClosed (F : Type*) [Field F] : Prop := ",
|
| 443 |
+
"role": "assistant",
|
| 444 |
+
"tool_calls": null,
|
| 445 |
+
"function_call": null
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"finish_reason": "stop",
|
| 450 |
+
"index": 44,
|
| 451 |
+
"message": {
|
| 452 |
+
"content": "noncomputable def curve_n_torsion (E : EllipticCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ntheorem EllipticCurve.n_torsion_finite (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (curve_n_torsion E n) ∧ curve_n_torsion E n =+* curve_n_torsion E n ",
|
| 453 |
+
"role": "assistant",
|
| 454 |
+
"tool_calls": null,
|
| 455 |
+
"function_call": null
|
| 456 |
+
}
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"finish_reason": "stop",
|
| 460 |
+
"index": 45,
|
| 461 |
+
"message": {
|
| 462 |
+
"content": "theorem my_favorite_theorem (k : Type*) [Field k] (E : ECurve k) (n : ℕ) (hn : n ≠ 0)\n (hSepClosed : IsSepClosed k) : Nonempty (E.points k ⧸ span ({0} : Set k)) ∧\n (E.points k ⧸ span ({0} : Set k)).Finite ∧\n (E.points k ⧸ span ({0} : Set k)).ncard = n ^ 2 ",
|
| 463 |
+
"role": "assistant",
|
| 464 |
+
"tool_calls": null,
|
| 465 |
+
"function_call": null
|
| 466 |
+
}
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"finish_reason": "stop",
|
| 470 |
+
"index": 46,
|
| 471 |
+
"message": {
|
| 472 |
+
"content": "def SeparablyClosed (F : Type*) [Field F] : Prop :=\n SeparableAlgebra.Fintype Fˣ\n\ndef EllipticCurve.n_torsion (E : EllipticCurve k) (n : ℕ) : Type u := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n\ndef ZMod.module (A : Type*) [AddCommGroup A] (n : ℕ) (hn : ∀ a : A, n • a = 0) :\n Module (ZMod n) A :=\n ",
|
| 473 |
+
"role": "assistant",
|
| 474 |
+
"tool_calls": null,
|
| 475 |
+
"function_call": null
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"finish_reason": "stop",
|
| 480 |
+
"index": 47,
|
| 481 |
+
"message": {
|
| 482 |
+
"content": "noncomputable def SeparablyClosed {F : Type u} [Field F] : Prop := ",
|
| 483 |
+
"role": "assistant",
|
| 484 |
+
"tool_calls": null,
|
| 485 |
+
"function_call": null
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"finish_reason": "stop",
|
| 490 |
+
"index": 48,
|
| 491 |
+
"message": {
|
| 492 |
+
"content": "def SeparablyClosed (F : Type*) [Field F] : Prop := ",
|
| 493 |
+
"role": "assistant",
|
| 494 |
+
"tool_calls": null,
|
| 495 |
+
"function_call": null
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"finish_reason": "stop",
|
| 500 |
+
"index": 49,
|
| 501 |
+
"message": {
|
| 502 |
+
"content": "def separablyClosedField (F : Type*) [Field F] : Prop := ",
|
| 503 |
+
"role": "assistant",
|
| 504 |
+
"tool_calls": null,
|
| 505 |
+
"function_call": null
|
| 506 |
+
}
|
| 507 |
+
}
|
| 508 |
+
],
|
| 509 |
+
"usage": {
|
| 510 |
+
"completion_tokens": 4904,
|
| 511 |
+
"prompt_tokens": 643,
|
| 512 |
+
"total_tokens": 5547,
|
| 513 |
+
"completion_tokens_details": null,
|
| 514 |
+
"prompt_tokens_details": null
|
| 515 |
+
},
|
| 516 |
+
"service_tier": null,
|
| 517 |
+
"prompt_logprobs": null
|
| 518 |
+
}
|
results/FLT/kiminaembedbeta/20250604_090129/EllipticCurve.n_torsion_card/validity_results.jsonl
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 2 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (n_torsion E n) ∧ (n_torsion E n).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 3 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 4 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype Fˣ) (E : Ecurve F) : Fintype (E.points F)ˣ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 5 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) : Prop := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 6 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] [SepClosed k] (E : Type*) [Field E] [EllipticCurve E] [IsSepClosed E k] (n : ℕ) (hn : 0 < n) :\n Finite (curve_torsor E k n) ∧ curve_torsor E k n.encard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 7 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 8 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 9 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] (n : ℕ) (hn : 0 < n) (hF : IsSepClosed F) (hF1 : Fintype F)\n (hF2 : Nonempty F) (E : EllipticCurve F) :\n curve_n_torsion_finite F n ∧ curve_n_torsion_add_group F n = (ZMod n)ˣ := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 10 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : n > 0)\n (E : Affine WeierstrassCurve F) (hE : E.toWeierstrassCurve.natDegree = 2) :\n ∃ g : Fintype (E.points ⧸ span ({1} : Set (E.points))), (E.points ⧸ span ({1} : Set (E.points))) = g ∧\n Fintype.card (E.points ⧸ span ({1} : Set (E.points))) = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 11 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n IsSepClosed k → (E.n_torsion n).Finite ∧ (E.n_torsion n).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 12 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F]\n (hF : Fintype F) (hF1 : Fintype.card F = n) (E : Affine E) :\n (E.points.filter (fun x => x ^ n = 1)).Finite ∧\n Fintype ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) ∧\n Fintype.card ((E.points.filter (fun x => x ^ n = 1)) : Set E.points ) = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 13 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card {F : Type} [Field F] [IsSepClosed F] (hF : Nonempty Fˣ) (E : EllipticCurve F) (n : ℕ) (hn : 0 < n) :\n Nonempty (E.points ⧸ span ({0} : Set (E.points)))ˣ ∧\n (E.points ⧸ span ({0} : Set (E.points)))ˣ.ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 14 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 15 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 16 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ)\n (hn : 0 < n)\n (F : Type*) [Field F]\n (hF : IsSepClosed F)\n (hF1 : Nonempty (Fˣ))\n (E : AffineCurse F)\n (hE : E.Nonempty)\n : Finite (E.points.filter (fun x => x ^ n = 1)) ∧ (E.points.filter (fun x => x ^ n = 1)).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 17 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 18 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : Fintype F) (E : Type*) [EllipticCurve F E]\n (hE : IsCyclic Eˣ) :\n Nonempty (E n_torsion) ∧ Fintype (E n_torsion) ∧\n (E n_torsion).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 19 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : SeparablyClosed k) [Field F] (hF : Fintype F) (hF1 : card F = n) :\n Fintype (E.toWeierstrassCurve F 0) ∧ @card (E.toWeierstrassCurve F 0) = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 20 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [SeparableClosed F] (hF : n ≠ 0) (E : Type*) [EllipticCurve E] :\n Finite (curve_points (E.n_torsion n)) ∧ curve_points (E.n_torsion n).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 21 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) (E : EllipticCurve F) :\n Finite (E.toWeierstrassCurve n_torsion) ∧ E.toWeierstrassCurve n_torsion.ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 22 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F) (hF1 : Fintype.card F = n) : Finite (E.n_torsion n) ∧ (E.n_torsion n).card = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 23 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 24 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k)\n (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Fintype F)\n (hF1 : Fintype.card F = n) :\n let G := Submodule.torsionBy ℤ (E.toWeierstrassCurve ⟮k⟯) n\n [inst : NeZero k] [inst : Fintype G] [inst : Group G] [inst : AddCommGroup G] [inst : Module k G]\n G.fintype.card = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 25 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 26 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 27 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 28 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card {k : Type u} [Field k] [IsSepClosed k]\n (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (hn1 : n ≠ 1) :\n ∃ F : Fintype (E.n_torsion n), F.card = n ^ 2 ∧\n (E.n_torsion n : Type*)[AddCommGroup (E.n_torsion n)] = AddCommGroup.mk\n (E.n_torsion n : Type*)[Module (ZMod n) (E.n_torsion n)] = Module.mk\n (E.n_torsion n : Type*)[Fintype (E.n_torsion n)] = Fintype.mk := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 29 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 30 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (E : WeierstrassCurve k) : Finite (curve_n_torsion E n) := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 31 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (k : Type u) [Field k] (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) (h : IsSepClosed k) :\n IsAddCommGroup (E.n_torsion n) ∧ Finite (E.n_torsion n) ∧ (E.n_torsion n).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 32 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (k : Type) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) (hE1 : ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1) : Finite (curve_n_torsion n E) ∧ (curve_n_torsion n E).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 33 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F]\n [IsSepClosed F] (hF : n ≠ 0) (E : ECurve F) :\n Finite (EPoints F)[n]! ∧\n (EPoints F)[n]!.ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 34 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (F : Type*) [Field F] [IsSepClosed F] (hF : Nonempty (Fˣ)) (E : EllipticCurve F) :\n Nonempty (E.toWeierstrassCurve Fˣ) ∧ Fintype (E.toWeierstrassCurve Fˣ) ∧ Fintype.card (E.toWeierstrassCurve Fˣ) = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 35 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 36 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 37 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 38 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (n : ℕ) (hn : 0 < n) (k : Type*) [Field k] (E : EllipticCurve k) [IsSepClosed k] (hE : Nonempty (E.toWeierstrassCurve ⟮k⟯)) : IsGroup (E.toWeierstrassCurve ⟮k⟯)ˣ ∧ ∀ x : E.toWeierstrassCurve ⟮k⟯, x ^ n = 1 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 39 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (F : Type*) [Field F] [IsSepClosed F] (n : ℕ) (hn : 0 < n) :\n Nonempty (E n_torsion) ∧\n ∃ fin : Fintype (E n_torsion), fin.card = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 40 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 41 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 42 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 43 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card {n : ℕ} (hn : 0 < n) (k : Type*) [Field k] (hk : IsSepClosed k)\n (hk1 : Nonempty k) (E : EllipticCurve k) :\n Finite (E.toWeierstrassCurve k) ∧ card (E.toWeierstrassCurve k) = n^2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 44 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 45 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (E : EllipticCurve k) (n : ℕ) (hn : 0 < n) :\n Finite (curve_n_torsion E n) ∧ curve_n_torsion E n =+* curve_n_torsion E n := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 46 |
+
{"lean_code": "theorem EllipticCurve.n_torsion_card (k : Type*) [Field k] (E : ECurve k) (n : ℕ) (hn : n ≠ 0)\n (hSepClosed : IsSepClosed k) : Nonempty (E.points k ⧸ span ({0} : Set k)) ∧\n (E.points k ⧸ span ({0} : Set k)).Finite ∧\n (E.points k ⧸ span ({0} : Set k)).ncard = n ^ 2 := by sorry", "well_typed": false, "beq_result": null, "error": null}
|
| 47 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 48 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 49 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|
| 50 |
+
{"lean_code": null, "well_typed": false, "beq_result": null, "error": null}
|