ring_theory.witt_vector.frobenius_fraction_field โŸท Mathlib.RingTheory.WittVector.FrobeniusFractionField

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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'
Diff
@@ -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'
 -/
Diff
@@ -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
Diff
@@ -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"
 
Diff
@@ -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`
 
Diff
@@ -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`,
Diff
@@ -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
 
Diff
@@ -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)
Diff
@@ -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) :
Diff
@@ -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 _
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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) -

Changes in mathlib4

mathlib3
mathlib4
chore: rename IsRoot.definition back to IsRoot.def (#11999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11813)
Diff
@@ -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]
chore: rename away from 'def' (#11548)

This will become an error in 2024-03-16 nightly, possibly not permanently.

Co-authored-by: Scott Morrison <scott@tqft.net>

Diff
@@ -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'
chore: remove unneeded decreasing_by and termination_by (#11386)

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>

Diff
@@ -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
chore: tidy various files (#10453)
Diff
@@ -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โ‚‚)
chore: tidy various files (#10362)
Diff
@@ -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
feat: The support of 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

Diff
@@ -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) :
chore: replace 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>

Diff
@@ -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
perf(FunLike.Basic): beta reduce CoeFun.coe (#7905)

This eliminates (fun a โ†ฆ ฮฒ) ฮฑ in the type when applying a FunLike.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -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 _
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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`.
 -/
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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`
 
fix: filenames with typos in doc (#5836)
Diff
@@ -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,
feat: port RingTheory.WittVector.FrobeniusFractionField (#5561)

Dependencies 10 + 713

714 files ported (98.6%)
289568 lines ported (98.8%)
Show graph

The unported dependencies are