Skip to content
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

Open
wants to merge 106 commits into
base: master
Choose a base branch
from

Conversation

jjdishere
Copy link
Collaborator

@jjdishere jjdishere commented Feb 26, 2025

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 using tsum, we only show that p ^ (n + 1) divides x minus the summation of the first n + 1 terms of the Teichmuller series. We also show that if p divides the first (n + 1) coefficients of a Witt vector, then p^(n+1) divides the n-th ghost component.

#21564 depends on this PR.


Open in Gitpod

jjdishere and others added 30 commits February 3, 2025 20:04
This reverts commit acd93bb.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
remove other files

mk_all
@github-actions github-actions bot added the t-algebra Algebra (groups, rings, fields, etc) label Feb 26, 2025
Copy link

github-actions bot commented Feb 26, 2025

PR summary f0022bcb63

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.RingTheory.WittVector.TeichmullerSeries (new file) 1535

Declarations diff

+ coe_one
+ coe_pow
+ dvd_sub_sum_teichmuller_iterateFrobeniusEquiv_coeff
+ eq_of_apply_teichmuller_eq
+ inv_apply
+ iterate_frobeniusEquiv_symm_pow_p_pow
+ map_eq_zero_iff
+ map_id
+ mul_apply
+ one_apply
+ one_eq_refl
+ pow_dvd_ghostComponent_of_dvd_coeff
+ sum_coeff_eq_coeff_sum
+ teichmuller_mul_pow_coeff
+ teichmuller_mul_pow_coeff_of_ne

You can run this locally as follows
## summary with just the declaration names:
./scripts/declarations_diff.sh <optional_commit>

## more verbose report:
./scripts/declarations_diff.sh long <optional_commit>

The doc-module for script/declarations_diff.sh contains some details about this script.


No changes to technical debt.

You can run this locally as

./scripts/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

jjdishere and others added 3 commits February 26, 2025 21:12
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
Copy link
Member

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.

Copy link
Collaborator Author

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.

Copy link
Collaborator Author

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.

Comment on lines +157 to +165
@[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]
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
@[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.

Comment on lines +266 to +279
@[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
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
@[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

Comment on lines +307 to +310
rw [this]
have : n + 1 = (n - i) + 1 + i := by omega
nth_rw 1 [this]
rw [pow_add, mul_comm]
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
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 _ ?_)
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
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
Copy link
Member

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) :
Copy link
Member

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?

Comment on lines +97 to +98
rw [Finset.sum_congr rfl (g := fun x : ℕ ↦ (0 : R))]
· simp
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
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.

Comment on lines +105 to +108
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
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
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)

@loefflerd loefflerd added the awaiting-author A reviewer has asked the author a question or requested changes label Mar 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
awaiting-author A reviewer has asked the author a question or requested changes t-algebra Algebra (groups, rings, fields, etc)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants