ring_theory.witt_vector.frobenius_fraction_field
โท
Mathlib.RingTheory.WittVector.FrobeniusFractionField
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -148,8 +148,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succ_nth_val_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succ_nth_defining_poly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.definition] at
- this
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -148,7 +148,8 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succ_nth_val_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succ_nth_defining_poly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.definition] at
+ this
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
@@ -204,7 +205,7 @@ theorem solution_spec' {aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (aโ : ๐
congr
skip
rw [hq]
- rw [pow_succ', hq', this]
+ rw [pow_succ, hq', this]
field_simp [haโ, mul_comm]
#align witt_vector.recursion_base.solution_spec' WittVector.RecursionBase.solution_spec'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -148,7 +148,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succ_nth_val_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succ_nth_defining_poly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
@@ -186,7 +186,7 @@ theorem solution_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (ha
solution p aโ aโ โ 0 := by
intro h
have := solution_spec p aโ aโ
- rw [h, zero_pow] at this
+ rw [h, zero_pow] at this
ยท simpa [haโ, haโ] using _root_.div_eq_zero_iff.mp this.symm
ยท linarith [hp.out.one_lt, le_of_lt hp.out.one_lt]
#align witt_vector.recursion_base.solution_nonzero WittVector.RecursionBase.solution_nonzero
@@ -262,7 +262,7 @@ theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0
have :=
succ_nth_val_spec' p n aโ aโ (fun i : Fin (n + 1) => frobenius_rotation_coeff p haโ haโ i.val)
haโ haโ
- simp only [frobenius_rotation_coeff, Fin.val_eq_coe, Fin.val_zero] at this
+ simp only [frobenius_rotation_coeff, Fin.val_eq_coe, Fin.val_zero] at this
convert this using 4
apply TruncatedWittVector.ext
intro i
@@ -286,7 +286,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
have key : WittVector.frobenius b * p ^ m * r' * p ^ n = p ^ m * b * (p ^ n * q') :=
by
have H := congr_arg (fun x : ๐ k => x * p ^ m * p ^ n) (frobenius_frobenius_rotation p hr' hq')
- dsimp at H
+ dsimp at H
refine' (Eq.trans _ H).trans _ <;> ring
have hq'' : algebraMap (๐ k) (FractionRing (๐ k)) q' โ 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2022 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Heather Macbeth
-/
-import Mathbin.Data.Nat.Cast.WithTop
-import Mathbin.FieldTheory.IsAlgClosed.Basic
-import Mathbin.RingTheory.WittVector.DiscreteValuationRing
+import Data.Nat.Cast.WithTop
+import FieldTheory.IsAlgClosed.Basic
+import RingTheory.WittVector.DiscreteValuationRing
#align_import ring_theory.witt_vector.frobenius_fraction_field from "leanprover-community/mathlib"@"d0b1936853671209a866fa35b9e54949c81116e2"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2022 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Heather Macbeth
-
-! This file was ported from Lean 3 source module ring_theory.witt_vector.frobenius_fraction_field
-! leanprover-community/mathlib commit d0b1936853671209a866fa35b9e54949c81116e2
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Nat.Cast.WithTop
import Mathbin.FieldTheory.IsAlgClosed.Basic
import Mathbin.RingTheory.WittVector.DiscreteValuationRing
+#align_import ring_theory.witt_vector.frobenius_fraction_field from "leanprover-community/mathlib"@"d0b1936853671209a866fa35b9e54949c81116e2"
+
/-!
# Solving equations about the Frobenius map on the field of fractions of `๐ k`
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Heather Macbeth
! This file was ported from Lean 3 source module ring_theory.witt_vector.frobenius_fraction_field
-! leanprover-community/mathlib commit cead93130da7100f8a9fe22ee210f7636a91168f
+! leanprover-community/mathlib commit d0b1936853671209a866fa35b9e54949c81116e2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.RingTheory.WittVector.DiscreteValuationRing
/-!
# Solving equations about the Frobenius map on the field of fractions of `๐ k`
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
The goal of this file is to prove `witt_vector.exists_frobenius_solution_fraction_ring`,
which says that for an algebraically closed field `k` of characteristic `p` and `a, b` in the
field of fractions of Witt vectors over `k`,
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -69,6 +69,7 @@ variable {k : Type _} [CommRing k] [CharP k p]
open Polynomial
+#print WittVector.RecursionMain.succNthDefiningPoly /-
/-- The root of this polynomial determines the `n+1`st coefficient of our solution. -/
def succNthDefiningPoly (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) : Polynomial k :=
X ^ p * C (aโ.coeff 0 ^ p ^ (n + 1)) - X * C (aโ.coeff 0 ^ p ^ (n + 1)) +
@@ -78,7 +79,9 @@ def succNthDefiningPoly (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
aโ.coeff (n + 1) * bs 0 ^ p ^ (n + 1) -
nthRemainder p n bs (truncateFun (n + 1) aโ))
#align witt_vector.recursion_main.succ_nth_defining_poly WittVector.RecursionMain.succNthDefiningPoly
+-/
+#print WittVector.RecursionMain.succNthDefiningPoly_degree /-
theorem succNthDefiningPoly_degree [IsDomain k] (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
(haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) : (succNthDefiningPoly p n aโ aโ bs).degree = p :=
by
@@ -98,6 +101,7 @@ theorem succNthDefiningPoly_degree [IsDomain k] (n : โ) (aโ aโ : ๐ k) (
rw [this]
exact_mod_cast hp.out.pos
#align witt_vector.recursion_main.succ_nth_defining_poly_degree WittVector.RecursionMain.succNthDefiningPoly_degree
+-/
end CommRing
@@ -105,25 +109,32 @@ section IsAlgClosed
variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
+#print WittVector.RecursionMain.root_exists /-
theorem root_exists (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) : โ b : k, (succNthDefiningPoly p n aโ aโ bs).IsRoot b :=
IsAlgClosed.exists_root _ <| by
simp only [succ_nth_defining_poly_degree p n aโ aโ bs haโ haโ, hp.out.ne_zero,
WithTop.coe_eq_zero, Ne.def, not_false_iff]
#align witt_vector.recursion_main.root_exists WittVector.RecursionMain.root_exists
+-/
+#print WittVector.RecursionMain.succNthVal /-
/-- This is the `n+1`st coefficient of our solution, projected from `root_exists`. -/
def succNthVal (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) : k :=
Classical.choose (root_exists p n aโ aโ bs haโ haโ)
#align witt_vector.recursion_main.succ_nth_val WittVector.RecursionMain.succNthVal
+-/
+#print WittVector.RecursionMain.succNthVal_spec /-
theorem succNthVal_spec (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) :
(succNthDefiningPoly p n aโ aโ bs).IsRoot (succNthVal p n aโ aโ bs haโ haโ) :=
Classical.choose_spec (root_exists p n aโ aโ bs haโ haโ)
#align witt_vector.recursion_main.succ_nth_val_spec WittVector.RecursionMain.succNthVal_spec
+-/
+#print WittVector.RecursionMain.succNthVal_spec' /-
theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) :
succNthVal p n aโ aโ bs haโ haโ ^ p * aโ.coeff 0 ^ p ^ (n + 1) +
@@ -141,6 +152,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
+-/
end IsAlgClosed
@@ -150,19 +162,26 @@ namespace RecursionBase
variable {k : Type _} [Field k] [IsAlgClosed k]
+#print WittVector.RecursionBase.solution_pow /-
theorem solution_pow (aโ aโ : ๐ k) : โ x : k, x ^ (p - 1) = aโ.coeff 0 / aโ.coeff 0 :=
IsAlgClosed.exists_pow_nat_eq _ <| by linarith [hp.out.one_lt, le_of_lt hp.out.one_lt]
#align witt_vector.recursion_base.solution_pow WittVector.RecursionBase.solution_pow
+-/
+#print WittVector.RecursionBase.solution /-
/-- The base case (0th coefficient) of our solution vector. -/
def solution (aโ aโ : ๐ k) : k :=
Classical.choose <| solution_pow p aโ aโ
#align witt_vector.recursion_base.solution WittVector.RecursionBase.solution
+-/
+#print WittVector.RecursionBase.solution_spec /-
theorem solution_spec (aโ aโ : ๐ k) : solution p aโ aโ ^ (p - 1) = aโ.coeff 0 / aโ.coeff 0 :=
Classical.choose_spec <| solution_pow p aโ aโ
#align witt_vector.recursion_base.solution_spec WittVector.RecursionBase.solution_spec
+-/
+#print WittVector.RecursionBase.solution_nonzero /-
theorem solution_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) :
solution p aโ aโ โ 0 := by
intro h
@@ -171,7 +190,9 @@ theorem solution_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (ha
ยท simpa [haโ, haโ] using _root_.div_eq_zero_iff.mp this.symm
ยท linarith [hp.out.one_lt, le_of_lt hp.out.one_lt]
#align witt_vector.recursion_base.solution_nonzero WittVector.RecursionBase.solution_nonzero
+-/
+#print WittVector.RecursionBase.solution_spec' /-
theorem solution_spec' {aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (aโ : ๐ k) :
solution p aโ aโ ^ p * aโ.coeff 0 = solution p aโ aโ * aโ.coeff 0 :=
by
@@ -186,6 +207,7 @@ theorem solution_spec' {aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (aโ : ๐
rw [pow_succ', hq', this]
field_simp [haโ, mul_comm]
#align witt_vector.recursion_base.solution_spec' WittVector.RecursionBase.solution_spec'
+-/
end RecursionBase
@@ -197,6 +219,7 @@ section IsAlgClosed
variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
+#print WittVector.frobeniusRotationCoeff /-
/-- Recursively defines the sequence of coefficients for `witt_vector.frobenius_rotation`.
-/
noncomputable def frobeniusRotationCoeff {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0)
@@ -205,21 +228,27 @@ noncomputable def frobeniusRotationCoeff {aโ aโ : ๐ k} (haโ : aโ.coef
| n + 1 => succNthVal p n aโ aโ (fun i => frobenius_rotation_coeff i.val) haโ haโ
decreasing_by apply Fin.is_lt
#align witt_vector.frobenius_rotation_coeff WittVector.frobeniusRotationCoeff
+-/
+#print WittVector.frobeniusRotation /-
/-- For nonzero `aโ` and `aโ`, `frobenius_rotation aโ aโ` is a Witt vector that satisfies the
equation `frobenius (frobenius_rotation aโ aโ) * aโ = (frobenius_rotation aโ aโ) * aโ`.
-/
def frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) : ๐ k :=
WittVector.mk' p (frobeniusRotationCoeff p haโ haโ)
#align witt_vector.frobenius_rotation WittVector.frobeniusRotation
+-/
+#print WittVector.frobeniusRotation_nonzero /-
theorem frobeniusRotation_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) :
frobeniusRotation p haโ haโ โ 0 := by
intro h
apply solution_nonzero p haโ haโ
simpa [โ h, frobenius_rotation, frobenius_rotation_coeff] using WittVector.zero_coeff p k 0
#align witt_vector.frobenius_rotation_nonzero WittVector.frobeniusRotation_nonzero
+-/
+#print WittVector.frobenius_frobeniusRotation /-
theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) :
frobenius (frobeniusRotation p haโ haโ) * aโ = frobeniusRotation p haโ haโ * aโ :=
by
@@ -240,9 +269,11 @@ theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0
simp only [Fin.val_eq_coe, WittVector.coeff_truncateFun, WittVector.coeff_frobenius_charP]
rfl
#align witt_vector.frobenius_frobenius_rotation WittVector.frobenius_frobeniusRotation
+-/
local notation "ฯ" => IsFractionRing.fieldEquivOfRingEquiv (frobeniusEquiv p k)
+#print WittVector.exists_frobenius_solution_fractionRing_aux /-
theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k) (hr' : r'.coeff 0 โ 0)
(hq' : q'.coeff 0 โ 0) (hq : โp ^ n * q' โ nonZeroDivisors (๐ k)) :
let b : ๐ k := frobeniusRotation p hr' hq'
@@ -271,7 +302,9 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
ring
ยท simp only [RingHom.map_mul, RingHom.map_pow, map_natCast]
#align witt_vector.exists_frobenius_solution_fraction_ring_aux WittVector.exists_frobenius_solution_fractionRing_aux
+-/
+#print WittVector.exists_frobenius_solution_fractionRing /-
theorem exists_frobenius_solution_fractionRing {a : FractionRing (๐ k)} (ha : a โ 0) :
โ (b : FractionRing (๐ k)) (hb : b โ 0) (m : โค), ฯ b * a = p ^ m * b :=
by
@@ -290,6 +323,7 @@ theorem exists_frobenius_solution_fractionRing {a : FractionRing (๐ k)} (ha :
(frobenius_rotation_nonzero p hr' hq')
exact exists_frobenius_solution_fraction_ring_aux p m n r' q' hr' hq' hq
#align witt_vector.exists_frobenius_solution_fraction_ring WittVector.exists_frobenius_solution_fractionRing
+-/
end IsAlgClosed
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -47,7 +47,6 @@ namespace WittVector
variable (p : โ) [hp : Fact p.Prime]
--- mathport name: expr๐
local notation "๐" => WittVector p
namespace RecursionMain
@@ -66,8 +65,6 @@ whose variable represents the `n`th coefficient of `x` in `x * a`.
section CommRing
-include hp
-
variable {k : Type _} [CommRing k] [CharP k p]
open Polynomial
@@ -106,8 +103,6 @@ end CommRing
section IsAlgClosed
-include hp
-
variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
theorem root_exists (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
@@ -153,8 +148,6 @@ end RecursionMain
namespace RecursionBase
-include hp
-
variable {k : Type _} [Field k] [IsAlgClosed k]
theorem solution_pow (aโ aโ : ๐ k) : โ x : k, x ^ (p - 1) = aโ.coeff 0 / aโ.coeff 0 :=
@@ -202,8 +195,6 @@ section FrobeniusRotation
section IsAlgClosed
-include hp
-
variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
/-- Recursively defines the sequence of coefficients for `witt_vector.frobenius_rotation`.
@@ -250,7 +241,6 @@ theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0
rfl
#align witt_vector.frobenius_frobenius_rotation WittVector.frobenius_frobeniusRotation
--- mathport name: exprฯ
local notation "ฯ" => IsFractionRing.fieldEquivOfRingEquiv (frobeniusEquiv p k)
theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k) (hr' : r'.coeff 0 โ 0)
mathlib commit https://github.com/leanprover-community/mathlib/commit/13361559d66b84f80b6d5a1c4a26aa5054766725
@@ -219,7 +219,7 @@ decreasing_by apply Fin.is_lt
equation `frobenius (frobenius_rotation aโ aโ) * aโ = (frobenius_rotation aโ aโ) * aโ`.
-/
def frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) : ๐ k :=
- WittVector.mk p (frobeniusRotationCoeff p haโ haโ)
+ WittVector.mk' p (frobeniusRotationCoeff p haโ haโ)
#align witt_vector.frobenius_rotation WittVector.frobeniusRotation
theorem frobeniusRotation_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -142,7 +142,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succ_nth_val_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succ_nth_defining_poly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
@@ -174,7 +174,7 @@ theorem solution_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (ha
solution p aโ aโ โ 0 := by
intro h
have := solution_spec p aโ aโ
- rw [h, zero_pow] at this
+ rw [h, zero_pow] at this
ยท simpa [haโ, haโ] using _root_.div_eq_zero_iff.mp this.symm
ยท linarith [hp.out.one_lt, le_of_lt hp.out.one_lt]
#align witt_vector.recursion_base.solution_nonzero WittVector.RecursionBase.solution_nonzero
@@ -211,8 +211,8 @@ variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
noncomputable def frobeniusRotationCoeff {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) : โ โ k
| 0 => solution p aโ aโ
- | n + 1 => succNthVal p n aโ aโ (fun i => frobenius_rotation_coeff i.val) haโ haโ decreasing_by
- apply Fin.is_lt
+ | n + 1 => succNthVal p n aโ aโ (fun i => frobenius_rotation_coeff i.val) haโ haโ
+decreasing_by apply Fin.is_lt
#align witt_vector.frobenius_rotation_coeff WittVector.frobeniusRotationCoeff
/-- For nonzero `aโ` and `aโ`, `frobenius_rotation aโ aโ` is a Witt vector that satisfies the
@@ -242,7 +242,7 @@ theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0
have :=
succ_nth_val_spec' p n aโ aโ (fun i : Fin (n + 1) => frobenius_rotation_coeff p haโ haโ i.val)
haโ haโ
- simp only [frobenius_rotation_coeff, Fin.val_eq_coe, Fin.val_zero] at this
+ simp only [frobenius_rotation_coeff, Fin.val_eq_coe, Fin.val_zero] at this
convert this using 4
apply TruncatedWittVector.ext
intro i
@@ -265,7 +265,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
have key : WittVector.frobenius b * p ^ m * r' * p ^ n = p ^ m * b * (p ^ n * q') :=
by
have H := congr_arg (fun x : ๐ k => x * p ^ m * p ^ n) (frobenius_frobenius_rotation p hr' hq')
- dsimp at H
+ dsimp at H
refine' (Eq.trans _ H).trans _ <;> ring
have hq'' : algebraMap (๐ k) (FractionRing (๐ k)) q' โ 0 :=
by
@@ -283,7 +283,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
#align witt_vector.exists_frobenius_solution_fraction_ring_aux WittVector.exists_frobenius_solution_fractionRing_aux
theorem exists_frobenius_solution_fractionRing {a : FractionRing (๐ k)} (ha : a โ 0) :
- โ (b : FractionRing (๐ k))(hb : b โ 0)(m : โค), ฯ b * a = p ^ m * b :=
+ โ (b : FractionRing (๐ k)) (hb : b โ 0) (m : โค), ฯ b * a = p ^ m * b :=
by
revert ha
refine' Localization.induction_on a _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -238,15 +238,15 @@ theorem frobenius_frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0
frobenius_rotation_coeff]
apply solution_spec' _ haโ
ยท simp only [nth_remainder_spec, WittVector.coeff_frobenius_charP, frobenius_rotation_coeff,
- frobenius_rotation, [anonymous]]
+ frobenius_rotation, Fin.val_eq_coe]
have :=
succ_nth_val_spec' p n aโ aโ (fun i : Fin (n + 1) => frobenius_rotation_coeff p haโ haโ i.val)
haโ haโ
- simp only [frobenius_rotation_coeff, [anonymous], Fin.val_zero] at this
+ simp only [frobenius_rotation_coeff, Fin.val_eq_coe, Fin.val_zero] at this
convert this using 4
apply TruncatedWittVector.ext
intro i
- simp only [[anonymous], WittVector.coeff_truncateFun, WittVector.coeff_frobenius_charP]
+ simp only [Fin.val_eq_coe, WittVector.coeff_truncateFun, WittVector.coeff_frobenius_charP]
rfl
#align witt_vector.frobenius_frobenius_rotation WittVector.frobenius_frobeniusRotation
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -140,7 +140,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
by
rw [โ sub_eq_zero]
have := succ_nth_val_spec p n aโ aโ bs haโ haโ
- simp only [Polynomial.map_add, Polynomial.eval_x, Polynomial.map_pow, Polynomial.eval_c,
+ simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succ_nth_defining_poly, Polynomial.eval_mul, Polynomial.eval_add,
Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
convert this using 1
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -74,8 +74,8 @@ open Polynomial
/-- The root of this polynomial determines the `n+1`st coefficient of our solution. -/
def succNthDefiningPoly (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) : Polynomial k :=
- x ^ p * c (aโ.coeff 0 ^ p ^ (n + 1)) - x * c (aโ.coeff 0 ^ p ^ (n + 1)) +
- c
+ X ^ p * C (aโ.coeff 0 ^ p ^ (n + 1)) - X * C (aโ.coeff 0 ^ p ^ (n + 1)) +
+ C
(aโ.coeff (n + 1) * (bs 0 ^ p) ^ p ^ (n + 1) +
nthRemainder p n (fun v => bs v ^ p) (truncateFun (n + 1) aโ) -
aโ.coeff (n + 1) * bs 0 ^ p ^ (n + 1) -
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -132,7 +132,7 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succNthVal_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succNthDefiningPoly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.definition]
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def]
at this
convert this using 1
ring
@@ -259,7 +259,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
refine' (Eq.trans _ H).trans _ <;> ring
have hq'' : algebraMap (๐ k) (FractionRing (๐ k)) q' โ 0 := by
have hq''' : q' โ 0 := fun h => hq' (by simp [h])
- simpa only [Ne.def, map_zero] using
+ simpa only [Ne, map_zero] using
(IsFractionRing.injective (๐ k) (FractionRing (๐ k))).ne hq'''
rw [zpow_subโ (FractionRing.p_nonzero p k)]
field_simp [FractionRing.p_nonzero p k]
@@ -132,7 +132,8 @@ theorem succNthVal_spec' (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k)
have := succNthVal_spec p n aโ aโ bs haโ haโ
simp only [Polynomial.map_add, Polynomial.eval_X, Polynomial.map_pow, Polynomial.eval_C,
Polynomial.eval_pow, succNthDefiningPoly, Polynomial.eval_mul, Polynomial.eval_add,
- Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.def] at this
+ Polynomial.eval_sub, Polynomial.map_mul, Polynomial.map_sub, Polynomial.IsRoot.definition]
+ at this
convert this using 1
ring
#align witt_vector.recursion_main.succ_nth_val_spec' WittVector.RecursionMain.succNthVal_spec'
The termination checker has been getting more capable, and many of the termination_by
or decreasing_by
clauses in Mathlib are no longer needed.
(Note that termination_by?
will show the automatically derived termination expression, so no information is being lost by removing these.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -202,7 +202,6 @@ noncomputable def frobeniusRotationCoeff {aโ aโ : ๐ k} (haโ : aโ.coef
(haโ : aโ.coeff 0 โ 0) : โ โ k
| 0 => solution p aโ aโ
| n + 1 => succNthVal p n aโ aโ (fun i => frobeniusRotationCoeff haโ haโ i.val) haโ haโ
-decreasing_by apply Fin.is_lt
#align witt_vector.frobenius_rotation_coeff WittVector.frobeniusRotationCoeff
/-- For nonzero `aโ` and `aโ`, `frobeniusRotation aโ aโ` is a Witt vector that satisfies the
@@ -33,7 +33,7 @@ This construction is described in Dupuis, Lewis, and Macbeth,
We approximately follow an approach sketched on MathOverflow:
<https://mathoverflow.net/questions/62468/about-frobenius-of-witt-vectors>
-The result is a dependency for the proof of `witt_vector.isocrystal_classification`,
+The result is a dependency for the proof of `WittVector.isocrystal_classification`,
the classification of one-dimensional isocrystals over an algebraically closed field.
-/
@@ -54,7 +54,7 @@ namespace RecursionMain
The first coefficient of our solution vector is easy to define below.
In this section we focus on the recursive case.
-The goal is to turn `witt_poly_prod n` into a univariate polynomial
+The goal is to turn `WittVector.wittPolyProd n` into a univariate polynomial
whose variable represents the `n`th coefficient of `x` in `x * a`.
-/
@@ -205,8 +205,8 @@ noncomputable def frobeniusRotationCoeff {aโ aโ : ๐ k} (haโ : aโ.coef
decreasing_by apply Fin.is_lt
#align witt_vector.frobenius_rotation_coeff WittVector.frobeniusRotationCoeff
-/-- For nonzero `aโ` and `aโ`, `frobenius_rotation aโ aโ` is a Witt vector that satisfies the
-equation `frobenius (frobenius_rotation aโ aโ) * aโ = (frobenius_rotation aโ aโ) * aโ`.
+/-- For nonzero `aโ` and `aโ`, `frobeniusRotation aโ aโ` is a Witt vector that satisfies the
+equation `frobenius (frobeniusRotation aโ aโ) * aโ = (frobeniusRotation aโ aโ) * aโ`.
-/
def frobeniusRotation {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (haโ : aโ.coeff 0 โ 0) : ๐ k :=
WittVector.mk p (frobeniusRotationCoeff p haโ haโ)
@@ -272,8 +272,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
#align witt_vector.exists_frobenius_solution_fraction_ring_aux WittVector.exists_frobenius_solution_fractionRing_aux
theorem exists_frobenius_solution_fractionRing {a : FractionRing (๐ k)} (ha : a โ 0) :
- โ (b : FractionRing (๐ k)) (_ : b โ 0) (m : โค),
- ฯ b * a = (p : FractionRing (๐ k)) ^ m * b := by
+ โแต (b โ 0) (m : โค), ฯ b * a = (p : FractionRing (๐ k)) ^ m * b := by
revert ha
refine' Localization.induction_on a _
rintro โจr, q, hqโฉ hrq
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n โ 0
.
From LeanAPAP
@@ -169,7 +169,7 @@ theorem solution_nonzero {aโ aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (ha
ยท simpa [haโ, haโ] using _root_.div_eq_zero_iff.mp this.symm
ยท -- Porting note: was
-- linarith [hp.out.one_lt, le_of_lt hp.out.one_lt]
- exact tsub_pos_of_lt hp.out.one_lt
+ exact Nat.sub_ne_zero_of_lt hp.out.one_lt
#align witt_vector.recursion_base.solution_nonzero WittVector.RecursionBase.solution_nonzero
theorem solution_spec' {aโ : ๐ k} (haโ : aโ.coeff 0 โ 0) (aโ : ๐ k) :
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -87,12 +87,12 @@ theorem succNthDefiningPoly_degree [IsDomain k] (n : โ) (aโ aโ : ๐ k) (
(p : WithBot โ) := by
rw [degree_sub_eq_left_of_degree_lt, this]
rw [this, degree_mul, degree_C, degree_X, add_zero]
- ยท exact_mod_cast hp.out.one_lt
+ ยท exact mod_cast hp.out.one_lt
ยท exact pow_ne_zero _ haโ
rw [succNthDefiningPoly, degree_add_eq_left_of_degree_lt, this]
apply lt_of_le_of_lt degree_C_le
rw [this]
- exact_mod_cast hp.out.pos
+ exact mod_cast hp.out.pos
#align witt_vector.recursion_main.succ_nth_defining_poly_degree WittVector.RecursionMain.succNthDefiningPoly_degree
end CommRing
@@ -272,7 +272,7 @@ theorem exists_frobenius_solution_fractionRing_aux (m n : โ) (r' q' : ๐ k)
#align witt_vector.exists_frobenius_solution_fraction_ring_aux WittVector.exists_frobenius_solution_fractionRing_aux
theorem exists_frobenius_solution_fractionRing {a : FractionRing (๐ k)} (ha : a โ 0) :
- โ (b : FractionRing (๐ k)) (hb : b โ 0) (m : โค),
+ โ (b : FractionRing (๐ k)) (_ : b โ 0) (m : โค),
ฯ b * a = (p : FractionRing (๐ k)) ^ m * b := by
revert ha
refine' Localization.induction_on a _
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -62,7 +62,7 @@ whose variable represents the `n`th coefficient of `x` in `x * a`.
section CommRing
-variable {k : Type _} [CommRing k] [CharP k p]
+variable {k : Type*} [CommRing k] [CharP k p]
open Polynomial
@@ -99,7 +99,7 @@ end CommRing
section IsAlgClosed
-variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
+variable {k : Type*} [Field k] [CharP k p] [IsAlgClosed k]
theorem root_exists (n : โ) (aโ aโ : ๐ k) (bs : Fin (n + 1) โ k) (haโ : aโ.coeff 0 โ 0)
(haโ : aโ.coeff 0 โ 0) : โ b : k, (succNthDefiningPoly p n aโ aโ bs).IsRoot b :=
@@ -143,7 +143,7 @@ end RecursionMain
namespace RecursionBase
-variable {k : Type _} [Field k] [IsAlgClosed k]
+variable {k : Type*} [Field k] [IsAlgClosed k]
theorem solution_pow (aโ aโ : ๐ k) : โ x : k, x ^ (p - 1) = aโ.coeff 0 / aโ.coeff 0 :=
IsAlgClosed.exists_pow_nat_eq _ <|
@@ -194,7 +194,7 @@ section FrobeniusRotation
section IsAlgClosed
-variable {k : Type _} [Field k] [CharP k p] [IsAlgClosed k]
+variable {k : Type*} [Field k] [CharP k p] [IsAlgClosed k]
/-- Recursively defines the sequence of coefficients for `WittVector.frobeniusRotation`.
-/
@@ -2,16 +2,13 @@
Copyright (c) 2022 Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Y. Lewis, Heather Macbeth
-
-! This file was ported from Lean 3 source module ring_theory.witt_vector.frobenius_fraction_field
-! leanprover-community/mathlib commit cead93130da7100f8a9fe22ee210f7636a91168f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Nat.Cast.WithTop
import Mathlib.FieldTheory.IsAlgClosed.Basic
import Mathlib.RingTheory.WittVector.DiscreteValuationRing
+#align_import ring_theory.witt_vector.frobenius_fraction_field from "leanprover-community/mathlib"@"cead93130da7100f8a9fe22ee210f7636a91168f"
+
/-!
# Solving equations about the Frobenius map on the field of fractions of `๐ k`
@@ -28,7 +28,7 @@ The construction proceeds by recursively defining a sequence of coefficients as
polynomial equation in `k`. We must define these as generic polynomials using Witt vector API
(`WittVector.wittMul`, `wittPolynomial`) to show that they satisfy the desired equation.
-Preliminary work is done in the dependency `ring_theory.witt_vector.mul_coeff`
+Preliminary work is done in the dependency `RingTheory.WittVector.MulCoeff`
to isolate the `n+1`st coefficients of `x` and `y` in the `n+1`st coefficient of `x*y`.
This construction is described in Dupuis, Lewis, and Macbeth,
The unported dependencies are