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

[Merged by Bors] - feat: Mason-Stothers theorem (polynomial ABC) #15706

Closed
wants to merge 37 commits into from

Conversation

seewoo5
Copy link
Collaborator

@seewoo5 seewoo5 commented Aug 11, 2024

This file proves Mason-Stothers theorem (i.e. polynomial ABC). For coprime polynomials $a, b, c$ over a field (of arbitrary characteristic) with $a + b + c = 0$, we have $\max{\deg(a), \deg(b), \deg(c)} + 1 \le \deg(\mathrm{rad}(abc))$ or $a' = b' = c' = 0$.


Almost last part of porting project of the formalization of polynomial ABC.

TODO: After #14720 is merged, add polynomial FLT as a corollary. It is already in here.

Related: #16060

Open in Gitpod

@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 Aug 11, 2024
Copy link

github-actions bot commented Aug 11, 2024

PR summary 8b3a2a85ac

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.NumberTheory.FLT.MasonStothers 1138

Declarations diff

+ Polynomial.abc
+ _root_.IsCoprime.wronskian_eq_zero_iff
- IsCoprime.wronskian_eq_zero_iff

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.

@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added blocked-by-other-PR This PR depends on another PR to Mathlib (this label is automatically managed by a bot) merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) labels Aug 11, 2024
@grunweg grunweg changed the title Mason-Stothers theorem (polynomial ABC) feat: Mason-Stothers theorem (polynomial ABC) Aug 22, 2024
@grunweg grunweg added the t-number-theory Number theory (also use t-algebra or t-analysis to specialize) label Aug 23, 2024
@mathlib4-dependent-issues-bot mathlib4-dependent-issues-bot removed the blocked-by-other-PR This PR depends on another PR to Mathlib (this label is automatically managed by a bot) label Oct 26, 2024
Copy link
Collaborator

@YaelDillies YaelDillies left a comment

Choose a reason for hiding this comment

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

maintainer merge

apart from that. Thanks!

Copy link

github-actions bot commented Nov 6, 2024

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

@seewoo5 seewoo5 removed the awaiting-author A reviewer has asked the author a question or requested changes label Nov 6, 2024
Copy link
Member

@riccardobrasca riccardobrasca left a comment

Choose a reason for hiding this comment

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

I find the proof easier to read without too many have statement. On the other hand, can you add a little bit of math explanation?

I am not delegating it immediately since I suspect there is a diamond somewhere, let me investigate this.

@riccardobrasca
Copy link
Member

I pushed a small modification to another file. The lines

noncomputable section

open scoped Classical

can now be removed, adding [DecidableEq k]. I suggest a slightly modified proof of the main result:

/-- **Polynomial ABC theorem.** -/
theorem Polynomial.abc {a b c : k[X]} (ha : a ≠ 0) (hb : b ≠ 0) (hc : c ≠ 0) (hab : IsCoprime a b)
    (hbc : IsCoprime b c) (hca : IsCoprime c a) (hsum : a + b + c = 0) :
    ( natDegree a + 1 ≤ (radical (a * b * c)).natDegree ∧
      natDegree b + 1 ≤ (radical (a * b * c)).natDegree ∧
      natDegree c + 1 ≤ (radical (a * b * c)).natDegree ) ∨
      derivative a = 0 ∧ derivative b = 0 ∧ derivative c = 0 := by
  -- Utility assertions
  have wbc := wronskian_eq_of_sum_zero hsum
  set w := wronskian a b with wab
  have wca : w = wronskian c a := by
    rw [add_rotate] at hsum
    simpa only [← wbc] using wronskian_eq_of_sum_zero hsum
  have abc_dr_dvd_w : divRadical (a * b * c) ∣ w := by
    have adr_dvd_w := divRadical_dvd_wronskian_left a b
    have bdr_dvd_w := divRadical_dvd_wronskian_right a b
    have cdr_dvd_w := divRadical_dvd_wronskian_right b c
    rw [← wab] at adr_dvd_w bdr_dvd_w
    rw [← wbc] at cdr_dvd_w
    rw [divRadical_mul (hca.symm.mul_left hbc), divRadical_mul hab]
    exact (hca.divRadical.symm.mul_left hbc.divRadical).mul_dvd
      (hab.divRadical.mul_dvd adr_dvd_w bdr_dvd_w) cdr_dvd_w
  by_cases hw : w = 0
  · right
    rw [hw] at wab wbc
    cases' hab.wronskian_eq_zero_iff.mp wab.symm with ga gb
    cases' hbc.wronskian_eq_zero_iff.mp wbc.symm with _ gc
    exact ⟨ga, gb, gc⟩
  · left
    refine ⟨?_, ?_, ?_⟩
    · rw [mul_rotate] at abc_dr_dvd_w ⊢
      apply abc_subcall wbc <;> assumption
    · rw [← mul_rotate] at abc_dr_dvd_w ⊢
      apply abc_subcall wca <;> assumption
    · apply abc_subcall wab <;> assumption

