Skip to content

[Merged by Bors] - feat(NumberTheory/Harmonic/ZetaAsymp): conjugation symmetry of riemannZeta#41133

Closed
owenpkent wants to merge 4 commits into
leanprover-community:masterfrom
owenpkent:riemann-zeta-conj
Closed

[Merged by Bors] - feat(NumberTheory/Harmonic/ZetaAsymp): conjugation symmetry of riemannZeta#41133
owenpkent wants to merge 4 commits into
leanprover-community:masterfrom
owenpkent:riemann-zeta-conj

Conversation

@owenpkent

@owenpkent owenpkent commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

This PR adds the reflection (conjugation) symmetry of the Riemann zeta function to Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean:

  • riemannZeta_conj :riemannZeta (conj s) = conj (riemannZeta s);
  • riemannZeta_conj_eq_zero_iff : riemannZeta (conj s) = 0 ↔ riemannZeta s = 0 (the zeros are symmetric under complex conjugation).

This is the natural companion to the functional equation already in Mathlib (riemannZeta_one_sub). Together the two symmetries s ↦ 1 - s and s ↦ conj s generate the quadruple symmetry {ρ, 1 - ρ, conj ρ, 1 - conj ρ} of the nontrivial zeros, and the reflection symmetry alone is a basic, frequently-used fact (it is why the zeros come in conjugate pairs).

Mathematical content: ζ has real Dirichlet coefficients, so on 1 < re s the identity conj (ζ (conj s)) = ζ s holds termwise from zeta_eq_tsum_one_div_nat_cpow and Complex.conj_cpow. The identity principle for analytic functions then propagates it across the connected domain ℂ ∖ {1} (AnalyticOnNhd.eqOn_of_preconnected_of_eventuallyEq); analyticity of conj ∘ ζ ∘ conj is the anti-holomorphic composition HasDerivAt.conj_conj.

The PR adds two imports (Mathlib.Analysis.Calculus.Deriv.Star, Mathlib.Analysis.Normed.Module.Connected), both confirmed required.


AI use disclosure (per Mathlib's contribution guidelines): this result was formalized in a personal research project with the help of an AI coding agent (Claude Code). The agent assisted in developing the original proof and in porting it onto current Mathlib master (transplanting the verified proof, adapting the imports to the new module system, and confirming the build is green with #print axioms clean). The result is standard and the proof uses only existing Mathlib API. I have reviewed and understand the proof, take responsibility for the content, and will respond to review in my own words.

@github-actions github-actions Bot added the new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! label Jun 28, 2026
@github-actions

Copy link
Copy Markdown

Welcome new contributor!

Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests.

We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the awaiting-author tag, or another reason described in the Lifecycle of a PR. The review dashboard has a dedicated webpage which shows whether your PR is on the review queue, and (if not), why.

If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR.

Thank you again for joining our community.

@github-actions github-actions Bot added the t-number-theory Number theory (also use t-algebra or t-analysis to specialize) label Jun 28, 2026
@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown

PR summary e3d37291a5

Import changes for modified files

Dependency changes

File Base Count Head Count Change
Mathlib.NumberTheory.Harmonic.ZetaAsymp 2985 2996 +11 (+0.37%)
Import changes for all files
Files Import difference
3 files Mathlib.NumberTheory.LSeries.Nonvanishing Mathlib.NumberTheory.LSeries.PrimesInAP Mathlib.NumberTheory.LSeries.ZetaZeros
2
Mathlib.NumberTheory.Harmonic.ZetaAsymp 11

Declarations diff (regex)

+ riemannZeta_conj

You can run this locally as follows
## from your `mathlib4` directory:
git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci

## summary with just the declaration names:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh <optional_commit>

## more verbose report:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh long <optional_commit>

The doc-module for scripts/pr_summary/declarations_diff.sh in the mathlib-ci repository contains some details about this script.

Declarations diff (Lean)

Lean-aware diff — post-build, computed from the Lean environment (commit e3d3729).

  • +1 new declarations
  • −0 removed declarations
+riemannZeta_conj

No changes to strong technical debt.

No changes to weak technical debt.

Current commit e3d37291a5
Reference commit 9e735227e7

This script lives in the mathlib-ci repository. To run it locally, from your mathlib4 directory:

git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci
../mathlib-ci/scripts/reporting/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).

@owenpkent
owenpkent force-pushed the riemann-zeta-conj branch from ef665e3 to 29c6bf4 Compare June 28, 2026 21:10

@wwylele wwylele left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

If this PR doesn't do better than #39743, I suspect it will be closed as well

Comment thread Mathlib/NumberTheory/LSeries/RiemannZeta.lean Outdated

