-
Notifications
You must be signed in to change notification settings - Fork 380
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(RingTheory/WittVector): the Teichmuller series #22320
base: master
Are you sure you want to change the base?
Conversation
This reverts commit acd93bb.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ng_fontaine_theta
…ng_fontaine_theta
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…nprover-community/mathlib4 into jiedong_jiang_fontaine_theta
remove other files mk_all
This reverts commit 7830e84.
This could be single PR
PR summary f0022bcb63Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This reverts commit bc43a37.
@@ -62,4 +62,27 @@ def toPerm : RingAut R →* Equiv.Perm R where | |||
map_one' := rfl | |||
map_mul' _ _ := rfl | |||
|
|||
variable {R} | |||
|
|||
theorem one_eq_refl : (1 : R ≃+* R) = RingEquiv.refl R := rfl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we really need those? I mean, nothing against them, but if we add them for RingEquiv
we should do the same for all other equivs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we need these lemmas, especially those tagged with [simp]
. Currently, the simp normal form will stop at (1 : R ≃+* R) x
without any lemma that can further modify the proof state.
I'll add similar lemmas for other equivs in another PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems the corresponding lemmas already exist for MulAut
and AddAut
. see MulAut.one_def, MulAut.coe_one
AlgAut
doesn't exist yet.
I'll check more and open the PR for aut lemmas later.
@[simp] | ||
theorem iterate_frobeniusEquiv_symm_pow_p_pow (R : Type*) (p : ℕ) | ||
[CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) (n : ℕ) : | ||
((_root_.frobeniusEquiv R p).symm ^[n]) x ^ (p ^ n) = x := by | ||
revert x | ||
induction' n with n ih | ||
· simp | ||
· intro x | ||
simp [pow_succ, pow_mul, ih] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@[simp] | |
theorem iterate_frobeniusEquiv_symm_pow_p_pow (R : Type*) (p : ℕ) | |
[CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) (n : ℕ) : | |
((_root_.frobeniusEquiv R p).symm ^[n]) x ^ (p ^ n) = x := by | |
revert x | |
induction' n with n ih | |
· simp | |
· intro x | |
simp [pow_succ, pow_mul, ih] | |
@[simp] | |
theorem iterate_frobeniusEquiv_symm_pow_p_pow (x : R) (n : ℕ) : | |
((frobeniusEquiv R p).symm ^[n]) x ^ (p ^ n) = x := by | |
induction n generalizing x with | |
| zero => simp | |
| succ n ih => simp [pow_succ, pow_mul, ih] |
R
is already in scope, and you can use induction n generalizing x
.
@[simp] | ||
theorem map_id (R : Type*) [CommRing R] : | ||
WittVector.map (RingHom.id R) = RingHom.id (𝕎 R) := by | ||
ext | ||
simp | ||
|
||
theorem map_eq_zero_iff {p : ℕ} {R S : Type*} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] | ||
(f : R →+* S) {x : WittVector p R} : | ||
((map f) x) = 0 ↔ ∀ n, f (x.coeff n) = 0 := by | ||
refine ⟨fun h n ↦ ?_, fun h ↦ ?_⟩ | ||
· apply_fun (fun x ↦ x.coeff n) at h | ||
simpa using h | ||
· ext n | ||
simpa using h n |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@[simp] | |
theorem map_id (R : Type*) [CommRing R] : | |
WittVector.map (RingHom.id R) = RingHom.id (𝕎 R) := by | |
ext | |
simp | |
theorem map_eq_zero_iff {p : ℕ} {R S : Type*} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] | |
(f : R →+* S) {x : WittVector p R} : | |
((map f) x) = 0 ↔ ∀ n, f (x.coeff n) = 0 := by | |
refine ⟨fun h n ↦ ?_, fun h ↦ ?_⟩ | |
· apply_fun (fun x ↦ x.coeff n) at h | |
simpa using h | |
· ext n | |
simpa using h n | |
variable (R) in | |
@[simp] | |
theorem map_id : WittVector.map (RingHom.id R) = RingHom.id (𝕎 R) := by | |
ext; simp | |
theorem map_eq_zero_iff (f : R →+* S) {x : WittVector p R} : | |
((map f) x) = 0 ↔ ∀ n, f (x.coeff n) = 0 := by | |
refine ⟨fun h n ↦ ?_, fun h ↦ ?_⟩ | |
· apply_fun (·.coeff n) at h | |
simpa using h | |
· ext n | |
simpa using h n |
rw [this] | ||
have : n + 1 = (n - i) + 1 + i := by omega | ||
nth_rw 1 [this] | ||
rw [pow_add, mul_comm] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rw [this] | |
have : n + 1 = (n - i) + 1 + i := by omega | |
nth_rw 1 [this] | |
rw [pow_add, mul_comm] | |
rw [this, show n + 1 = (n - i) + 1 + i by omega, pow_add, mul_comm] |
nth_rw 1 [this] | ||
rw [pow_add, mul_comm] | ||
apply mul_dvd_mul_left | ||
refine (pow_dvd_pow_of_dvd ?_ _).trans (b := (x.coeff i) ^ (n - i + 1)) (pow_dvd_pow _ ?_) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
refine (pow_dvd_pow_of_dvd ?_ _).trans (b := (x.coeff i) ^ (n - i + 1)) (pow_dvd_pow _ ?_) | |
refine (pow_dvd_pow_of_dvd ?_ _).trans (pow_dvd_pow _ ?_) |
(∑ s ∈ S, x s).coeff n = ∑ (s ∈ S), (x s).coeff n := by | ||
classical | ||
revert n | ||
induction' S using Finset.induction with a S' ha hind |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you use induction ... generalizing ...
here?
rw [coeff_add_of_disjoint n _ _ this, hind n] | ||
|
||
@[simp] | ||
theorem teichmuller_mul_pow_coeff {R : Type*} [CommRing R] [CharP R p] (n : ℕ) (x : R) : |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a variable {R : Type*} ...
line?
rw [Finset.sum_congr rfl (g := fun x : ℕ ↦ (0 : R))] | ||
· simp |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rw [Finset.sum_congr rfl (g := fun x : ℕ ↦ (0 : R))] | |
· simp | |
rw [Finset.sum_congr rfl (g := g)] | |
· simp [g] |
It looks nicer to me, but not very important.
have := of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt ha) | ||
rw [← this] | ||
have := of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt hb) | ||
exact this |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
have := of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt ha) | |
rw [← this] | |
have := of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt hb) | |
exact this | |
rw [← of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt ha)] | |
exact of_not_not ((teichmuller_mul_pow_coeff_of_ne _).mt hb) |
In this PR, we show that every element
x
of the Witt vectors𝕎 R
can be written as the (p
-adic) summation of the Teichmuller series. Instead of usingtsum
, we only show thatp ^ (n + 1)
dividesx
minus the summation of the firstn + 1
terms of the Teichmuller series. We also show that ifp
divides the first (n + 1) coefficients of a Witt vector, thenp^(n+1)
divides then
-th ghost component.#21564 depends on this PR.