@jcpaik
Copy link
Collaborator

jcpaik commented Nov 7, 2024

I am not delegating it immediately since I suspect there is a diamond somewhere, let me investigate this.

I don't get what you mean by this. Are you saying that there is a diamond (I suppose the diamond problem of instance?) in this PR, or some other part of the mathlib that this PR depends on?

jcpaik and others added 3 commits November 7, 2024 20:58
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@riccardobrasca
Copy link
Member

I am not delegating it immediately since I suspect there is a diamond somewhere, let me investigate this.

I don't get what you mean by this. Are you saying that there is a diamond (I suppose the diamond problem of instance?) in this PR, or some other part of the mathlib that this PR depends on?

It's in another file, but it is fixed by my commit, you can forget about it.

Copy link
Member

@riccardobrasca riccardobrasca left a comment

Choose a reason for hiding this comment

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

Thanks!

bors d+

@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Nov 7, 2024

✌️ seewoo5 can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@seewoo5
Copy link
Collaborator Author

seewoo5 commented Nov 7, 2024

Thank you all!

bors r+

mathlib-bors bot pushed a commit that referenced this pull request Nov 7, 2024
This file proves Mason-Stothers theorem (i.e. polynomial ABC). For coprime polynomials $a, b, c$ over a field (of arbitrary characteristic) with $a + b + c = 0$, we have $\max\{\deg(a), \deg(b), \deg(c)\} + 1 \le \deg(\mathrm{rad}(abc))$ or $a' = b' = c' = 0$.



Co-authored-by: Riccardo Brasca <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Seewoo Lee <[email protected]>
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Nov 7, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat: Mason-Stothers theorem (polynomial ABC) [Merged by Bors] - feat: Mason-Stothers theorem (polynomial ABC) Nov 7, 2024
@mathlib-bors mathlib-bors bot closed this Nov 7, 2024
@mathlib-bors mathlib-bors bot deleted the feature/mason-stothers branch November 7, 2024 17:50
TobiasLeichtfried pushed a commit that referenced this pull request Nov 21, 2024
Add `IsCoprime.wronskian_eq_zero_iff`: For two polynomials $a, b \in k[x]$ over a field, $W(a, b) = 0$ if and only if $a' = b' = 0$. This is a part of PR #15706.
TobiasLeichtfried pushed a commit that referenced this pull request Nov 21, 2024
This file proves Mason-Stothers theorem (i.e. polynomial ABC). For coprime polynomials $a, b, c$ over a field (of arbitrary characteristic) with $a + b + c = 0$, we have $\max\{\deg(a), \deg(b), \deg(c)\} + 1 \le \deg(\mathrm{rad}(abc))$ or $a' = b' = c' = 0$.



Co-authored-by: Riccardo Brasca <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Seewoo Lee <[email protected]>
mathlib-bors bot pushed a commit that referenced this pull request Jan 6, 2025
Prove the polynomial FLT, using Mason-Stothers theorem #15706. More generally, prove non-solvability of Fermat-Catalan equation: $ux^p + vx^q + wz^r = 0$ where $u, v, w \in k^\times$ are units and $p, q, r \ge 3$ with $pq + qr + rp \le pqr$.

Also derive the `IsCoprime b c` and `IsCoprime c a` assumptions from the `IsCoprime a b` and `a + b + c = 0` ones in  `Polynomial.abc`.



Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Jineon Baek <[email protected]>
Co-authored-by: Seewoo Lee <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
delegated maintainer-merge new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! 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.

8 participants