@loefflerd loefflerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I agree with Weiyi's comment about s ≠ 1. I'd propose moving this result to the ZetaAsymptotics file so you can use riemannZeta_one. I also left a few suggested refinements.

awaiting-author

Comment thread Mathlib/NumberTheory/LSeries/RiemannZeta.lean Outdated
Comment thread Mathlib/NumberTheory/LSeries/RiemannZeta.lean Outdated
Comment thread Mathlib/NumberTheory/LSeries/RiemannZeta.lean Outdated
@loefflerd loefflerd added the awaiting-author A reviewer has asked the author a question or requested changes. label Jun 29, 2026
@owenpkent owenpkent changed the title feat(NumberTheory/LSeries/RiemannZeta): conjugation symmetry of riemannZeta feat(NumberTheory/Harmonic/ZetaAsymp): conjugation symmetry of riemannZeta Jul 3, 2026
@github-actions github-actions Bot added the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Jul 3, 2026
# Conflicts:
#	Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean
@github-actions github-actions Bot removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Jul 3, 2026
@owenpkent

owenpkent commented Jul 3, 2026 via email

Copy link
Copy Markdown
Contributor Author

@wwylele

wwylele commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

You can write "-awaiting-author" to remove the tag and signal this is ready for review. You can read https://leanprover-community.github.io/contribute/index.html#lifecycle-of-a-pr for more about review cycles

@owenpkent

Copy link
Copy Markdown
Contributor Author

-awaiting-author

@github-actions github-actions Bot removed the awaiting-author A reviewer has asked the author a question or requested changes. label Jul 3, 2026
@owenpkent

owenpkent commented Jul 3, 2026 via email

Copy link
Copy Markdown
Contributor Author

@loefflerd loefflerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for revising this! The main proof is fine now, I just found a couple of trivial golfs.

Comment thread Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean Outdated
Comment thread Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean Outdated
Comment thread Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean Outdated
Tag riemannZeta_conj with @[simp] and drop the redundant
riemannZeta_conj_eq_zero_iff lemma (now closes by simp). Golf the
s = 1 branch cast (push_cast; rfl -> norm_cast) and let the set
membership goal infer its type (({1}ᶜ : Set C) -> _).
@owenpkent

Copy link
Copy Markdown
Contributor Author

Thanks David, all three addressed in e3d3729:

  • Tagged riemannZeta_conj with @[simp] and dropped riemannZeta_conj_eq_zero_iff (the zero-symmetry goal now closes by simp).
  • push_cast; rfl -> norm_cast in the s = 1 branch.
  • Let the membership goal infer its type: (2 : ℂ) ∈ _.

Module builds and runLinter passes clean (no simpNF issue from the new simp tag).

@loefflerd

Copy link
Copy Markdown
Contributor

Great, I think this is ready for merging now. I'll send it on to the maintainers for the final decision.

maintainer merge

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown

🚀 Pull request has been placed on the maintainer queue by loefflerd.

@mathlib-triage mathlib-triage Bot added the maintainer-merge A reviewer has approved the changed; awaiting maintainer approval. label Jul 4, 2026
@j-loreaux

Copy link
Copy Markdown
Contributor

@owenpkent for future reference, please do not let AI write the PR description. GitHub interactions should be human-to-human. (I realize you did this for your responses.) I updated the PR description to remove irrelevant information and reflect the changes made during review.

@j-loreaux

Copy link
Copy Markdown
Contributor

bors merge

@mathlib-bors mathlib-bors Bot added the ready-to-merge This PR has been sent to bors. label Jul 7, 2026
@mathlib-triage mathlib-triage Bot removed the maintainer-merge A reviewer has approved the changed; awaiting maintainer approval. label Jul 7, 2026
mathlib-bors Bot pushed a commit that referenced this pull request Jul 7, 2026
…nZeta (#41133)

This PR adds the reflection (conjugation) symmetry of the Riemann zeta function to `Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean`:

- `riemannZeta_conj` :`riemannZeta (conj s) = conj (riemannZeta s)`;
- `riemannZeta_conj_eq_zero_iff` : `riemannZeta (conj s) = 0 ↔ riemannZeta s = 0` (the zeros are symmetric under complex conjugation).

This is the natural companion to the functional equation already in Mathlib (`riemannZeta_one_sub`). Together the two symmetries `s ↦ 1 - s` and `s ↦ conj s` generate the quadruple symmetry `{ρ, 1 - ρ, conj ρ, 1 - conj ρ}` of the nontrivial zeros, and the reflection symmetry alone is a basic, frequently-used fact (it is why the zeros come in conjugate pairs).

Mathematical content: `ζ` has real Dirichlet coefficients, so on `1 < re s` the identity `conj (ζ (conj s)) = ζ s` holds termwise from `zeta_eq_tsum_one_div_nat_cpow` and `Complex.conj_cpow`. The identity principle for analytic functions then propagates it across the connected domain `ℂ ∖ {1}` (`AnalyticOnNhd.eqOn_of_preconnected_of_eventuallyEq`); analyticity of `conj ∘ ζ ∘ conj` is the anti-holomorphic composition `HasDerivAt.conj_conj`.

The PR adds two imports (`Mathlib.Analysis.Calculus.Deriv.Star`, `Mathlib.Analysis.Normed.Module.Connected`), both confirmed required.
@mathlib-bors mathlib-bors Bot added the bors-staging This PR is currently being built by bors on the staging branch. label Jul 7, 2026
@mathlib-bors

mathlib-bors Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

@mathlib-bors mathlib-bors Bot changed the title feat(NumberTheory/Harmonic/ZetaAsymp): conjugation symmetry of riemannZeta [Merged by Bors] - feat(NumberTheory/Harmonic/ZetaAsymp): conjugation symmetry of riemannZeta Jul 7, 2026
@mathlib-bors mathlib-bors Bot closed this Jul 7, 2026
michaellee94 pushed a commit to michaellee94/mathlib4 that referenced this pull request Jul 11, 2026
…nZeta (leanprover-community#41133)

This PR adds the reflection (conjugation) symmetry of the Riemann zeta function to `Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean`:

- `riemannZeta_conj` :`riemannZeta (conj s) = conj (riemannZeta s)`;
- `riemannZeta_conj_eq_zero_iff` : `riemannZeta (conj s) = 0 ↔ riemannZeta s = 0` (the zeros are symmetric under complex conjugation).

This is the natural companion to the functional equation already in Mathlib (`riemannZeta_one_sub`). Together the two symmetries `s ↦ 1 - s` and `s ↦ conj s` generate the quadruple symmetry `{ρ, 1 - ρ, conj ρ, 1 - conj ρ}` of the nontrivial zeros, and the reflection symmetry alone is a basic, frequently-used fact (it is why the zeros come in conjugate pairs).

Mathematical content: `ζ` has real Dirichlet coefficients, so on `1 < re s` the identity `conj (ζ (conj s)) = ζ s` holds termwise from `zeta_eq_tsum_one_div_nat_cpow` and `Complex.conj_cpow`. The identity principle for analytic functions then propagates it across the connected domain `ℂ ∖ {1}` (`AnalyticOnNhd.eqOn_of_preconnected_of_eventuallyEq`); analyticity of `conj ∘ ζ ∘ conj` is the anti-holomorphic composition `HasDerivAt.conj_conj`.

The PR adds two imports (`Mathlib.Analysis.Calculus.Deriv.Star`, `Mathlib.Analysis.Normed.Module.Connected`), both confirmed required.
mpacholski pushed a commit to mpacholski/mathlib4 that referenced this pull request Jul 16, 2026
…nZeta (leanprover-community#41133)

This PR adds the reflection (conjugation) symmetry of the Riemann zeta function to `Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean`:

- `riemannZeta_conj` :`riemannZeta (conj s) = conj (riemannZeta s)`;
- `riemannZeta_conj_eq_zero_iff` : `riemannZeta (conj s) = 0 ↔ riemannZeta s = 0` (the zeros are symmetric under complex conjugation).

This is the natural companion to the functional equation already in Mathlib (`riemannZeta_one_sub`). Together the two symmetries `s ↦ 1 - s` and `s ↦ conj s` generate the quadruple symmetry `{ρ, 1 - ρ, conj ρ, 1 - conj ρ}` of the nontrivial zeros, and the reflection symmetry alone is a basic, frequently-used fact (it is why the zeros come in conjugate pairs).

Mathematical content: `ζ` has real Dirichlet coefficients, so on `1 < re s` the identity `conj (ζ (conj s)) = ζ s` holds termwise from `zeta_eq_tsum_one_div_nat_cpow` and `Complex.conj_cpow`. The identity principle for analytic functions then propagates it across the connected domain `ℂ ∖ {1}` (`AnalyticOnNhd.eqOn_of_preconnected_of_eventuallyEq`); analyticity of `conj ∘ ζ ∘ conj` is the anti-holomorphic composition `HasDerivAt.conj_conj`.

The PR adds two imports (`Mathlib.Analysis.Calculus.Deriv.Star`, `Mathlib.Analysis.Normed.Module.Connected`), both confirmed required.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bors-staging This PR is currently being built by bors on the staging branch. new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! ready-to-merge This PR has been sent to bors. t-number-theory Number theory (also use t-algebra or t-analysis to specialize)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants