field_theory.perfect_closureMathlib.FieldTheory.PerfectClosure

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -442,8 +442,8 @@ theorem mk_eq_iff (x y : ℕ × K) :
 #align perfect_closure.eq_iff' PerfectClosure.mk_eq_iff
 -/
 
-#print PerfectClosure.nat_cast /-
-theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
+#print PerfectClosure.natCast /-
+theorem natCast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
   induction' n with n ih
   · induction' x with x ih; · simp
@@ -453,26 +453,26 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
     congr
     skip
     skip
-    rw [← frobenius_nat_cast K p x]
+    rw [← frobenius_natCast K p x]
   apply r.intro
-#align perfect_closure.nat_cast PerfectClosure.nat_cast
+#align perfect_closure.nat_cast PerfectClosure.natCast
 -/
 
-#print PerfectClosure.int_cast /-
-theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
+#print PerfectClosure.intCast /-
+theorem intCast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
   induction x <;> simp only [Int.cast_natCast, Int.cast_negSucc, nat_cast K p 0] <;> rfl
-#align perfect_closure.int_cast PerfectClosure.int_cast
+#align perfect_closure.int_cast PerfectClosure.intCast
 -/
 
-#print PerfectClosure.nat_cast_eq_iff /-
-theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
+#print PerfectClosure.natCast_eq_iff /-
+theorem natCast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
   · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H
     cases' H with z H
-    simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
+    simpa only [zero_add, iterate_fixed (frobenius_natCast K p _)] using H
   rw [nat_cast K p 0, nat_cast K p 0, H]
-#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iff
+#align perfect_closure.nat_cast_eq_iff PerfectClosure.natCast_eq_iff
 -/
 
 instance : CharP (PerfectClosure K p) p := by
Diff
@@ -460,7 +460,7 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
 
 #print PerfectClosure.int_cast /-
 theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
-  induction x <;> simp only [Int.cast_ofNat, Int.cast_negSucc, nat_cast K p 0] <;> rfl
+  induction x <;> simp only [Int.cast_natCast, Int.cast_negSucc, nat_cast K p 0] <;> rfl
 #align perfect_closure.int_cast PerfectClosure.int_cast
 -/
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
 -/
 import Algebra.CharP.Basic
-import Algebra.Hom.Iterate
+import Algebra.GroupPower.IterateHom
 import Algebra.Ring.Equiv
 
 #align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"c085f3044fe585c575e322bfab45b3633c48d820"
@@ -489,10 +489,10 @@ theorem frobenius_mk (x : ℕ × K) :
   intro p; induction' p with p ih
   case zero => apply r.sound; rw [(frobenius _ _).iterate_map_one, pow_zero]
   case succ =>
-    rw [pow_succ, ih]
+    rw [pow_succ', ih]
     symm
     apply r.sound
-    simp only [pow_succ, (frobenius _ _).iterate_map_hMul]
+    simp only [pow_succ', (frobenius _ _).iterate_map_hMul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 -/
 
Diff
@@ -348,7 +348,7 @@ theorem mk_zero_zero : mk K p (0, 0) = 0 :=
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
   induction' n with n ih <;> [rfl; rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
-    rwa [frobenius_zero K p] at this 
+    rwa [frobenius_zero K p] at this
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 -/
 
@@ -436,7 +436,7 @@ theorem mk_eq_iff (x y : ℕ × K) :
   intro H
   cases' x with m x
   cases' y with n y
-  cases' H with z H; dsimp only at H 
+  cases' H with z H; dsimp only at H
   rw [r.sound K p (n + z) m x _ rfl, r.sound K p (m + z) n y _ rfl, H]
   rw [add_assoc, add_comm, add_comm z]
 #align perfect_closure.eq_iff' PerfectClosure.mk_eq_iff
@@ -468,7 +468,7 @@ theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
-  · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H 
+  · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H
     cases' H with z H
     simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
   rw [nat_cast K p 0, nat_cast K p 0, H]
Diff
@@ -414,8 +414,8 @@ instance : CommRing (PerfectClosure K p) :=
                 simp only [RingHom.iterate_map_hMul, RingHom.iterate_map_add, ← iterate_add_apply,
                   add_mul, add_comm, add_left_comm] }
 
-#print PerfectClosure.eq_iff' /-
-theorem eq_iff' (x y : ℕ × K) :
+#print PerfectClosure.mk_eq_iff /-
+theorem mk_eq_iff (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
   by
   constructor
@@ -439,7 +439,7 @@ theorem eq_iff' (x y : ℕ × K) :
   cases' H with z H; dsimp only at H 
   rw [r.sound K p (n + z) m x _ rfl, r.sound K p (m + z) n y _ rfl, H]
   rw [add_assoc, add_comm, add_comm z]
-#align perfect_closure.eq_iff' PerfectClosure.eq_iff'
+#align perfect_closure.eq_iff' PerfectClosure.mk_eq_iff
 -/
 
 #print PerfectClosure.nat_cast /-
@@ -518,7 +518,7 @@ end Ring
 #print PerfectClosure.eq_iff /-
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
-  (eq_iff' K p x y).trans
+  (mk_eq_iff K p x y).trans
     ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
       fun H => ⟨0, H⟩⟩
 #align perfect_closure.eq_iff PerfectClosure.eq_iff
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2018 Kenny Lau. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
 -/
-import Mathbin.Algebra.CharP.Basic
-import Mathbin.Algebra.Hom.Iterate
-import Mathbin.Algebra.Ring.Equiv
+import Algebra.CharP.Basic
+import Algebra.Hom.Iterate
+import Algebra.Ring.Equiv
 
 #align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"c085f3044fe585c575e322bfab45b3633c48d820"
 
Diff
@@ -231,9 +231,9 @@ instance : Mul (PerfectClosure K p) :=
         Quot.lift
           (fun y : ℕ × K =>
             mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 * (frobenius K p^[x.1]) y.2))
-          (mul_aux_right K p x))
+          (hMul_aux_right K p x))
       fun x1 x2 (H : R K p x1 x2) =>
-      funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
+      funext fun e => Quot.inductionOn e fun y => hMul_aux_left K p x1 x2 y H⟩
 
 #print PerfectClosure.mk_mul_mk /-
 @[simp]
@@ -255,7 +255,7 @@ instance : CommMonoid (PerfectClosure K p) :=
         Quot.inductionOn f fun ⟨n, y⟩ =>
           Quot.inductionOn g fun ⟨s, z⟩ =>
             congr_arg (Quot.mk _) <| by
-              simp only [add_assoc, mul_assoc, RingHom.iterate_map_mul, ← iterate_add_apply,
+              simp only [add_assoc, mul_assoc, RingHom.iterate_map_hMul, ← iterate_add_apply,
                 add_comm, add_left_comm]
     one := mk K p (0, 1)
     one_mul := fun e =>
@@ -403,7 +403,7 @@ instance : CommRing (PerfectClosure K p) :=
           Quot.inductionOn g fun ⟨s, z⟩ =>
             show Quot.mk _ _ = Quot.mk _ _ by
               simp only [add_assoc, add_comm, add_left_comm] <;> apply r.sound <;>
-                simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
+                simp only [RingHom.iterate_map_hMul, RingHom.iterate_map_add, ← iterate_add_apply,
                   mul_add, add_comm, add_left_comm]
     right_distrib := fun e f g =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
@@ -411,7 +411,7 @@ instance : CommRing (PerfectClosure K p) :=
           Quot.inductionOn g fun ⟨s, z⟩ =>
             show Quot.mk _ _ = Quot.mk _ _ by
               simp only [add_assoc, add_comm _ s, add_left_comm _ s] <;> apply r.sound <;>
-                simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
+                simp only [RingHom.iterate_map_hMul, RingHom.iterate_map_add, ← iterate_add_apply,
                   add_mul, add_comm, add_left_comm] }
 
 #print PerfectClosure.eq_iff' /-
@@ -492,7 +492,7 @@ theorem frobenius_mk (x : ℕ × K) :
     rw [pow_succ, ih]
     symm
     apply r.sound
-    simp only [pow_succ, (frobenius _ _).iterate_map_mul]
+    simp only [pow_succ, (frobenius _ _).iterate_map_hMul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 -/
 
@@ -547,7 +547,7 @@ instance : Field (PerfectClosure K p) :=
         (eq_iff _ _ _ _).2
           (by
             simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
-                iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this ⊢ <;>
+                iterate_zero_apply, ← (frobenius _ p).iterate_map_hMul] at this ⊢ <;>
               rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one])
     inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
 
@@ -591,7 +591,7 @@ def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
     field map_mul' =>
       rintro ⟨x⟩ ⟨y⟩
       simp only [quot_mk_eq_mk, lift_on_mk, mk_mul_mk, RingHom.map_iterate_frobenius,
-        RingHom.iterate_map_mul, RingHom.map_mul]
+        RingHom.iterate_map_hMul, RingHom.map_mul]
       rw [iterate_add_apply, this _ _, add_comm, iterate_add_apply, this _ _]
     field map_add' =>
       rintro ⟨x⟩ ⟨y⟩
Diff
@@ -44,12 +44,10 @@ def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
 #align frobenius_equiv frobeniusEquiv
 -/
 
-#print pthRoot /-
 /-- `p`-th root of an element in a `perfect_ring` as a `ring_hom`. -/
 def pthRoot [PerfectRing R p] : R →+* R :=
   (frobeniusEquiv R p).symm
 #align pth_root pthRoot
--/
 
 end Defs
 
@@ -65,96 +63,68 @@ theorem coe_frobeniusEquiv : ⇑(frobeniusEquiv R p) = frobenius R p :=
 #align coe_frobenius_equiv coe_frobeniusEquiv
 -/
 
-#print coe_frobeniusEquiv_symm /-
 @[simp]
 theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
   rfl
 #align coe_frobenius_equiv_symm coe_frobeniusEquiv_symm
--/
 
-#print frobenius_pthRoot /-
 @[simp]
 theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
   (frobeniusEquiv R p).apply_symm_apply x
 #align frobenius_pth_root frobenius_pthRoot
--/
 
-#print pthRoot_pow_p /-
 @[simp]
 theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
   frobenius_pthRoot x
 #align pth_root_pow_p pthRoot_pow_p
--/
 
-#print pthRoot_frobenius /-
 @[simp]
 theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
   (frobeniusEquiv R p).symm_apply_apply x
 #align pth_root_frobenius pthRoot_frobenius
--/
 
-#print pthRoot_pow_p' /-
 @[simp]
 theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
   pthRoot_frobenius x
 #align pth_root_pow_p' pthRoot_pow_p'
--/
 
-#print leftInverse_pthRoot_frobenius /-
 theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
   pthRoot_frobenius
 #align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobenius
--/
 
-#print rightInverse_pthRoot_frobenius /-
 theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
   frobenius_pthRoot
 #align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobenius
--/
 
-#print commute_frobenius_pthRoot /-
 theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
   (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
 #align commute_frobenius_pth_root commute_frobenius_pthRoot
--/
 
-#print eq_pthRoot_iff /-
 theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
   (frobeniusEquiv R p).toEquiv.eq_symm_apply
 #align eq_pth_root_iff eq_pthRoot_iff
--/
 
-#print pthRoot_eq_iff /-
 theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
   (frobeniusEquiv R p).toEquiv.symm_apply_eq
 #align pth_root_eq_iff pthRoot_eq_iff
--/
 
-#print MonoidHom.map_pthRoot /-
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
--/
 
-#print MonoidHom.map_iterate_pthRoot /-
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
   Semiconj.iterate_right f.map_pthRoot n x
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
--/
 
-#print RingHom.map_pthRoot /-
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
 #align ring_hom.map_pth_root RingHom.map_pthRoot
--/
 
-#print RingHom.map_iterate_pthRoot /-
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
   g.toMonoidHom.map_iterate_pthRoot x n
 #align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRoot
--/
 
 variable (p)
 
@@ -594,14 +564,12 @@ instance : PerfectRing (PerfectClosure K p) p
     induction_on e fun ⟨n, x⟩ => by simp only [lift_on_mk, frobenius_mk];
       exact (Quot.sound <| r.intro _ _).symm
 
-#print PerfectClosure.eq_pthRoot /-
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
   rcases x with ⟨m, x⟩
   induction' m with m ih; · rfl
   rw [iterate_succ_apply', ← ih] <;> rfl
 #align perfect_closure.eq_pth_root PerfectClosure.eq_pthRoot
--/
 
 #print PerfectClosure.lift /-
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2018 Kenny Lau. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
-
-! This file was ported from Lean 3 source module field_theory.perfect_closure
-! leanprover-community/mathlib commit c085f3044fe585c575e322bfab45b3633c48d820
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.CharP.Basic
 import Mathbin.Algebra.Hom.Iterate
 import Mathbin.Algebra.Ring.Equiv
 
+#align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"c085f3044fe585c575e322bfab45b3633c48d820"
+
 /-!
 # The perfect closure of a field
 
Diff
@@ -37,6 +37,7 @@ class PerfectRing : Type u where
 #align perfect_ring PerfectRing
 -/
 
+#print frobeniusEquiv /-
 /-- Frobenius automorphism of a perfect ring. -/
 def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
   { frobenius R p with
@@ -44,6 +45,7 @@ def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
     left_inv := PerfectRing.pth_root_frobenius'
     right_inv := PerfectRing.frobenius_pthRoot' }
 #align frobenius_equiv frobeniusEquiv
+-/
 
 #print pthRoot /-
 /-- `p`-th root of an element in a `perfect_ring` as a `ring_hom`. -/
@@ -73,63 +75,89 @@ theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
 #align coe_frobenius_equiv_symm coe_frobeniusEquiv_symm
 -/
 
+#print frobenius_pthRoot /-
 @[simp]
 theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
   (frobeniusEquiv R p).apply_symm_apply x
 #align frobenius_pth_root frobenius_pthRoot
+-/
 
+#print pthRoot_pow_p /-
 @[simp]
 theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
   frobenius_pthRoot x
 #align pth_root_pow_p pthRoot_pow_p
+-/
 
+#print pthRoot_frobenius /-
 @[simp]
 theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
   (frobeniusEquiv R p).symm_apply_apply x
 #align pth_root_frobenius pthRoot_frobenius
+-/
 
+#print pthRoot_pow_p' /-
 @[simp]
 theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
   pthRoot_frobenius x
 #align pth_root_pow_p' pthRoot_pow_p'
+-/
 
+#print leftInverse_pthRoot_frobenius /-
 theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
   pthRoot_frobenius
 #align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobenius
+-/
 
+#print rightInverse_pthRoot_frobenius /-
 theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
   frobenius_pthRoot
 #align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobenius
+-/
 
+#print commute_frobenius_pthRoot /-
 theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
   (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
 #align commute_frobenius_pth_root commute_frobenius_pthRoot
+-/
 
+#print eq_pthRoot_iff /-
 theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
   (frobeniusEquiv R p).toEquiv.eq_symm_apply
 #align eq_pth_root_iff eq_pthRoot_iff
+-/
 
+#print pthRoot_eq_iff /-
 theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
   (frobeniusEquiv R p).toEquiv.symm_apply_eq
 #align pth_root_eq_iff pthRoot_eq_iff
+-/
 
+#print MonoidHom.map_pthRoot /-
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
+-/
 
+#print MonoidHom.map_iterate_pthRoot /-
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
   Semiconj.iterate_right f.map_pthRoot n x
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
+-/
 
+#print RingHom.map_pthRoot /-
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
 #align ring_hom.map_pth_root RingHom.map_pthRoot
+-/
 
+#print RingHom.map_iterate_pthRoot /-
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
   g.toMonoidHom.map_iterate_pthRoot x n
 #align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRoot
+-/
 
 variable (p)
 
@@ -145,16 +173,20 @@ section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
+#print PerfectClosure.R /-
 /-- `perfect_closure K p` is the quotient by this relation. -/
 @[mk_iff]
 inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
   | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
 #align perfect_closure.r PerfectClosure.R
+-/
 
+#print PerfectClosure /-
 /-- The perfect closure is the smallest extension that makes frobenius surjective. -/
 def PerfectClosure : Type u :=
   Quot (PerfectClosure.R K p)
 #align perfect_closure PerfectClosure
+-/
 
 end
 
@@ -166,36 +198,46 @@ section Ring
 
 variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
+#print PerfectClosure.mk /-
 /-- Constructor for `perfect_closure`. -/
 def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
+-/
 
+#print PerfectClosure.quot_mk_eq_mk /-
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
   rfl
 #align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mk
+-/
 
 variable {K p}
 
+#print PerfectClosure.liftOn /-
 /-- Lift a function `ℕ × K → L` to a function on `perfect_closure K p`. -/
 @[elab_as_elim]
 def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
     (hf : ∀ x y, R K p x y → f x = f y) : L :=
   Quot.liftOn x f hf
 #align perfect_closure.lift_on PerfectClosure.liftOn
+-/
 
+#print PerfectClosure.liftOn_mk /-
 @[simp]
 theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y → f x = f y) (x : ℕ × K) :
     (mk K p x).liftOn f hf = f x :=
   rfl
 #align perfect_closure.lift_on_mk PerfectClosure.liftOn_mk
+-/
 
+#print PerfectClosure.induction_on /-
 @[elab_as_elim]
 theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
     (h : ∀ x, q (mk K p x)) : q x :=
   Quot.inductionOn x h
 #align perfect_closure.induction_on PerfectClosure.induction_on
+-/
 
 variable (K p)
 
@@ -226,12 +268,14 @@ instance : Mul (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
 
+#print PerfectClosure.mk_mul_mk /-
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
     mk K p x * mk K p y =
       mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 * (frobenius K p^[x.1]) y.2) :=
   rfl
 #align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mk
+-/
 
 instance : CommMonoid (PerfectClosure K p) :=
   {
@@ -260,9 +304,11 @@ instance : CommMonoid (PerfectClosure K p) :=
         Quot.inductionOn f fun ⟨n, y⟩ =>
           congr_arg (Quot.mk _) <| by simp only [add_comm, mul_comm] }
 
+#print PerfectClosure.one_def /-
 theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) :=
   rfl
 #align perfect_closure.one_def PerfectClosure.one_def
+-/
 
 instance : Inhabited (PerfectClosure K p) :=
   ⟨1⟩
@@ -294,41 +340,52 @@ instance : Add (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => add_aux_left K p x1 x2 y H⟩
 
+#print PerfectClosure.mk_add_mk /-
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
     mk K p x + mk K p y =
       mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 + (frobenius K p^[x.1]) y.2) :=
   rfl
 #align perfect_closure.mk_add_mk PerfectClosure.mk_add_mk
+-/
 
 instance : Neg (PerfectClosure K p) :=
   ⟨Quot.lift (fun x : ℕ × K => mk K p (x.1, -x.2)) fun x y (H : R K p x y) =>
       match x, y, H with
       | _, _, r.intro n x => Quot.sound <| by rw [← frobenius_neg] <;> apply r.intro⟩
 
+#print PerfectClosure.neg_mk /-
 @[simp]
 theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
   rfl
 #align perfect_closure.neg_mk PerfectClosure.neg_mk
+-/
 
 instance : Zero (PerfectClosure K p) :=
   ⟨mk K p (0, 0)⟩
 
+#print PerfectClosure.zero_def /-
 theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) :=
   rfl
 #align perfect_closure.zero_def PerfectClosure.zero_def
+-/
 
+#print PerfectClosure.mk_zero_zero /-
 @[simp]
 theorem mk_zero_zero : mk K p (0, 0) = 0 :=
   rfl
 #align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zero
+-/
 
+#print PerfectClosure.mk_zero /-
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
   induction' n with n ih <;> [rfl; rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
     rwa [frobenius_zero K p] at this 
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
+-/
 
+#print PerfectClosure.R.sound /-
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
   subst H <;> induction' m with m ih <;> [simp only [zero_add, iterate_zero_apply];
@@ -336,6 +393,7 @@ theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
       apply Quot.sound <;>
     apply r.intro
 #align perfect_closure.r.sound PerfectClosure.R.sound
+-/
 
 instance : AddCommGroup (PerfectClosure K p) :=
   { (inferInstance : Add (PerfectClosure K p)),
@@ -389,6 +447,7 @@ instance : CommRing (PerfectClosure K p) :=
                 simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
                   add_mul, add_comm, add_left_comm] }
 
+#print PerfectClosure.eq_iff' /-
 theorem eq_iff' (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
   by
@@ -414,7 +473,9 @@ theorem eq_iff' (x y : ℕ × K) :
   rw [r.sound K p (n + z) m x _ rfl, r.sound K p (m + z) n y _ rfl, H]
   rw [add_assoc, add_comm, add_comm z]
 #align perfect_closure.eq_iff' PerfectClosure.eq_iff'
+-/
 
+#print PerfectClosure.nat_cast /-
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
   induction' n with n ih
@@ -428,11 +489,15 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
     rw [← frobenius_nat_cast K p x]
   apply r.intro
 #align perfect_closure.nat_cast PerfectClosure.nat_cast
+-/
 
+#print PerfectClosure.int_cast /-
 theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
   induction x <;> simp only [Int.cast_ofNat, Int.cast_negSucc, nat_cast K p 0] <;> rfl
 #align perfect_closure.int_cast PerfectClosure.int_cast
+-/
 
+#print PerfectClosure.nat_cast_eq_iff /-
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
@@ -441,11 +506,13 @@ theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) =
     simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
   rw [nat_cast K p 0, nat_cast K p 0, H]
 #align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iff
+-/
 
 instance : CharP (PerfectClosure K p) p := by
   constructor; intro x; rw [← CharP.cast_eq_zero_iff K]
   rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
 
+#print PerfectClosure.frobenius_mk /-
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
       mk _ _ (x.1, x.2 ^ p) :=
@@ -460,7 +527,9 @@ theorem frobenius_mk (x : ℕ × K) :
     apply r.sound
     simp only [pow_succ, (frobenius _ _).iterate_map_mul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
+-/
 
+#print PerfectClosure.of /-
 /-- Embedding of `K` into `perfect_closure K p` -/
 def of : K →+* PerfectClosure K p where
   toFun x := mk _ _ (0, x)
@@ -469,19 +538,24 @@ def of : K →+* PerfectClosure K p where
   map_zero' := rfl
   map_add' x y := rfl
 #align perfect_closure.of PerfectClosure.of
+-/
 
+#print PerfectClosure.of_apply /-
 theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
 #align perfect_closure.of_apply PerfectClosure.of_apply
+-/
 
 end Ring
 
+#print PerfectClosure.eq_iff /-
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
   (eq_iff' K p x y).trans
     ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
       fun H => ⟨0, H⟩⟩
 #align perfect_closure.eq_iff PerfectClosure.eq_iff
+-/
 
 section Field
 
@@ -523,13 +597,16 @@ instance : PerfectRing (PerfectClosure K p) p
     induction_on e fun ⟨n, x⟩ => by simp only [lift_on_mk, frobenius_mk];
       exact (Quot.sound <| r.intro _ _).symm
 
+#print PerfectClosure.eq_pthRoot /-
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
   rcases x with ⟨m, x⟩
   induction' m with m ih; · rfl
   rw [iterate_succ_apply', ← ih] <;> rfl
 #align perfect_closure.eq_pth_root PerfectClosure.eq_pthRoot
+-/
 
+#print PerfectClosure.lift /-
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `perfect_closure K p`. -/
 def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
@@ -563,11 +640,13 @@ def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
     simp only [RingHom.coe_mk, quot_mk_eq_mk, RingHom.comp_apply, lift_on_mk]
     rw [eq_pth_root, RingHom.map_iterate_pthRoot]
 #align perfect_closure.lift PerfectClosure.lift
+-/
 
 end Field
 
 end PerfectClosure
 
+#print PerfectRing.ofSurjective /-
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
 noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
     [Fact p.Prime] [CharP k p] (h : Function.Surjective <| frobenius k p) : PerfectRing k p
@@ -576,4 +655,5 @@ noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced
   frobenius_pthRoot' := Function.surjInv_eq h
   pth_root_frobenius' x := frobenius_inj _ _ <| Function.surjInv_eq h _
 #align perfect_ring.of_surjective PerfectRing.ofSurjective
+-/
 
Diff
@@ -324,15 +324,15 @@ theorem mk_zero_zero : mk K p (0, 0) = 0 :=
 #align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zero
 
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
-  induction' n with n ih <;> [rfl;rw [← ih]] <;> symm <;> apply Quot.sound <;>
+  induction' n with n ih <;> [rfl; rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
-    rwa [frobenius_zero K p] at this
+    rwa [frobenius_zero K p] at this 
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
-  subst H <;> induction' m with m ih <;>
-        [simp only [zero_add, iterate_zero_apply];rw [ih, Nat.succ_add, iterate_succ']] <;>
+  subst H <;> induction' m with m ih <;> [simp only [zero_add, iterate_zero_apply];
+        rw [ih, Nat.succ_add, iterate_succ']] <;>
       apply Quot.sound <;>
     apply r.intro
 #align perfect_closure.r.sound PerfectClosure.R.sound
@@ -410,7 +410,7 @@ theorem eq_iff' (x y : ℕ × K) :
   intro H
   cases' x with m x
   cases' y with n y
-  cases' H with z H; dsimp only at H
+  cases' H with z H; dsimp only at H 
   rw [r.sound K p (n + z) m x _ rfl, r.sound K p (m + z) n y _ rfl, H]
   rw [add_assoc, add_comm, add_comm z]
 #align perfect_closure.eq_iff' PerfectClosure.eq_iff'
@@ -436,7 +436,7 @@ theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
-  · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H
+  · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H 
     cases' H with z H
     simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
   rw [nat_cast K p 0, nat_cast K p 0, H]
@@ -506,7 +506,7 @@ instance : Field (PerfectClosure K p) :=
         (eq_iff _ _ _ _).2
           (by
             simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
-                iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this⊢ <;>
+                iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this ⊢ <;>
               rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one])
     inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
 
Diff
@@ -37,12 +37,6 @@ class PerfectRing : Type u where
 #align perfect_ring PerfectRing
 -/
 
-/- warning: frobenius_equiv -> frobeniusEquiv is a dubious translation:
-lean 3 declaration is
-  forall (R : Type.{u1}) [_inst_1 : CommSemiring.{u1} R] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_4 : PerfectRing.{u1} R _inst_1 p _inst_2 _inst_3], RingEquiv.{u1, u1} R R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))
-but is expected to have type
-  forall (R : Type.{u1}) [_inst_1 : CommSemiring.{u1} R] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_4 : PerfectRing.{u1} R _inst_1 p _inst_2 _inst_3], RingEquiv.{u1, u1} R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align frobenius_equiv frobeniusEquivₓ'. -/
 /-- Frobenius automorphism of a perfect ring. -/
 def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
   { frobenius R p with
@@ -79,125 +73,59 @@ theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
 #align coe_frobenius_equiv_symm coe_frobeniusEquiv_symm
 -/
 
-/- warning: frobenius_pth_root -> frobenius_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
-Case conversion may be inaccurate. Consider using '#align frobenius_pth_root frobenius_pthRootₓ'. -/
 @[simp]
 theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
   (frobeniusEquiv R p).apply_symm_apply x
 #align frobenius_pth_root frobenius_pthRoot
 
-/- warning: pth_root_pow_p -> pthRoot_pow_p is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (MonoidWithZero.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (Semiring.toMonoidWithZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (CommSemiring.toSemiring.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) _inst_1))))) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
-Case conversion may be inaccurate. Consider using '#align pth_root_pow_p pthRoot_pow_pₓ'. -/
 @[simp]
 theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
   frobenius_pthRoot x
 #align pth_root_pow_p pthRoot_pow_p
 
-/- warning: pth_root_frobenius -> pthRoot_frobenius is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
-Case conversion may be inaccurate. Consider using '#align pth_root_frobenius pthRoot_frobeniusₓ'. -/
 @[simp]
 theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
   (frobeniusEquiv R p).symm_apply_apply x
 #align pth_root_frobenius pthRoot_frobenius
 
-/- warning: pth_root_pow_p' -> pthRoot_pow_p' is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
-Case conversion may be inaccurate. Consider using '#align pth_root_pow_p' pthRoot_pow_p'ₓ'. -/
 @[simp]
 theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
   pthRoot_frobenius x
 #align pth_root_pow_p' pthRoot_pow_p'
 
-/- warning: left_inverse_pth_root_frobenius -> leftInverse_pthRoot_frobenius is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
-Case conversion may be inaccurate. Consider using '#align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobeniusₓ'. -/
 theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
   pthRoot_frobenius
 #align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobenius
 
-/- warning: right_inverse_pth_root_frobenius -> rightInverse_pthRoot_frobenius is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
-Case conversion may be inaccurate. Consider using '#align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobeniusₓ'. -/
 theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
   frobenius_pthRoot
 #align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobenius
 
-/- warning: commute_frobenius_pth_root -> commute_frobenius_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
-Case conversion may be inaccurate. Consider using '#align commute_frobenius_pth_root commute_frobenius_pthRootₓ'. -/
 theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
   (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
 #align commute_frobenius_pth_root commute_frobenius_pthRoot
 
-/- warning: eq_pth_root_iff -> eq_pthRoot_iff is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
-Case conversion may be inaccurate. Consider using '#align eq_pth_root_iff eq_pthRoot_iffₓ'. -/
 theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
   (frobeniusEquiv R p).toEquiv.eq_symm_apply
 #align eq_pth_root_iff eq_pthRoot_iff
 
-/- warning: pth_root_eq_iff -> pthRoot_eq_iff is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
-Case conversion may be inaccurate. Consider using '#align pth_root_eq_iff pthRoot_eq_iffₓ'. -/
 theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
   (frobeniusEquiv R p).toEquiv.symm_apply_eq
 #align pth_root_eq_iff pthRoot_eq_iff
 
-/- warning: monoid_hom.map_pth_root -> MonoidHom.map_pthRoot is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pth_root MonoidHom.map_pthRootₓ'. -/
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
 
-/- warning: monoid_hom.map_iterate_pth_root -> MonoidHom.map_iterate_pthRoot is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRootₓ'. -/
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
   Semiconj.iterate_right f.map_pthRoot n x
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
 
-/- warning: ring_hom.map_pth_root -> RingHom.map_pthRoot is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_hom.map_pth_root RingHom.map_pthRootₓ'. -/
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
 #align ring_hom.map_pth_root RingHom.map_pthRoot
 
-/- warning: ring_hom.map_iterate_pth_root -> RingHom.map_iterate_pthRoot is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRootₓ'. -/
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
   g.toMonoidHom.map_iterate_pthRoot x n
@@ -217,24 +145,12 @@ section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-/- warning: perfect_closure.r -> PerfectClosure.R is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
-Case conversion may be inaccurate. Consider using '#align perfect_closure.r PerfectClosure.Rₓ'. -/
 /-- `perfect_closure K p` is the quotient by this relation. -/
 @[mk_iff]
 inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
   | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
 #align perfect_closure.r PerfectClosure.R
 
-/- warning: perfect_closure -> PerfectClosure is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Type.{u1}
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Type.{u1}
-Case conversion may be inaccurate. Consider using '#align perfect_closure PerfectClosureₓ'. -/
 /-- The perfect closure is the smallest extension that makes frobenius surjective. -/
 def PerfectClosure : Type u :=
   Quot (PerfectClosure.R K p)
@@ -250,23 +166,11 @@ section Ring
 
 variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-/- warning: perfect_closure.mk -> PerfectClosure.mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
-Case conversion may be inaccurate. Consider using '#align perfect_closure.mk PerfectClosure.mkₓ'. -/
 /-- Constructor for `perfect_closure`. -/
 def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
 
-/- warning: perfect_closure.quot_mk_eq_mk -> PerfectClosure.quot_mk_eq_mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
-Case conversion may be inaccurate. Consider using '#align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mkₓ'. -/
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
   rfl
@@ -274,12 +178,6 @@ theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p)
 
 variable {K p}
 
-/- warning: perfect_closure.lift_on -> PerfectClosure.liftOn is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
-Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on PerfectClosure.liftOnₓ'. -/
 /-- Lift a function `ℕ × K → L` to a function on `perfect_closure K p`. -/
 @[elab_as_elim]
 def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
@@ -287,24 +185,12 @@ def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
   Quot.liftOn x f hf
 #align perfect_closure.lift_on PerfectClosure.liftOn
 
-/- warning: perfect_closure.lift_on_mk -> PerfectClosure.liftOn_mk is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}} (f : (Prod.{0, u1} Nat K) -> L) (hf : forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) (x : Prod.{0, u1} Nat K), Eq.{succ u2} L (PerfectClosure.liftOn.{u1, u2} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
-but is expected to have type
-  forall {K : Type.{u2}} [_inst_1 : CommRing.{u2} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u2} K (AddGroupWithOne.toAddMonoidWithOne.{u2} K (Ring.toAddGroupWithOne.{u2} K (CommRing.toRing.{u2} K _inst_1))) p] {L : Type.{u1}} (f : (Prod.{0, u2} Nat K) -> L) (hf : forall (x : Prod.{0, u2} Nat K) (y : Prod.{0, u2} Nat K), (PerfectClosure.R.{u2} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u1} L (f x) (f y))) (x : Prod.{0, u2} Nat K), Eq.{succ u1} L (PerfectClosure.liftOn.{u2, u1} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u2} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
-Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on_mk PerfectClosure.liftOn_mkₓ'. -/
 @[simp]
 theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y → f x = f y) (x : ℕ × K) :
     (mk K p x).liftOn f hf = f x :=
   rfl
 #align perfect_closure.lift_on_mk PerfectClosure.liftOn_mk
 
-/- warning: perfect_closure.induction_on -> PerfectClosure.induction_on is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
-Case conversion may be inaccurate. Consider using '#align perfect_closure.induction_on PerfectClosure.induction_onₓ'. -/
 @[elab_as_elim]
 theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
     (h : ∀ x, q (mk K p x)) : q x :=
@@ -340,9 +226,6 @@ instance : Mul (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
 
-/- warning: perfect_closure.mk_mul_mk -> PerfectClosure.mk_mul_mk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mkₓ'. -/
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
     mk K p x * mk K p y =
@@ -377,12 +260,6 @@ instance : CommMonoid (PerfectClosure K p) :=
         Quot.inductionOn f fun ⟨n, y⟩ =>
           congr_arg (Quot.mk _) <| by simp only [add_comm, mul_comm] }
 
-/- warning: perfect_closure.one_def -> PerfectClosure.one_def is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.one.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (MulOneClass.toHasOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toMulOneClass.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commMonoid.{u1} K _inst_1 p _inst_2 _inst_3))))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 1 (OfNat.mk.{u1} K 1 (One.one.{u1} K (AddMonoidWithOne.toOne.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.toOfNat1.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instCommMonoidPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 1 (One.toOfNat1.{u1} K (Semiring.toOne.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.one_def PerfectClosure.one_defₓ'. -/
 theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) :=
   rfl
 #align perfect_closure.one_def PerfectClosure.one_def
@@ -417,9 +294,6 @@ instance : Add (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => add_aux_left K p x1 x2 y H⟩
 
-/- warning: perfect_closure.mk_add_mk -> PerfectClosure.mk_add_mk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_add_mk PerfectClosure.mk_add_mkₓ'. -/
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
     mk K p x + mk K p y =
@@ -432,12 +306,6 @@ instance : Neg (PerfectClosure K p) :=
       match x, y, H with
       | _, _, r.intro n x => Quot.sound <| by rw [← frobenius_neg] <;> apply r.intro⟩
 
-/- warning: perfect_closure.neg_mk -> PerfectClosure.neg_mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasNeg.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (SubNegMonoid.toHasNeg.{u1} K (AddGroup.toSubNegMonoid.{u1} K (AddGroupWithOne.toAddGroup.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instNegPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (Ring.toNeg.{u1} K (CommRing.toRing.{u1} K _inst_1)) (Prod.snd.{0, u1} Nat K x))))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.neg_mk PerfectClosure.neg_mkₓ'. -/
 @[simp]
 theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
   rfl
@@ -446,42 +314,21 @@ theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
 instance : Zero (PerfectClosure K p) :=
   ⟨mk K p (0, 0)⟩
 
-/- warning: perfect_closure.zero_def -> PerfectClosure.zero_def is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3)))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.zero_def PerfectClosure.zero_defₓ'. -/
 theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) :=
   rfl
 #align perfect_closure.zero_def PerfectClosure.zero_def
 
-/- warning: perfect_closure.mk_zero_zero -> PerfectClosure.mk_zero_zero is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zeroₓ'. -/
 @[simp]
 theorem mk_zero_zero : mk K p (0, 0) = 0 :=
   rfl
 #align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zero
 
-/- warning: perfect_closure.mk_zero -> PerfectClosure.mk_zero is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero PerfectClosure.mk_zeroₓ'. -/
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
   induction' n with n ih <;> [rfl;rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
     rwa [frobenius_zero K p] at this
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 
-/- warning: perfect_closure.r.sound -> PerfectClosure.R.sound is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
   subst H <;> induction' m with m ih <;>
@@ -542,9 +389,6 @@ instance : CommRing (PerfectClosure K p) :=
                 simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
                   add_mul, add_comm, add_left_comm] }
 
-/- warning: perfect_closure.eq_iff' -> PerfectClosure.eq_iff' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff' PerfectClosure.eq_iff'ₓ'. -/
 theorem eq_iff' (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
   by
@@ -571,12 +415,6 @@ theorem eq_iff' (x y : ℕ × K) :
   rw [add_assoc, add_comm, add_comm z]
 #align perfect_closure.eq_iff' PerfectClosure.eq_iff'
 
-/- warning: perfect_closure.nat_cast -> PerfectClosure.nat_cast is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) x)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast PerfectClosure.nat_castₓ'. -/
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
   induction' n with n ih
@@ -591,22 +429,10 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   apply r.intro
 #align perfect_closure.nat_cast PerfectClosure.nat_cast
 
-/- warning: perfect_closure.int_cast -> PerfectClosure.int_cast is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toHasIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int K (HasLiftT.mk.{1, succ u1} Int K (CoeTCₓ.coe.{1, succ u1} Int K (Int.castCoe.{u1} K (AddGroupWithOne.toHasIntCast.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) x)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Int.cast.{u1} K (Ring.toIntCast.{u1} K (CommRing.toRing.{u1} K _inst_1)) x)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.int_cast PerfectClosure.int_castₓ'. -/
 theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
   induction x <;> simp only [Int.cast_ofNat, Int.cast_negSucc, nat_cast K p 0] <;> rfl
 #align perfect_closure.int_cast PerfectClosure.int_cast
 
-/- warning: perfect_closure.nat_cast_eq_iff -> PerfectClosure.nat_cast_eq_iff is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) y)) (Eq.{succ u1} K ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) y))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) y)) (Eq.{succ u1} K (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) x) (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) y))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iffₓ'. -/
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
@@ -620,9 +446,6 @@ instance : CharP (PerfectClosure K p) p := by
   constructor; intro x; rw [← CharP.cast_eq_zero_iff K]
   rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
 
-/- warning: perfect_closure.frobenius_mk -> PerfectClosure.frobenius_mk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
       mk _ _ (x.1, x.2 ^ p) :=
@@ -638,12 +461,6 @@ theorem frobenius_mk (x : ℕ × K) :
     simp only [pow_succ, (frobenius _ _).iterate_map_mul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 
-/- warning: perfect_closure.of -> PerfectClosure.of is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.of PerfectClosure.ofₓ'. -/
 /-- Embedding of `K` into `perfect_closure K p` -/
 def of : K →+* PerfectClosure K p where
   toFun x := mk _ _ (0, x)
@@ -653,24 +470,12 @@ def of : K →+* PerfectClosure K p where
   map_add' x y := rfl
 #align perfect_closure.of PerfectClosure.of
 
-/- warning: perfect_closure.of_apply -> PerfectClosure.of_apply is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.of_apply PerfectClosure.of_applyₓ'. -/
 theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
 #align perfect_closure.of_apply PerfectClosure.of_apply
 
 end Ring
 
-/- warning: perfect_closure.eq_iff -> PerfectClosure.eq_iff is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff PerfectClosure.eq_iffₓ'. -/
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
   (eq_iff' K p x y).trans
@@ -718,9 +523,6 @@ instance : PerfectRing (PerfectClosure K p) p
     induction_on e fun ⟨n, x⟩ => by simp only [lift_on_mk, frobenius_mk];
       exact (Quot.sound <| r.intro _ _).symm
 
-/- warning: perfect_closure.eq_pth_root -> PerfectClosure.eq_pthRoot is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
   rcases x with ⟨m, x⟩
@@ -728,12 +530,6 @@ theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[
   rw [iterate_succ_apply', ← ih] <;> rfl
 #align perfect_closure.eq_pth_root PerfectClosure.eq_pthRoot
 
-/- warning: perfect_closure.lift -> PerfectClosure.lift is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toDivisionRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingHom.{u1, u2} K L (Semiring.toNonAssocSemiring.{u1} K (DivisionSemiring.toSemiring.{u1} K (Semifield.toDivisionSemiring.{u1} K (Field.toSemifield.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toDivisionSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
-Case conversion may be inaccurate. Consider using '#align perfect_closure.lift PerfectClosure.liftₓ'. -/
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `perfect_closure K p`. -/
 def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
@@ -772,12 +568,6 @@ end Field
 
 end PerfectClosure
 
-/- warning: perfect_ring.of_surjective -> PerfectRing.ofSurjective is a dubious translation:
-lean 3 declaration is
-  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (AddCommGroupWithOne.toAddGroupWithOne.{u1} k (Ring.toAddCommGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
-but is expected to have type
-  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
-Case conversion may be inaccurate. Consider using '#align perfect_ring.of_surjective PerfectRing.ofSurjectiveₓ'. -/
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
 noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
     [Fact p.Prime] [CharP k p] (h : Function.Surjective <| frobenius k p) : PerfectRing k p
Diff
@@ -580,10 +580,8 @@ Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_ca
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
   induction' n with n ih
-  · induction' x with x ih
-    · simp
-    rw [Nat.cast_succ, Nat.cast_succ, ih]
-    rfl
+  · induction' x with x ih; · simp
+    rw [Nat.cast_succ, Nat.cast_succ, ih]; rfl
   rw [ih]; apply Quot.sound
   conv =>
     congr
@@ -629,12 +627,9 @@ theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
       mk _ _ (x.1, x.2 ^ p) :=
   by
-  simp only [frobenius_def]
-  cases' x with n x
-  dsimp only
+  simp only [frobenius_def]; cases' x with n x; dsimp only
   suffices ∀ p' : ℕ, mk K p (n, x) ^ p' = mk K p (n, x ^ p') by apply this
-  intro p
-  induction' p with p ih
+  intro p; induction' p with p ih
   case zero => apply r.sound; rw [(frobenius _ _).iterate_map_one, pow_zero]
   case succ =>
     rw [pow_succ, ih]
@@ -691,10 +686,7 @@ instance : Inv (PerfectClosure K p) :=
   ⟨Quot.lift (fun x : ℕ × K => Quot.mk (R K p) (x.1, x.2⁻¹)) fun x y (H : R K p x y) =>
       match x, y, H with
       | _, _, r.intro n x =>
-        Quot.sound <| by
-          simp only [frobenius_def]
-          rw [← inv_pow]
-          apply r.intro⟩
+        Quot.sound <| by simp only [frobenius_def]; rw [← inv_pow]; apply r.intro⟩
 
 instance : Field (PerfectClosure K p) :=
   { (inferInstance : Inv (PerfectClosure K p)),
@@ -720,12 +712,10 @@ instance : PerfectRing (PerfectClosure K p) p
       match x, y, H with
       | _, _, r.intro n x => Quot.sound (R.intro _ _)
   frobenius_pthRoot' e :=
-    induction_on e fun ⟨n, x⟩ => by
-      simp only [lift_on_mk, frobenius_mk]
+    induction_on e fun ⟨n, x⟩ => by simp only [lift_on_mk, frobenius_mk];
       exact (Quot.sound <| r.intro _ _).symm
   pth_root_frobenius' e :=
-    induction_on e fun ⟨n, x⟩ => by
-      simp only [lift_on_mk, frobenius_mk]
+    induction_on e fun ⟨n, x⟩ => by simp only [lift_on_mk, frobenius_mk];
       exact (Quot.sound <| r.intro _ _).symm
 
 /- warning: perfect_closure.eq_pth_root -> PerfectClosure.eq_pthRoot is a dubious translation:
Diff
@@ -174,20 +174,14 @@ theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
 #align pth_root_eq_iff pthRoot_eq_iff
 
 /- warning: monoid_hom.map_pth_root -> MonoidHom.map_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pth_root MonoidHom.map_pthRootₓ'. -/
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
 
 /- warning: monoid_hom.map_iterate_pth_root -> MonoidHom.map_iterate_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRootₓ'. -/
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
@@ -195,20 +189,14 @@ theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
 
 /- warning: ring_hom.map_pth_root -> RingHom.map_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align ring_hom.map_pth_root RingHom.map_pthRootₓ'. -/
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
 #align ring_hom.map_pth_root RingHom.map_pthRoot
 
 /- warning: ring_hom.map_iterate_pth_root -> RingHom.map_iterate_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRootₓ'. -/
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
@@ -333,7 +321,6 @@ private theorem mul_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
     Quot.sound <| by
       rw [← iterate_succ_apply, iterate_succ', iterate_succ', ← frobenius_mul, Nat.succ_add] <;>
         apply r.intro
-#align perfect_closure.mul_aux_left perfect_closure.mul_aux_left
 
 private theorem mul_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
     mk K p (x.1 + y1.1, (frobenius K p^[y1.1]) x.2 * (frobenius K p^[x.1]) y1.2) =
@@ -342,7 +329,6 @@ private theorem mul_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
   | _, _, r.intro n y =>
     Quot.sound <| by
       rw [← iterate_succ_apply, iterate_succ', iterate_succ', ← frobenius_mul] <;> apply r.intro
-#align perfect_closure.mul_aux_right perfect_closure.mul_aux_right
 
 instance : Mul (PerfectClosure K p) :=
   ⟨Quot.lift
@@ -355,10 +341,7 @@ instance : Mul (PerfectClosure K p) :=
       funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
 
 /- warning: perfect_closure.mk_mul_mk -> PerfectClosure.mk_mul_mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasMul.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (Distrib.toHasMul.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instMulPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (NonUnitalNonAssocRing.toMul.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mkₓ'. -/
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
@@ -415,7 +398,6 @@ private theorem add_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
     Quot.sound <| by
       rw [← iterate_succ_apply, iterate_succ', iterate_succ', ← frobenius_add, Nat.succ_add] <;>
         apply r.intro
-#align perfect_closure.add_aux_left perfect_closure.add_aux_left
 
 private theorem add_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
     mk K p (x.1 + y1.1, (frobenius K p^[y1.1]) x.2 + (frobenius K p^[x.1]) y1.2) =
@@ -424,7 +406,6 @@ private theorem add_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
   | _, _, r.intro n y =>
     Quot.sound <| by
       rw [← iterate_succ_apply, iterate_succ', iterate_succ', ← frobenius_add] <;> apply r.intro
-#align perfect_closure.add_aux_right perfect_closure.add_aux_right
 
 instance : Add (PerfectClosure K p) :=
   ⟨Quot.lift
@@ -437,10 +418,7 @@ instance : Add (PerfectClosure K p) :=
       funext fun e => Quot.inductionOn e fun y => add_aux_left K p x1 x2 y H⟩
 
 /- warning: perfect_closure.mk_add_mk -> PerfectClosure.mk_add_mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasAdd.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toHasAdd.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instAddPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toAdd.{u1} K (NonUnitalNonAssocSemiring.toDistrib.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_add_mk PerfectClosure.mk_add_mkₓ'. -/
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
@@ -502,10 +480,7 @@ theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 
 /- warning: perfect_closure.r.sound -> PerfectClosure.R.sound is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) y)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) y)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
@@ -568,10 +543,7 @@ instance : CommRing (PerfectClosure K p) :=
                   add_mul, add_comm, add_left_comm] }
 
 /- warning: perfect_closure.eq_iff' -> PerfectClosure.eq_iff' is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff' PerfectClosure.eq_iff'ₓ'. -/
 theorem eq_iff' (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
@@ -651,10 +623,7 @@ instance : CharP (PerfectClosure K p) p := by
   rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
 
 /- warning: perfect_closure.frobenius_mk -> PerfectClosure.frobenius_mk is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
@@ -760,10 +729,7 @@ instance : PerfectRing (PerfectClosure K p) p
       exact (Quot.sound <| r.intro _ _).symm
 
 /- warning: perfect_closure.eq_pth_root -> PerfectClosure.eq_pthRoot is a dubious translation:
-lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
-but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
Diff
@@ -496,7 +496,7 @@ but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero PerfectClosure.mk_zeroₓ'. -/
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
-  induction' n with n ih <;> [rfl, rw [← ih]] <;> symm <;> apply Quot.sound <;>
+  induction' n with n ih <;> [rfl;rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
     rwa [frobenius_zero K p] at this
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
@@ -509,8 +509,8 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
-  subst H <;> induction' m with m ih <;> [simp only [zero_add, iterate_zero_apply],
-        rw [ih, Nat.succ_add, iterate_succ']] <;>
+  subst H <;> induction' m with m ih <;>
+        [simp only [zero_add, iterate_zero_apply];rw [ih, Nat.succ_add, iterate_succ']] <;>
       apply Quot.sound <;>
     apply r.intro
 #align perfect_closure.r.sound PerfectClosure.R.sound
Diff
@@ -83,7 +83,7 @@ theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
 Case conversion may be inaccurate. Consider using '#align frobenius_pth_root frobenius_pthRootₓ'. -/
 @[simp]
 theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
@@ -94,7 +94,7 @@ theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (MonoidWithZero.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (Semiring.toMonoidWithZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (CommSemiring.toSemiring.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) _inst_1))))) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (MonoidWithZero.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (Semiring.toMonoidWithZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (CommSemiring.toSemiring.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) _inst_1))))) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
 Case conversion may be inaccurate. Consider using '#align pth_root_pow_p pthRoot_pow_pₓ'. -/
 @[simp]
 theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
@@ -105,7 +105,7 @@ theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
 Case conversion may be inaccurate. Consider using '#align pth_root_frobenius pthRoot_frobeniusₓ'. -/
 @[simp]
 theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
@@ -116,7 +116,7 @@ theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
 Case conversion may be inaccurate. Consider using '#align pth_root_pow_p' pthRoot_pow_p'ₓ'. -/
 @[simp]
 theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
@@ -127,7 +127,7 @@ theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
 Case conversion may be inaccurate. Consider using '#align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobeniusₓ'. -/
 theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
   pthRoot_frobenius
@@ -137,7 +137,7 @@ theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
 Case conversion may be inaccurate. Consider using '#align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobeniusₓ'. -/
 theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
   frobenius_pthRoot
@@ -147,7 +147,7 @@ theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (fr
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
 Case conversion may be inaccurate. Consider using '#align commute_frobenius_pth_root commute_frobenius_pthRootₓ'. -/
 theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
   (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
@@ -157,7 +157,7 @@ theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
 Case conversion may be inaccurate. Consider using '#align eq_pth_root_iff eq_pthRoot_iffₓ'. -/
 theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
   (frobeniusEquiv R p).toEquiv.eq_symm_apply
@@ -167,7 +167,7 @@ theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
 Case conversion may be inaccurate. Consider using '#align pth_root_eq_iff pthRoot_eq_iffₓ'. -/
 theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
   (frobeniusEquiv R p).toEquiv.symm_apply_eq
@@ -177,7 +177,7 @@ theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pth_root MonoidHom.map_pthRootₓ'. -/
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
@@ -187,7 +187,7 @@ theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRootₓ'. -/
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
@@ -198,7 +198,7 @@ theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
 Case conversion may be inaccurate. Consider using '#align ring_hom.map_pth_root RingHom.map_pthRootₓ'. -/
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
@@ -208,7 +208,7 @@ theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
 Case conversion may be inaccurate. Consider using '#align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRootₓ'. -/
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
@@ -358,7 +358,7 @@ instance : Mul (PerfectClosure K p) :=
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasMul.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (Distrib.toHasMul.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instMulPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (NonUnitalNonAssocRing.toMul.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instMulPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (NonUnitalNonAssocRing.toMul.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mkₓ'. -/
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
@@ -440,7 +440,7 @@ instance : Add (PerfectClosure K p) :=
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasAdd.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toHasAdd.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instAddPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toAdd.{u1} K (NonUnitalNonAssocSemiring.toDistrib.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instAddPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toAdd.{u1} K (NonUnitalNonAssocSemiring.toDistrib.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_add_mk PerfectClosure.mk_add_mkₓ'. -/
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
@@ -505,7 +505,7 @@ theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) y)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) y)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) y)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
@@ -571,7 +571,7 @@ instance : CommRing (PerfectClosure K p) :=
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff' PerfectClosure.eq_iff'ₓ'. -/
 theorem eq_iff' (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
@@ -654,7 +654,7 @@ instance : CharP (PerfectClosure K p) p := by
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
@@ -693,7 +693,7 @@ def of : K →+* PerfectClosure K p where
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.of_apply PerfectClosure.of_applyₓ'. -/
 theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
@@ -705,7 +705,7 @@ end Ring
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff PerfectClosure.eq_iffₓ'. -/
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
@@ -763,7 +763,7 @@ instance : PerfectRing (PerfectClosure K p) p
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
@@ -820,7 +820,7 @@ end PerfectClosure
 lean 3 declaration is
   forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (AddCommGroupWithOne.toAddGroupWithOne.{u1} k (Ring.toAddCommGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 but is expected to have type
-  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
+  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 Case conversion may be inaccurate. Consider using '#align perfect_ring.of_surjective PerfectRing.ofSurjectiveₓ'. -/
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
 noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
Diff
@@ -398,7 +398,7 @@ instance : CommMonoid (PerfectClosure K p) :=
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.one.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (MulOneClass.toHasOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toMulOneClass.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commMonoid.{u1} K _inst_1 p _inst_2 _inst_3))))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 1 (OfNat.mk.{u1} K 1 (One.one.{u1} K (AddMonoidWithOne.toOne.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.toOfNat1.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instCommMonoidPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 1 (One.toOfNat1.{u1} K (NonAssocRing.toOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.toOfNat1.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instCommMonoidPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 1 (One.toOfNat1.{u1} K (Semiring.toOne.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.one_def PerfectClosure.one_defₓ'. -/
 theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) :=
   rfl
@@ -603,7 +603,7 @@ theorem eq_iff' (x y : ℕ × K) :
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast PerfectClosure.nat_castₓ'. -/
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
@@ -635,7 +635,7 @@ theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) y)) (Eq.{succ u1} K ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) y))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) y)) (Eq.{succ u1} K (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x) (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) y))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) y)) (Eq.{succ u1} K (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) x) (Nat.cast.{u1} K (Semiring.toNatCast.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) y))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iffₓ'. -/
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
@@ -654,7 +654,7 @@ instance : CharP (PerfectClosure K p) p := by
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
@@ -678,7 +678,7 @@ theorem frobenius_mk (x : ℕ × K) :
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.of PerfectClosure.ofₓ'. -/
 /-- Embedding of `K` into `perfect_closure K p` -/
 def of : K →+* PerfectClosure K p where
@@ -693,7 +693,7 @@ def of : K →+* PerfectClosure K p where
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.of_apply PerfectClosure.of_applyₓ'. -/
 theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
@@ -705,7 +705,7 @@ end Ring
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff PerfectClosure.eq_iffₓ'. -/
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
@@ -763,7 +763,7 @@ instance : PerfectRing (PerfectClosure K p) p
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
@@ -776,7 +776,7 @@ theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[
 lean 3 declaration is
   forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toDivisionRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
 but is expected to have type
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instDivisionRingPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingHom.{u1, u2} K L (Semiring.toNonAssocSemiring.{u1} K (DivisionSemiring.toSemiring.{u1} K (Semifield.toDivisionSemiring.{u1} K (Field.toSemifield.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toDivisionSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.lift PerfectClosure.liftₓ'. -/
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `perfect_closure K p`. -/
@@ -820,7 +820,7 @@ end PerfectClosure
 lean 3 declaration is
   forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (AddCommGroupWithOne.toAddGroupWithOne.{u1} k (Ring.toAddCommGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 but is expected to have type
-  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (Ring.toSemiring.{u1} k (CommRing.toRing.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
+  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 Case conversion may be inaccurate. Consider using '#align perfect_ring.of_surjective PerfectRing.ofSurjectiveₓ'. -/
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
 noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
Diff
@@ -231,7 +231,7 @@ variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
 /- warning: perfect_closure.r -> PerfectClosure.R is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
 Case conversion may be inaccurate. Consider using '#align perfect_closure.r PerfectClosure.Rₓ'. -/
@@ -243,7 +243,7 @@ inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
 
 /- warning: perfect_closure -> PerfectClosure is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Type.{u1}
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Type.{u1}
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Type.{u1}
 Case conversion may be inaccurate. Consider using '#align perfect_closure PerfectClosureₓ'. -/
@@ -264,7 +264,7 @@ variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
 /- warning: perfect_closure.mk -> PerfectClosure.mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk PerfectClosure.mkₓ'. -/
@@ -275,7 +275,7 @@ def mk (x : ℕ × K) : PerfectClosure K p :=
 
 /- warning: perfect_closure.quot_mk_eq_mk -> PerfectClosure.quot_mk_eq_mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
 Case conversion may be inaccurate. Consider using '#align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mkₓ'. -/
@@ -288,7 +288,7 @@ variable {K p}
 
 /- warning: perfect_closure.lift_on -> PerfectClosure.liftOn is a dubious translation:
 lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
 but is expected to have type
   forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
 Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on PerfectClosure.liftOnₓ'. -/
@@ -301,7 +301,7 @@ def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
 
 /- warning: perfect_closure.lift_on_mk -> PerfectClosure.liftOn_mk is a dubious translation:
 lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}} (f : (Prod.{0, u1} Nat K) -> L) (hf : forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) (x : Prod.{0, u1} Nat K), Eq.{succ u2} L (PerfectClosure.liftOn.{u1, u2} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}} (f : (Prod.{0, u1} Nat K) -> L) (hf : forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) (x : Prod.{0, u1} Nat K), Eq.{succ u2} L (PerfectClosure.liftOn.{u1, u2} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
 but is expected to have type
   forall {K : Type.{u2}} [_inst_1 : CommRing.{u2} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u2} K (AddGroupWithOne.toAddMonoidWithOne.{u2} K (Ring.toAddGroupWithOne.{u2} K (CommRing.toRing.{u2} K _inst_1))) p] {L : Type.{u1}} (f : (Prod.{0, u2} Nat K) -> L) (hf : forall (x : Prod.{0, u2} Nat K) (y : Prod.{0, u2} Nat K), (PerfectClosure.R.{u2} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u1} L (f x) (f y))) (x : Prod.{0, u2} Nat K), Eq.{succ u1} L (PerfectClosure.liftOn.{u2, u1} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u2} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
 Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on_mk PerfectClosure.liftOn_mkₓ'. -/
@@ -313,7 +313,7 @@ theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y →
 
 /- warning: perfect_closure.induction_on -> PerfectClosure.induction_on is a dubious translation:
 lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
 but is expected to have type
   forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
 Case conversion may be inaccurate. Consider using '#align perfect_closure.induction_on PerfectClosure.induction_onₓ'. -/
@@ -356,7 +356,7 @@ instance : Mul (PerfectClosure K p) :=
 
 /- warning: perfect_closure.mk_mul_mk -> PerfectClosure.mk_mul_mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasMul.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (Distrib.toHasMul.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasMul.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (Distrib.toHasMul.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instMulPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (NonUnitalNonAssocRing.toMul.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mkₓ'. -/
@@ -396,7 +396,7 @@ instance : CommMonoid (PerfectClosure K p) :=
 
 /- warning: perfect_closure.one_def -> PerfectClosure.one_def is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.one.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (MulOneClass.toHasOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toMulOneClass.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commMonoid.{u1} K _inst_1 p _inst_2 _inst_3))))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 1 (OfNat.mk.{u1} K 1 (One.one.{u1} K (AddMonoidWithOne.toOne.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.one.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (MulOneClass.toHasOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toMulOneClass.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commMonoid.{u1} K _inst_1 p _inst_2 _inst_3))))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 1 (OfNat.mk.{u1} K 1 (One.one.{u1} K (AddMonoidWithOne.toOne.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.toOfNat1.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instCommMonoidPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 1 (One.toOfNat1.{u1} K (NonAssocRing.toOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.one_def PerfectClosure.one_defₓ'. -/
@@ -438,7 +438,7 @@ instance : Add (PerfectClosure K p) :=
 
 /- warning: perfect_closure.mk_add_mk -> PerfectClosure.mk_add_mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasAdd.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toHasAdd.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasAdd.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toHasAdd.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instAddPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toAdd.{u1} K (NonUnitalNonAssocSemiring.toDistrib.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_add_mk PerfectClosure.mk_add_mkₓ'. -/
@@ -456,7 +456,7 @@ instance : Neg (PerfectClosure K p) :=
 
 /- warning: perfect_closure.neg_mk -> PerfectClosure.neg_mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasNeg.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (SubNegMonoid.toHasNeg.{u1} K (AddGroup.toSubNegMonoid.{u1} K (AddGroupWithOne.toAddGroup.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasNeg.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (SubNegMonoid.toHasNeg.{u1} K (AddGroup.toSubNegMonoid.{u1} K (AddGroupWithOne.toAddGroup.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instNegPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (Ring.toNeg.{u1} K (CommRing.toRing.{u1} K _inst_1)) (Prod.snd.{0, u1} Nat K x))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.neg_mk PerfectClosure.neg_mkₓ'. -/
@@ -470,7 +470,7 @@ instance : Zero (PerfectClosure K p) :=
 
 /- warning: perfect_closure.zero_def -> PerfectClosure.zero_def is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3)))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3)))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.zero_def PerfectClosure.zero_defₓ'. -/
@@ -480,7 +480,7 @@ theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) :=
 
 /- warning: perfect_closure.mk_zero_zero -> PerfectClosure.mk_zero_zero is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zeroₓ'. -/
@@ -491,7 +491,7 @@ theorem mk_zero_zero : mk K p (0, 0) = 0 :=
 
 /- warning: perfect_closure.mk_zero -> PerfectClosure.mk_zero is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero PerfectClosure.mk_zeroₓ'. -/
@@ -503,7 +503,7 @@ theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
 
 /- warning: perfect_closure.r.sound -> PerfectClosure.R.sound is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) y)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) y)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) y)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
@@ -569,7 +569,7 @@ instance : CommRing (PerfectClosure K p) :=
 
 /- warning: perfect_closure.eq_iff' -> PerfectClosure.eq_iff' is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff' PerfectClosure.eq_iff'ₓ'. -/
@@ -601,7 +601,7 @@ theorem eq_iff' (x y : ℕ × K) :
 
 /- warning: perfect_closure.nat_cast -> PerfectClosure.nat_cast is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast PerfectClosure.nat_castₓ'. -/
@@ -623,7 +623,7 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
 
 /- warning: perfect_closure.int_cast -> PerfectClosure.int_cast is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toHasIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int K (HasLiftT.mk.{1, succ u1} Int K (CoeTCₓ.coe.{1, succ u1} Int K (Int.castCoe.{u1} K (AddGroupWithOne.toHasIntCast.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) x)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toHasIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int K (HasLiftT.mk.{1, succ u1} Int K (CoeTCₓ.coe.{1, succ u1} Int K (Int.castCoe.{u1} K (AddGroupWithOne.toHasIntCast.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) x)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Int.cast.{u1} K (Ring.toIntCast.{u1} K (CommRing.toRing.{u1} K _inst_1)) x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.int_cast PerfectClosure.int_castₓ'. -/
@@ -633,7 +633,7 @@ theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
 
 /- warning: perfect_closure.nat_cast_eq_iff -> PerfectClosure.nat_cast_eq_iff is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) y)) (Eq.{succ u1} K ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) y))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddCommGroupWithOne.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toAddCommGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) y)) (Eq.{succ u1} K ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) y))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) y)) (Eq.{succ u1} K (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x) (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) y))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iffₓ'. -/
@@ -652,7 +652,7 @@ instance : CharP (PerfectClosure K p) p := by
 
 /- warning: perfect_closure.frobenius_mk -> PerfectClosure.frobenius_mk is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
@@ -676,7 +676,7 @@ theorem frobenius_mk (x : ℕ × K) :
 
 /- warning: perfect_closure.of -> PerfectClosure.of is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.of PerfectClosure.ofₓ'. -/
@@ -691,7 +691,7 @@ def of : K →+* PerfectClosure K p where
 
 /- warning: perfect_closure.of_apply -> PerfectClosure.of_apply is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.of_apply PerfectClosure.of_applyₓ'. -/
@@ -703,7 +703,7 @@ end Ring
 
 /- warning: perfect_closure.eq_iff -> PerfectClosure.eq_iff is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff PerfectClosure.eq_iffₓ'. -/
@@ -761,7 +761,7 @@ instance : PerfectRing (PerfectClosure K p) p
 
 /- warning: perfect_closure.eq_pth_root -> PerfectClosure.eq_pthRoot is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
@@ -774,7 +774,7 @@ theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[
 
 /- warning: perfect_closure.lift -> PerfectClosure.lift is a dubious translation:
 lean 3 declaration is
-  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toDivisionRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toDivisionRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
 but is expected to have type
   forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instDivisionRingPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
 Case conversion may be inaccurate. Consider using '#align perfect_closure.lift PerfectClosure.liftₓ'. -/
@@ -818,7 +818,7 @@ end PerfectClosure
 
 /- warning: perfect_ring.of_surjective -> PerfectRing.ofSurjective is a dubious translation:
 lean 3 declaration is
-  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (NonAssocRing.toAddGroupWithOne.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
+  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (AddCommGroupWithOne.toAddGroupWithOne.{u1} k (Ring.toAddCommGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 but is expected to have type
   forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (Ring.toSemiring.{u1} k (CommRing.toRing.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
 Case conversion may be inaccurate. Consider using '#align perfect_ring.of_surjective PerfectRing.ofSurjectiveₓ'. -/
Diff
@@ -229,20 +229,28 @@ section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-#print PerfectClosure.R /-
+/- warning: perfect_closure.r -> PerfectClosure.R is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (Prod.{0, u1} Nat K) -> Prop
+Case conversion may be inaccurate. Consider using '#align perfect_closure.r PerfectClosure.Rₓ'. -/
 /-- `perfect_closure K p` is the quotient by this relation. -/
 @[mk_iff]
 inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
   | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
 #align perfect_closure.r PerfectClosure.R
--/
 
-#print PerfectClosure /-
+/- warning: perfect_closure -> PerfectClosure is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Type.{u1}
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Type.{u1}
+Case conversion may be inaccurate. Consider using '#align perfect_closure PerfectClosureₓ'. -/
 /-- The perfect closure is the smallest extension that makes frobenius surjective. -/
 def PerfectClosure : Type u :=
   Quot (PerfectClosure.R K p)
 #align perfect_closure PerfectClosure
--/
 
 end
 
@@ -254,30 +262,42 @@ section Ring
 
 variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-#print PerfectClosure.mk /-
+/- warning: perfect_closure.mk -> PerfectClosure.mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], (Prod.{0, u1} Nat K) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)
+Case conversion may be inaccurate. Consider using '#align perfect_closure.mk PerfectClosure.mkₓ'. -/
 /-- Constructor for `perfect_closure`. -/
 def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
--/
 
-#print PerfectClosure.quot_mk_eq_mk /-
+/- warning: perfect_closure.quot_mk_eq_mk -> PerfectClosure.quot_mk_eq_mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)
+Case conversion may be inaccurate. Consider using '#align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mkₓ'. -/
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
   rfl
 #align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mk
--/
 
 variable {K p}
 
-#print PerfectClosure.liftOn /-
+/- warning: perfect_closure.lift_on -> PerfectClosure.liftOn is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] {L : Type.{u2}}, (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (forall (f : (Prod.{0, u1} Nat K) -> L), (forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) -> L)
+Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on PerfectClosure.liftOnₓ'. -/
 /-- Lift a function `ℕ × K → L` to a function on `perfect_closure K p`. -/
 @[elab_as_elim]
 def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
     (hf : ∀ x y, R K p x y → f x = f y) : L :=
   Quot.liftOn x f hf
 #align perfect_closure.lift_on PerfectClosure.liftOn
--/
 
 /- warning: perfect_closure.lift_on_mk -> PerfectClosure.liftOn_mk is a dubious translation:
 lean 3 declaration is
@@ -291,13 +311,17 @@ theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y →
   rfl
 #align perfect_closure.lift_on_mk PerfectClosure.liftOn_mk
 
-#print PerfectClosure.induction_on /-
+/- warning: perfect_closure.induction_on -> PerfectClosure.induction_on is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) {q : (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> Prop}, (forall (x : Prod.{0, u1} Nat K), q (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) -> (q x)
+Case conversion may be inaccurate. Consider using '#align perfect_closure.induction_on PerfectClosure.induction_onₓ'. -/
 @[elab_as_elim]
 theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
     (h : ∀ x, q (mk K p x)) : q x :=
   Quot.inductionOn x h
 #align perfect_closure.induction_on PerfectClosure.induction_on
--/
 
 variable (K p)
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
 
 ! This file was ported from Lean 3 source module field_theory.perfect_closure
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit c085f3044fe585c575e322bfab45b3633c48d820
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Algebra.Ring.Equiv
 
 /-!
 # The perfect closure of a field
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
 -/
 
 
Diff
@@ -25,13 +25,21 @@ section Defs
 
 variable (R : Type u) [CommSemiring R] (p : ℕ) [Fact p.Prime] [CharP R p]
 
+#print PerfectRing /-
 /-- A perfect ring is a ring of characteristic p that has p-th root. -/
 class PerfectRing : Type u where
   pthRoot' : R → R
   frobenius_pthRoot' : ∀ x, frobenius R p (pth_root' x) = x
   pth_root_frobenius' : ∀ x, pth_root' (frobenius R p x) = x
 #align perfect_ring PerfectRing
+-/
 
+/- warning: frobenius_equiv -> frobeniusEquiv is a dubious translation:
+lean 3 declaration is
+  forall (R : Type.{u1}) [_inst_1 : CommSemiring.{u1} R] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_4 : PerfectRing.{u1} R _inst_1 p _inst_2 _inst_3], RingEquiv.{u1, u1} R R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))
+but is expected to have type
+  forall (R : Type.{u1}) [_inst_1 : CommSemiring.{u1} R] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_4 : PerfectRing.{u1} R _inst_1 p _inst_2 _inst_3], RingEquiv.{u1, u1} R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align frobenius_equiv frobeniusEquivₓ'. -/
 /-- Frobenius automorphism of a perfect ring. -/
 def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
   { frobenius R p with
@@ -40,10 +48,12 @@ def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
     right_inv := PerfectRing.frobenius_pthRoot' }
 #align frobenius_equiv frobeniusEquiv
 
+#print pthRoot /-
 /-- `p`-th root of an element in a `perfect_ring` as a `ring_hom`. -/
 def pthRoot [PerfectRing R p] : R →+* R :=
   (frobeniusEquiv R p).symm
 #align pth_root pthRoot
+-/
 
 end Defs
 
@@ -52,69 +62,151 @@ section
 variable {R : Type u} [CommSemiring R] {S : Type v} [CommSemiring S] (f : R →* S) (g : R →+* S)
   {p : ℕ} [Fact p.Prime] [CharP R p] [PerfectRing R p] [CharP S p] [PerfectRing S p]
 
+#print coe_frobeniusEquiv /-
 @[simp]
 theorem coe_frobeniusEquiv : ⇑(frobeniusEquiv R p) = frobenius R p :=
   rfl
 #align coe_frobenius_equiv coe_frobeniusEquiv
+-/
 
+#print coe_frobeniusEquiv_symm /-
 @[simp]
 theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
   rfl
 #align coe_frobenius_equiv_symm coe_frobeniusEquiv_symm
+-/
 
+/- warning: frobenius_pth_root -> frobenius_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) x
+Case conversion may be inaccurate. Consider using '#align frobenius_pth_root frobenius_pthRootₓ'. -/
 @[simp]
 theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
   (frobeniusEquiv R p).apply_symm_apply x
 #align frobenius_pth_root frobenius_pthRoot
 
+/- warning: pth_root_pow_p -> pthRoot_pow_p is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (MonoidWithZero.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (Semiring.toMonoidWithZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (CommSemiring.toSemiring.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) _inst_1))))) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) p) x
+Case conversion may be inaccurate. Consider using '#align pth_root_pow_p pthRoot_pow_pₓ'. -/
 @[simp]
 theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
   frobenius_pthRoot x
 #align pth_root_pow_p pthRoot_pow_p
 
+/- warning: pth_root_frobenius -> pthRoot_frobenius is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x)) x
+Case conversion may be inaccurate. Consider using '#align pth_root_frobenius pthRoot_frobeniusₓ'. -/
 @[simp]
 theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
   (frobeniusEquiv R p).symm_apply_apply x
 #align pth_root_frobenius pthRoot_frobenius
 
+/- warning: pth_root_pow_p' -> pthRoot_pow_p' is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] (x : R), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) x p)) x
+Case conversion may be inaccurate. Consider using '#align pth_root_pow_p' pthRoot_pow_p'ₓ'. -/
 @[simp]
 theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
   pthRoot_frobenius x
 #align pth_root_pow_p' pthRoot_pow_p'
 
+/- warning: left_inverse_pth_root_frobenius -> leftInverse_pthRoot_frobenius is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.LeftInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+Case conversion may be inaccurate. Consider using '#align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobeniusₓ'. -/
 theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
   pthRoot_frobenius
 #align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobenius
 
+/- warning: right_inverse_pth_root_frobenius -> rightInverse_pthRoot_frobenius is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.RightInverse.{succ u1, succ u1} R R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4))
+Case conversion may be inaccurate. Consider using '#align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobeniusₓ'. -/
 theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
   frobenius_pthRoot
 #align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobenius
 
+/- warning: commute_frobenius_pth_root -> commute_frobenius_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4], Function.Commute.{u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5))
+Case conversion may be inaccurate. Consider using '#align commute_frobenius_pth_root commute_frobenius_pthRootₓ'. -/
 theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
   (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
 #align commute_frobenius_pth_root commute_frobenius_pthRoot
 
+/- warning: eq_pth_root_iff -> eq_pthRoot_iff is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) y)) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) x) y)
+Case conversion may be inaccurate. Consider using '#align eq_pth_root_iff eq_pthRoot_iffₓ'. -/
 theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
   (frobeniusEquiv R p).toEquiv.eq_symm_apply
 #align eq_pth_root_iff eq_pthRoot_iff
 
+/- warning: pth_root_eq_iff -> pthRoot_eq_iff is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] {x : R} {y : R}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x) y) (Eq.{succ u1} R x (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (frobenius.{u1} R _inst_1 p _inst_3 _inst_4) y))
+Case conversion may be inaccurate. Consider using '#align pth_root_eq_iff pthRoot_eq_iffₓ'. -/
 theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
   (frobeniusEquiv R p).toEquiv.symm_apply_eq
 #align pth_root_eq_iff pthRoot_eq_iff
 
+/- warning: monoid_hom.map_pth_root -> MonoidHom.map_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pth_root MonoidHom.map_pthRootₓ'. -/
 theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
   eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
 
+/- warning: monoid_hom.map_iterate_pth_root -> MonoidHom.map_iterate_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (fun (_x : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) f x))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (f : MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulOneClass.toMul.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))))) (MulOneClass.toMul.{u2} S (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))) R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (MonoidHom.monoidHomClass.{u1, u2} R S (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (MulZeroOneClass.toMulOneClass.{u2} S (NonAssocSemiring.toMulZeroOneClass.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))))))) f x))
+Case conversion may be inaccurate. Consider using '#align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRootₓ'. -/
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
   Semiconj.iterate_right f.map_pthRoot n x
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
 
+/- warning: ring_hom.map_pth_root -> RingHom.map_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5) x)) (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+Case conversion may be inaccurate. Consider using '#align ring_hom.map_pth_root RingHom.map_pthRootₓ'. -/
 theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
   g.toMonoidHom.map_pthRoot x
 #align ring_hom.map_pth_root RingHom.map_pthRoot
 
+/- warning: ring_hom.map_iterate_pth_root -> RingHom.map_iterate_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g (Nat.iterate.{succ u1} R (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (fun (_x : RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) => R -> R) (RingHom.hasCoeToFun.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (coeFn.{succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => S -> S) (RingHom.hasCoeToFun.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) g x))
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : CommSemiring.{u1} R] {S : Type.{u2}} [_inst_2 : CommSemiring.{u2} S] (g : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) {p : Nat} [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) p] [_inst_5 : PerfectRing.{u1} R _inst_1 p _inst_3 _inst_4] [_inst_6 : CharP.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) p] [_inst_7 : PerfectRing.{u2} S _inst_2 p _inst_3 _inst_6] (x : R) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (a : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) a) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g (Nat.iterate.{succ u1} R (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (RingHom.instRingHomClassRingHom.{u1, u1} R R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))))) (pthRoot.{u1} R _inst_1 p _inst_3 _inst_4 _inst_5)) n x)) (Nat.iterate.{succ u2} S (FunLike.coe.{succ u2, succ u2, succ u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S) _x) (MulHomClass.toFunLike.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{u2, u2, u2} (RingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u2, u2} S S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) (pthRoot.{u2} S _inst_2 p _inst_3 _inst_6 _inst_7)) n (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_2)))))) g x))
+Case conversion may be inaccurate. Consider using '#align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRootₓ'. -/
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
     g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
   g.toMonoidHom.map_iterate_pthRoot x n
@@ -122,9 +214,11 @@ theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
 
 variable (p)
 
+#print injective_pow_p /-
 theorem injective_pow_p {x y : R} (hxy : x ^ p = y ^ p) : x = y :=
   leftInverse_pthRoot_frobenius.Injective hxy
 #align injective_pow_p injective_pow_p
+-/
 
 end
 
@@ -132,16 +226,20 @@ section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
+#print PerfectClosure.R /-
 /-- `perfect_closure K p` is the quotient by this relation. -/
 @[mk_iff]
 inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
   | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
 #align perfect_closure.r PerfectClosure.R
+-/
 
+#print PerfectClosure /-
 /-- The perfect closure is the smallest extension that makes frobenius surjective. -/
 def PerfectClosure : Type u :=
   Quot (PerfectClosure.R K p)
 #align perfect_closure PerfectClosure
+-/
 
 end
 
@@ -153,36 +251,50 @@ section Ring
 
 variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
+#print PerfectClosure.mk /-
 /-- Constructor for `perfect_closure`. -/
 def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
+-/
 
+#print PerfectClosure.quot_mk_eq_mk /-
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
   rfl
 #align perfect_closure.quot_mk_eq_mk PerfectClosure.quot_mk_eq_mk
+-/
 
 variable {K p}
 
+#print PerfectClosure.liftOn /-
 /-- Lift a function `ℕ × K → L` to a function on `perfect_closure K p`. -/
 @[elab_as_elim]
 def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
     (hf : ∀ x y, R K p x y → f x = f y) : L :=
   Quot.liftOn x f hf
 #align perfect_closure.lift_on PerfectClosure.liftOn
+-/
 
+/- warning: perfect_closure.lift_on_mk -> PerfectClosure.liftOn_mk is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : CommRing.{u1} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] {L : Type.{u2}} (f : (Prod.{0, u1} Nat K) -> L) (hf : forall (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), (PerfectClosure.R.{u1} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u2} L (f x) (f y))) (x : Prod.{0, u1} Nat K), Eq.{succ u2} L (PerfectClosure.liftOn.{u1, u2} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
+but is expected to have type
+  forall {K : Type.{u2}} [_inst_1 : CommRing.{u2} K] {p : Nat} [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u2} K (AddGroupWithOne.toAddMonoidWithOne.{u2} K (Ring.toAddGroupWithOne.{u2} K (CommRing.toRing.{u2} K _inst_1))) p] {L : Type.{u1}} (f : (Prod.{0, u2} Nat K) -> L) (hf : forall (x : Prod.{0, u2} Nat K) (y : Prod.{0, u2} Nat K), (PerfectClosure.R.{u2} K _inst_1 p _inst_2 _inst_3 x y) -> (Eq.{succ u1} L (f x) (f y))) (x : Prod.{0, u2} Nat K), Eq.{succ u1} L (PerfectClosure.liftOn.{u2, u1} K _inst_1 p _inst_2 _inst_3 L (PerfectClosure.mk.{u2} K _inst_1 p _inst_2 _inst_3 x) f hf) (f x)
+Case conversion may be inaccurate. Consider using '#align perfect_closure.lift_on_mk PerfectClosure.liftOn_mkₓ'. -/
 @[simp]
 theorem liftOn_mk {L : Sort _} (f : ℕ × K → L) (hf : ∀ x y, R K p x y → f x = f y) (x : ℕ × K) :
     (mk K p x).liftOn f hf = f x :=
   rfl
 #align perfect_closure.lift_on_mk PerfectClosure.liftOn_mk
 
+#print PerfectClosure.induction_on /-
 @[elab_as_elim]
 theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
     (h : ∀ x, q (mk K p x)) : q x :=
   Quot.inductionOn x h
 #align perfect_closure.induction_on PerfectClosure.induction_on
+-/
 
 variable (K p)
 
@@ -215,6 +327,12 @@ instance : Mul (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
 
+/- warning: perfect_closure.mk_mul_mk -> PerfectClosure.mk_mul_mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasMul.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (Distrib.toHasMul.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instMulPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HMul.hMul.{u1, u1, u1} K K K (instHMul.{u1} K (NonUnitalNonAssocRing.toMul.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mkₓ'. -/
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
     mk K p x * mk K p y =
@@ -249,6 +367,12 @@ instance : CommMonoid (PerfectClosure K p) :=
         Quot.inductionOn f fun ⟨n, y⟩ =>
           congr_arg (Quot.mk _) <| by simp only [add_comm, mul_comm] }
 
+/- warning: perfect_closure.one_def -> PerfectClosure.one_def is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.one.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (MulOneClass.toHasOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toMulOneClass.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commMonoid.{u1} K _inst_1 p _inst_2 _inst_3))))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 1 (OfNat.mk.{u1} K 1 (One.one.{u1} K (AddMonoidWithOne.toOne.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 1 (One.toOfNat1.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Monoid.toOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommMonoid.toMonoid.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instCommMonoidPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 1 (One.toOfNat1.{u1} K (NonAssocRing.toOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.one_def PerfectClosure.one_defₓ'. -/
 theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) :=
   rfl
 #align perfect_closure.one_def PerfectClosure.one_def
@@ -285,6 +409,12 @@ instance : Add (PerfectClosure K p) :=
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => add_aux_left K p x1 x2 y H⟩
 
+/- warning: perfect_closure.mk_add_mk -> PerfectClosure.mk_add_mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasAdd.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toHasAdd.{u1} K (Ring.toDistrib.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HAdd.hAdd.{u1, u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (instHAdd.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instAddPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) (Prod.fst.{0, u1} Nat K y)) (HAdd.hAdd.{u1, u1, u1} K K K (instHAdd.{u1} K (Distrib.toAdd.{u1} K (NonUnitalNonAssocSemiring.toDistrib.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_add_mk PerfectClosure.mk_add_mkₓ'. -/
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
     mk K p x + mk K p y =
@@ -297,6 +427,12 @@ instance : Neg (PerfectClosure K p) :=
       match x, y, H with
       | _, _, r.intro n x => Quot.sound <| by rw [← frobenius_neg] <;> apply r.intro⟩
 
+/- warning: perfect_closure.neg_mk -> PerfectClosure.neg_mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasNeg.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (SubNegMonoid.toHasNeg.{u1} K (AddGroup.toSubNegMonoid.{u1} K (AddGroupWithOne.toAddGroup.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Neg.neg.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instNegPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (Neg.neg.{u1} K (Ring.toNeg.{u1} K (CommRing.toRing.{u1} K _inst_1)) (Prod.snd.{0, u1} Nat K x))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.neg_mk PerfectClosure.neg_mkₓ'. -/
 @[simp]
 theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
   rfl
@@ -305,21 +441,45 @@ theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
 instance : Zero (PerfectClosure K p) :=
   ⟨mk K p (0, 0)⟩
 
+/- warning: perfect_closure.zero_def -> PerfectClosure.zero_def is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3)))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3))) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.zero_def PerfectClosure.zero_defₓ'. -/
 theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) :=
   rfl
 #align perfect_closure.zero_def PerfectClosure.zero_def
 
+/- warning: perfect_closure.mk_zero_zero -> PerfectClosure.mk_zero_zero is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zeroₓ'. -/
 @[simp]
 theorem mk_zero_zero : mk K p (0, 0) = 0 :=
   rfl
 #align perfect_closure.mk_zero_zero PerfectClosure.mk_zero_zero
 
+/- warning: perfect_closure.mk_zero -> PerfectClosure.mk_zero is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (OfNat.mk.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.zero.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.hasZero.{u1} K _inst_1 p _inst_2 _inst_3))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommSemiring.toCommMonoidWithZero.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (OfNat.ofNat.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) 0 (Zero.toOfNat0.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.instZeroPerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.mk_zero PerfectClosure.mk_zeroₓ'. -/
 theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
   induction' n with n ih <;> [rfl, rw [← ih]] <;> symm <;> apply Quot.sound <;>
       have := r.intro n (0 : K) <;>
     rwa [frobenius_zero K p] at this
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 
+/- warning: perfect_closure.r.sound -> PerfectClosure.R.sound is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) m n) y)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (m : Nat) (n : Nat) (x : K) (y : K), (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) m x) y) -> (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) m n) y)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.r.sound PerfectClosure.R.soundₓ'. -/
 theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
   subst H <;> induction' m with m ih <;> [simp only [zero_add, iterate_zero_apply],
@@ -380,6 +540,12 @@ instance : CommRing (PerfectClosure K p) :=
                 simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
                   add_mul, add_comm, add_left_comm] }
 
+/- warning: perfect_closure.eq_iff' -> PerfectClosure.eq_iff' is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 y)) (Exists.{1} Nat (fun (z : Nat) => Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K y) z) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_2 _inst_3)) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Prod.fst.{0, u1} Nat K x) z) (Prod.snd.{0, u1} Nat K y))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff' PerfectClosure.eq_iff'ₓ'. -/
 theorem eq_iff' (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 :=
   by
@@ -406,6 +572,12 @@ theorem eq_iff' (x y : ℕ × K) :
   rw [add_assoc, add_comm, add_comm z]
 #align perfect_closure.eq_iff' PerfectClosure.eq_iff'
 
+/- warning: perfect_closure.nat_cast -> PerfectClosure.nat_cast is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (n : Nat) (x : Nat), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K n (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast PerfectClosure.nat_castₓ'. -/
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   by
   induction' n with n ih
@@ -422,10 +594,22 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) :=
   apply r.intro
 #align perfect_closure.nat_cast PerfectClosure.nat_cast
 
+/- warning: perfect_closure.int_cast -> PerfectClosure.int_cast is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Int (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toHasIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Int K (HasLiftT.mk.{1, succ u1} Int K (CoeTCₓ.coe.{1, succ u1} Int K (Int.castCoe.{u1} K (AddGroupWithOne.toHasIntCast.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))))) x)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Int), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Int.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toIntCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) (Int.cast.{u1} K (Ring.toIntCast.{u1} K (CommRing.toRing.{u1} K _inst_1)) x)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.int_cast PerfectClosure.int_castₓ'. -/
 theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
   induction x <;> simp only [Int.cast_ofNat, Int.cast_negSucc, nat_cast K p 0] <;> rfl
 #align perfect_closure.int_cast PerfectClosure.int_cast
 
+/- warning: perfect_closure.nat_cast_eq_iff -> PerfectClosure.nat_cast_eq_iff is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (HasLiftT.mk.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CoeTCₓ.coe.{1, succ u1} Nat (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.castCoe.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddMonoidWithOne.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (AddGroupWithOne.toAddMonoidWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toAddGroupWithOne.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) y)) (Eq.{succ u1} K ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) x) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat K (HasLiftT.mk.{1, succ u1} Nat K (CoeTCₓ.coe.{1, succ u1} Nat K (Nat.castCoe.{u1} K (AddMonoidWithOne.toNatCast.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))))))) y))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Nat) (y : Nat), Iff (Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) x) (Nat.cast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNatCast.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) y)) (Eq.{succ u1} K (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) x) (Nat.cast.{u1} K (NonAssocRing.toNatCast.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) y))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iffₓ'. -/
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y :=
   by
   constructor <;> intro H
@@ -439,6 +623,12 @@ instance : CharP (PerfectClosure K p) p := by
   constructor; intro x; rw [← CharP.cast_eq_zero_iff K]
   rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
 
+/- warning: perfect_closure.frobenius_mk -> PerfectClosure.frobenius_mk is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.charP.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (Ring.toMonoid.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (Prod.snd.{0, u1} Nat K x) p)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (frobenius.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toCommSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 x)) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (Prod.fst.{0, u1} Nat K x) (HPow.hPow.{u1, 0, u1} K Nat K (instHPow.{u1, 0} K Nat (Monoid.Pow.{u1} K (MonoidWithZero.toMonoid.{u1} K (Semiring.toMonoidWithZero.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1)))))) (Prod.snd.{0, u1} Nat K x) p)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.frobenius_mk PerfectClosure.frobenius_mkₓ'. -/
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
       mk _ _ (x.1, x.2 ^ p) :=
@@ -457,6 +647,12 @@ theorem frobenius_mk (x : ℕ × K) :
     simp only [pow_succ, (frobenius _ _).iterate_map_mul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 
+/- warning: perfect_closure.of -> PerfectClosure.of is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p], RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.of PerfectClosure.ofₓ'. -/
 /-- Embedding of `K` into `perfect_closure K p` -/
 def of : K →+* PerfectClosure K p where
   toFun x := mk _ _ (0, x)
@@ -466,12 +662,24 @@ def of : K →+* PerfectClosure K p where
   map_add' x y := rfl
 #align perfect_closure.of PerfectClosure.of
 
+/- warning: perfect_closure.of_apply -> PerfectClosure.of_apply is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : K), Eq.{succ u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) x))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : K), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K _inst_1 p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K _inst_1 p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K _inst_1 p _inst_2 _inst_3) x) (PerfectClosure.mk.{u1} K _inst_1 p _inst_2 _inst_3 (Prod.mk.{0, u1} Nat K (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) x))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.of_apply PerfectClosure.of_applyₓ'. -/
 theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
 #align perfect_closure.of_apply PerfectClosure.of_apply
 
 end Ring
 
+/- warning: perfect_closure.eq_iff -> PerfectClosure.eq_iff is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (fun (_x : RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) => K -> K) (RingHom.hasCoeToFun.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : CommRing.{u1} K] [_inst_2 : IsDomain.{u1} K (Ring.toSemiring.{u1} K (CommRing.toRing.{u1} K _inst_1))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (CommRing.toRing.{u1} K _inst_1))) p] (x : Prod.{0, u1} Nat K) (y : Prod.{0, u1} Nat K), Iff (Eq.{succ u1} (Quot.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4)) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) x) (Quot.mk.{succ u1} (Prod.{0, u1} Nat K) (PerfectClosure.R.{u1} K _inst_1 p _inst_3 _inst_4) y)) (Eq.{succ u1} K (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K y) (Prod.snd.{0, u1} Nat K x)) (Nat.iterate.{succ u1} K (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => K) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1)))) K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} K K (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))) (Semiring.toNonAssocSemiring.{u1} K (CommSemiring.toSemiring.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1))))))) (frobenius.{u1} K (CommRing.toCommSemiring.{u1} K _inst_1) p _inst_3 _inst_4)) (Prod.fst.{0, u1} Nat K x) (Prod.snd.{0, u1} Nat K y)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_iff PerfectClosure.eq_iffₓ'. -/
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
   (eq_iff' K p x y).trans
@@ -524,6 +732,12 @@ instance : PerfectRing (PerfectClosure K p) p
       simp only [lift_on_mk, frobenius_mk]
       exact (Quot.sound <| r.intro _ _).symm
 
+/- warning: perfect_closure.eq_pth_root -> PerfectClosure.eq_pthRoot is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (fun (_x : RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) => (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3)))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.charP.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.perfectRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (fun (_x : RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) => K -> (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)) (RingHom.hasCoeToFun.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (x : Prod.{0, u1} Nat K), Eq.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.mk.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3 x) (Nat.iterate.{succ u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (fun (_x : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))))) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (RingHom.instRingHomClassRingHom.{u1, u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommSemiring.toSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))))))))) (pthRoot.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Semifield.toCommSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toSemifield.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instFieldPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) p _inst_2 (PerfectClosure.instCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instPerfectRingPerfectClosureToCommRingToCommSemiringToSemifieldInstFieldPerfectClosureToCommRingInstCharPPerfectClosureToAddMonoidWithOneToAddGroupWithOneToRingCommRing.{u1} K _inst_1 p _inst_2 _inst_3))) (Prod.fst.{0, u1} Nat K x) (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (fun (_x : K) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : K) => PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonUnitalNonAssocSemiring.toMul.{u1} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))))) (NonUnitalNonAssocSemiring.toMul.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3))))) K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))) (RingHom.instRingHomClassRingHom.{u1, u1} K (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (CommRing.toRing.{u1} K (Field.toCommRing.{u1} K _inst_1)))) (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (CommRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.PerfectClosure.commRing.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3)))))))) (PerfectClosure.of.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Prod.snd.{0, u1} Nat K x)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRootₓ'. -/
 theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
   by
   rcases x with ⟨m, x⟩
@@ -531,6 +745,12 @@ theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[
   rw [iterate_succ_apply', ← ih] <;> rfl
 #align perfect_closure.eq_pth_root PerfectClosure.eq_pthRoot
 
+/- warning: perfect_closure.lift -> PerfectClosure.lift is a dubious translation:
+lean 3 declaration is
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (NonAssocRing.toAddGroupWithOne.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Field.toDivisionRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.field.{u1} K _inst_1 p _inst_2 _inst_3))))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
+but is expected to have type
+  forall (K : Type.{u1}) [_inst_1 : Field.{u1} K] (p : Nat) [_inst_2 : Fact (Nat.Prime p)] [_inst_3 : CharP.{u1} K (AddGroupWithOne.toAddMonoidWithOne.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) p] (L : Type.{u2}) [_inst_4 : CommSemiring.{u2} L] [_inst_5 : CharP.{u2} L (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} L (NonAssocSemiring.toAddCommMonoidWithOne.{u2} L (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))) p] [_inst_6 : PerfectRing.{u2} L _inst_4 p _inst_2 _inst_5], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingHom.{u1, u2} K L (NonAssocRing.toNonAssocSemiring.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4))) (RingHom.{u1, u2} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) L (NonAssocRing.toNonAssocSemiring.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (Ring.toNonAssocRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (DivisionRing.toRing.{u1} (PerfectClosure.{u1} K (Field.toCommRing.{u1} K _inst_1) p _inst_2 _inst_3) (PerfectClosure.instDivisionRingPerfectClosureToCommRing.{u1} K _inst_1 p _inst_2 _inst_3)))) (Semiring.toNonAssocSemiring.{u2} L (CommSemiring.toSemiring.{u2} L _inst_4)))
+Case conversion may be inaccurate. Consider using '#align perfect_closure.lift PerfectClosure.liftₓ'. -/
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `perfect_closure K p`. -/
 def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
@@ -569,6 +789,12 @@ end Field
 
 end PerfectClosure
 
+/- warning: perfect_ring.of_surjective -> PerfectRing.ofSurjective is a dubious translation:
+lean 3 declaration is
+  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (MulZeroClass.toHasZero.{u1} k (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} k (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} k (NonAssocRing.toNonUnitalNonAssocRing.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))))) (Monoid.Pow.{u1} k (Ring.toMonoid.{u1} k (CommRing.toRing.{u1} k _inst_1)))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (NonAssocRing.toAddGroupWithOne.{u1} k (Ring.toNonAssocRing.{u1} k (CommRing.toRing.{u1} k _inst_1)))) p], (Function.Surjective.{succ u1, succ u1} k k (coeFn.{succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (fun (_x : RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) => k -> k) (RingHom.hasCoeToFun.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
+but is expected to have type
+  forall (k : Type.{u1}) [_inst_1 : CommRing.{u1} k] [_inst_2 : IsReduced.{u1} k (CommMonoidWithZero.toZero.{u1} k (CommSemiring.toCommMonoidWithZero.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Monoid.Pow.{u1} k (MonoidWithZero.toMonoid.{u1} k (Semiring.toMonoidWithZero.{u1} k (Ring.toSemiring.{u1} k (CommRing.toRing.{u1} k _inst_1)))))] (p : Nat) [_inst_3 : Fact (Nat.Prime p)] [_inst_4 : CharP.{u1} k (AddGroupWithOne.toAddMonoidWithOne.{u1} k (Ring.toAddGroupWithOne.{u1} k (CommRing.toRing.{u1} k _inst_1))) p], (Function.Surjective.{succ u1, succ u1} k k (FunLike.coe.{succ u1, succ u1, succ u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k (fun (_x : k) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : k) => k) _x) (MulHomClass.toFunLike.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))) (NonUnitalRingHomClass.toMulHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) (RingHomClass.toNonUnitalRingHomClass.{u1, u1, u1} (RingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1)))) k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (RingHom.instRingHomClassRingHom.{u1, u1} k k (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))) (Semiring.toNonAssocSemiring.{u1} k (CommSemiring.toSemiring.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1))))))) (frobenius.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4))) -> (PerfectRing.{u1} k (CommRing.toCommSemiring.{u1} k _inst_1) p _inst_3 _inst_4)
+Case conversion may be inaccurate. Consider using '#align perfect_ring.of_surjective PerfectRing.ofSurjectiveₓ'. -/
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
 noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
     [Fact p.Prime] [CharP k p] (h : Function.Surjective <| frobenius k p) : PerfectRing k p

Changes in mathlib4

mathlib3
mathlib4
feat: NNRat.cast (#11203)

Define the canonical coercion from the nonnegative rationals to any division semiring.

From LeanAPAP

Diff
@@ -507,6 +507,7 @@ instance instDivisionRing : DivisionRing (PerfectClosure K p) where
     simp only [iterate_map_one, iterate_map_zero, iterate_zero_apply, ← iterate_map_mul] at this ⊢
     rw [mul_inv_cancel this, iterate_map_one]
   inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero])
+  nnqsmul := _
   qsmul := _
 
 instance instField : Field (PerfectClosure K p) :=
chore: Final cleanup before NNRat.cast (#12360)

This is the parts of the diff of #11203 which don't mention NNRat.cast.

  • Use more where notation.
  • Write qsmul := _ instead of qsmul := qsmulRec _ to make the instances more robust to definition changes.
  • Delete qsmulRec.
  • Move qsmul before ratCast_def in instance declarations.
  • Name more instances.
  • Rename rat_smul to qsmul.
Diff
@@ -498,20 +498,16 @@ theorem mk_inv (x : ℕ × K) : (mk K p x)⁻¹ = mk K p (x.1, x.2⁻¹) :=
   rfl
 
 -- Porting note: added to avoid "unknown free variable" error
-instance instDivisionRing : DivisionRing (PerfectClosure K p) :=
-  { (inferInstance : Inv (PerfectClosure K p)) with
-    exists_pair_ne := ⟨0, 1, fun H => zero_ne_one ((eq_iff _ _ _ _).1 H)⟩
-    mul_inv_cancel := fun e =>
-      induction_on e fun ⟨m, x⟩ H => by
-        -- Porting note: restructured
-        have := mt (eq_iff _ _ _ _).2 H
-        rw [mk_inv, mk_mul_mk]
-        refine (eq_iff K p _ _).2 ?_
-        simp only [iterate_map_one, iterate_map_zero,
-            iterate_zero_apply, ← iterate_map_mul] at this ⊢
-        rw [mul_inv_cancel this, iterate_map_one]
-    inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero])
-    qsmul := qsmulRec _ }
+instance instDivisionRing : DivisionRing (PerfectClosure K p) where
+  exists_pair_ne := ⟨0, 1, fun H => zero_ne_one ((eq_iff _ _ _ _).1 H)⟩
+  mul_inv_cancel e := induction_on e fun ⟨m, x⟩ H ↦ by
+    have := mt (eq_iff _ _ _ _).2 H
+    rw [mk_inv, mk_mul_mk]
+    refine (eq_iff K p _ _).2 ?_
+    simp only [iterate_map_one, iterate_map_zero, iterate_zero_apply, ← iterate_map_mul] at this ⊢
+    rw [mul_inv_cancel this, iterate_map_one]
+  inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero])
+  qsmul := _
 
 instance instField : Field (PerfectClosure K p) :=
   { (inferInstance : DivisionRing (PerfectClosure K p)),
chore: Rename nat_cast/int_cast/rat_cast to natCast/intCast/ratCast (#11486)

Now that I am defining NNRat.cast, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast/intCast/ratCast over nat_cast/int_cast/rat_cast, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.

Diff
@@ -361,7 +361,7 @@ theorem mk_pow (x : ℕ × K) (n : ℕ) : mk K p x ^ n = mk K p (x.1, x.2 ^ n) :
     exact ⟨0, by simp_rw [iterate_frobenius, add_zero, mul_pow, ← pow_mul,
       ← pow_add, mul_assoc, ← pow_add]⟩
 
-theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) := by
+theorem natCast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) := by
   induction' n with n ih
   · induction' x with x ih
     · simp
@@ -370,26 +370,26 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) := by
   rw [ih]; apply Quot.sound
   -- Porting note: was `conv`
   suffices R K p (n, (x : K)) (Nat.succ n, frobenius K p (x : K)) by
-    rwa [frobenius_nat_cast K p x] at this
+    rwa [frobenius_natCast K p x] at this
   apply R.intro
-#align perfect_closure.nat_cast PerfectClosure.nat_cast
+#align perfect_closure.nat_cast PerfectClosure.natCast
 
-theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
-  induction x <;> simp only [Int.ofNat_eq_coe, Int.cast_natCast, Int.cast_negSucc, nat_cast K p 0]
+theorem intCast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
+  induction x <;> simp only [Int.ofNat_eq_coe, Int.cast_natCast, Int.cast_negSucc, natCast K p 0]
   rfl
-#align perfect_closure.int_cast PerfectClosure.int_cast
+#align perfect_closure.int_cast PerfectClosure.intCast
 
-theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y := by
+theorem natCast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y := by
   constructor <;> intro H
-  · rw [nat_cast K p 0, nat_cast K p 0, mk_eq_iff] at H
+  · rw [natCast K p 0, natCast K p 0, mk_eq_iff] at H
     cases' H with z H
-    simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
-  rw [nat_cast K p 0, nat_cast K p 0, H]
-#align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iff
+    simpa only [zero_add, iterate_fixed (frobenius_natCast K p _)] using H
+  rw [natCast K p 0, natCast K p 0, H]
+#align perfect_closure.nat_cast_eq_iff PerfectClosure.natCast_eq_iff
 
 instance instCharP : CharP (PerfectClosure K p) p := by
   constructor; intro x; rw [← CharP.cast_eq_zero_iff K]
-  rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
+  rw [← Nat.cast_zero, natCast_eq_iff, Nat.cast_zero]
 
 theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
chore(Data/Int/Cast): fix confusion between OfNat and Nat.cast lemmas (#11861)

This renames

  • Int.cast_ofNat to Int.cast_natCast
  • Int.int_cast_ofNat to Int.cast_ofNat

I think the history here is that this lemma was previously about Int.ofNat, before we globally fixed the simp-normal form to be Nat.cast.

Since the Int.cast_ofNat name is repurposed, it can't be deprecated. Int.int_cast_ofNat is such a wonky name that it was probably never used.

Diff
@@ -375,7 +375,7 @@ theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) := by
 #align perfect_closure.nat_cast PerfectClosure.nat_cast
 
 theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
-  induction x <;> simp only [Int.ofNat_eq_coe, Int.cast_ofNat, Int.cast_negSucc, nat_cast K p 0]
+  induction x <;> simp only [Int.ofNat_eq_coe, Int.cast_natCast, Int.cast_negSucc, nat_cast K p 0]
   rfl
 #align perfect_closure.int_cast PerfectClosure.int_cast
 
refactor(Algebra/GroupPower/IterateHom): Use HomClass to generalize map_iterate statements (#11266)

This PR uses the HomClass architecture to generalize the map_iterate statements in Algebra/GroupPower/IterateHom.lean.

Diff
@@ -168,11 +168,11 @@ instance instCommMonoid : CommMonoid (PerfectClosure K p) :=
     one_mul := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ =>
         congr_arg (Quot.mk _) <| by
-          simp only [RingHom.iterate_map_one, iterate_zero_apply, one_mul, zero_add]
+          simp only [iterate_map_one, iterate_zero_apply, one_mul, zero_add]
     mul_one := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ =>
         congr_arg (Quot.mk _) <| by
-          simp only [RingHom.iterate_map_one, iterate_zero_apply, mul_one, add_zero]
+          simp only [iterate_map_one, iterate_zero_apply, mul_one, add_zero]
     mul_comm := fun e f =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
         Quot.inductionOn f fun ⟨n, y⟩ =>
@@ -279,15 +279,15 @@ instance instAddCommGroup : AddCommGroup (PerfectClosure K p) :=
     zero_add := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ =>
         congr_arg (Quot.mk _) <| by
-          simp only [RingHom.iterate_map_zero, iterate_zero_apply, zero_add]
+          simp only [iterate_map_zero, iterate_zero_apply, zero_add]
     add_zero := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ =>
         congr_arg (Quot.mk _) <| by
-          simp only [RingHom.iterate_map_zero, iterate_zero_apply, add_zero]
+          simp only [iterate_map_zero, iterate_zero_apply, add_zero]
     sub_eq_add_neg := fun a b => rfl
     add_left_neg := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ => by
-        simp only [quot_mk_eq_mk, neg_mk, mk_add_mk, RingHom.iterate_map_neg, add_left_neg, mk_zero]
+        simp only [quot_mk_eq_mk, neg_mk, mk_add_mk, iterate_map_neg, add_left_neg, mk_zero]
     add_comm := fun e f =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
         Quot.inductionOn f fun ⟨n, y⟩ => congr_arg (Quot.mk _) <| by simp only [add_comm]
@@ -301,11 +301,11 @@ instance instCommRing : CommRing (PerfectClosure K p) :=
     zero_mul := fun a => by
       refine Quot.inductionOn a fun ⟨m, x⟩ => ?_
       rw [zero_def, quot_mk_eq_mk, mk_mul_mk]
-      simp only [zero_add, iterate_zero, id_eq, RingHom.iterate_map_zero, zero_mul, mk_zero]
+      simp only [zero_add, iterate_zero, id_eq, iterate_map_zero, zero_mul, mk_zero]
     mul_zero := fun a => by
       refine Quot.inductionOn a fun ⟨m, x⟩ => ?_
       rw [zero_def, quot_mk_eq_mk, mk_mul_mk]
-      simp only [zero_add, iterate_zero, id_eq, RingHom.iterate_map_zero, mul_zero, mk_zero]
+      simp only [zero_add, iterate_zero, id_eq, iterate_map_zero, mul_zero, mk_zero]
     left_distrib := fun e f g =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
         Quot.inductionOn f fun ⟨n, y⟩ =>
@@ -507,9 +507,9 @@ instance instDivisionRing : DivisionRing (PerfectClosure K p) :=
         have := mt (eq_iff _ _ _ _).2 H
         rw [mk_inv, mk_mul_mk]
         refine (eq_iff K p _ _).2 ?_
-        simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
+        simp only [iterate_map_one, iterate_map_zero,
             iterate_zero_apply, ← iterate_map_mul] at this ⊢
-        rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
+        rw [mul_inv_cancel this, iterate_map_one]
     inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero])
     qsmul := qsmulRec _ }
 
chore: classify "added theorem" porting notes (#11513)

Classifies by adding issue number #11432 to porting notes claiming "added theorem" or "added lemma".

Diff
@@ -492,7 +492,7 @@ instance instInv : Inv (PerfectClosure K p) :=
           rw [← inv_pow]
           apply R.intro⟩
 
--- Porting note: added
+-- Porting note (#10756): added theorem
 @[simp]
 theorem mk_inv (x : ℕ × K) : (mk K p x)⁻¹ = mk K p (x.1, x.2⁻¹) :=
   rfl
refactor: do not allow qsmul to default automatically (#11262)

Follows on from #6262. Again, this does not attempt to fix any diamonds; it only identifies where they may be.

Diff
@@ -510,7 +510,8 @@ instance instDivisionRing : DivisionRing (PerfectClosure K p) :=
         simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
             iterate_zero_apply, ← iterate_map_mul] at this ⊢
         rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
-    inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
+    inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero])
+    qsmul := qsmulRec _ }
 
 instance instField : Field (PerfectClosure K p) :=
   { (inferInstance : DivisionRing (PerfectClosure K p)),
refactor: do not allow nsmul and zsmul to default automatically (#6262)

This PR removes the default values for nsmul and zsmul, forcing the user to populate them manually. The previous behavior can be obtained by writing nsmul := nsmulRec and zsmul := zsmulRec, which is now in the docstring for these fields.

The motivation here is to make it more obvious when module diamonds are being introduced, or at least where they might be hiding; you can now simply search for nsmulRec in the source code.

Arguably we should do the same thing for intCast, natCast, pow, and zpow too, but diamonds are less common in those fields, so I'll leave them to a subsequent PR.

Co-authored-by: Matthew Ballard <matt@mrb.email>

Diff
@@ -290,7 +290,9 @@ instance instAddCommGroup : AddCommGroup (PerfectClosure K p) :=
         simp only [quot_mk_eq_mk, neg_mk, mk_add_mk, RingHom.iterate_map_neg, add_left_neg, mk_zero]
     add_comm := fun e f =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
-        Quot.inductionOn f fun ⟨n, y⟩ => congr_arg (Quot.mk _) <| by simp only [add_comm] }
+        Quot.inductionOn f fun ⟨n, y⟩ => congr_arg (Quot.mk _) <| by simp only [add_comm]
+    nsmul := nsmulRec
+    zsmul := zsmulRec }
 
 instance instCommRing : CommRing (PerfectClosure K p) :=
   { instAddCommGroup K p, AddMonoidWithOne.unary,
chore: use mk_pow to simply proof of frobenius_mk (#11024)

Uses mk_pow, which was recently introduced in #10282, to simplify the proof of frobenius_mk.

After this change, I observe the time reported by trace.profiler to drop from 0.10 to 0.035 seconds on this theorem.

Diff
@@ -393,17 +393,7 @@ theorem frobenius_mk (x : ℕ × K) :
     (frobenius (PerfectClosure K p) p : PerfectClosure K p → PerfectClosure K p) (mk K p x) =
       mk _ _ (x.1, x.2 ^ p) := by
   simp only [frobenius_def]
-  cases' x with n x
-  dsimp only
-  suffices ∀ p' : ℕ, mk K p (n, x) ^ p' = mk K p (n, x ^ p') by apply this
-  intro p
-  induction p with
-  | zero => apply R.sound; rw [(frobenius _ _).iterate_map_one, pow_zero]
-  | succ p ih =>
-    rw [pow_succ, ih]
-    symm
-    apply R.sound
-    simp only [pow_succ, iterate_map_mul]
+  exact mk_pow K p x p
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 
 /-- Embedding of `K` into `PerfectClosure K p` -/
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -435,7 +435,8 @@ instance instPerfectRing : PerfectRing (PerfectClosure K p) p where
       match x, y, H with
       | _, _, R.intro n x => Quot.sound (R.intro _ _)
     refine bijective_iff_has_inverse.mpr ⟨f, fun e ↦ induction_on e fun ⟨n, x⟩ ↦ ?_,
-      fun e ↦ induction_on e fun ⟨n, x⟩ ↦ ?_⟩ <;> simp only [liftOn_mk, frobenius_mk, mk_succ_pow]
+      fun e ↦ induction_on e fun ⟨n, x⟩ ↦ ?_⟩ <;>
+      simp only [f, liftOn_mk, frobenius_mk, mk_succ_pow]
 
 @[simp]
 theorem iterate_frobenius_mk (n : ℕ) (x : K) :
refactor(FieldTheory/PerfectClosure): change the order of some results (#10282)
  • Now the perfect closure is a perfect ring without requiring base ring to be a field.
  • Add mk_pow and mk_surjective.
  • Add explicit names to all of the instances.
  • Add docstrings for the file.
Diff
@@ -8,7 +8,44 @@ import Mathlib.FieldTheory.Perfect
 #align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
 
 /-!
-# The perfect closure of a field
+
+# The perfect closure of a characteristic `p` ring
+
+## Main definitions
+
+- `PerfectClosure`: the perfect closure of a characteristic `p` ring, which is the smallest
+  extension that makes frobenius surjective.
+
+- `PerfectClosure.mk K p (n, x)`: for `n : ℕ` and `x : K` this is `x ^ (p ^ -n)` viewed as
+  an element of `PerfectClosure K p`. Every element of `PerfectClosure K p` is of this form
+  (`PerfectClosure.mk_surjective`).
+
+- `PerfectClosure.of`: the structure map from `K` to `PerfectClosure K p`.
+
+- `PerfectClosure.lift`: given a ring `K` of characteristic `p` and a perfect ring `L` of the same
+  characteristic, any homomorphism `K →+* L` can be lifted to `PerfectClosure K p`.
+
+## Main results
+
+- `PerfectClosure.induction_on`: to prove a result for all elements of the prefect closure, one only
+  needs to prove it for all elements of the form `x ^ (p ^ -n)`.
+
+- `PerfectClosure.mk_mul_mk`, `PerfectClosure.one_def`, `PerfectClosure.mk_add_mk`,
+  `PerfectClosure.neg_mk`, `PerfectClosure.zero_def`, `PerfectClosure.mk_zero_zero`,
+  `PerfectClosure.mk_zero`, `PerfectClosure.mk_inv`, `PerfectClosure.mk_pow`:
+  how to do multiplication, addition, etc. on elements of form `x ^ (p ^ -n)`.
+
+- `PerfectClosure.mk_eq_iff`: when does `x ^ (p ^ -n)` equal.
+
+- `PerfectClosure.eq_iff`: same as `PerfectClosure.mk_eq_iff` but with additional assumption that
+  `K` being reduced, hence gives a simpler criterion.
+
+- `PerfectClosure.instPerfectRing`: `PerfectClosure K p` is a perfect ring.
+
+## Tags
+
+perfect ring, perfect closure
+
 -/
 
 universe u v
@@ -19,7 +56,8 @@ section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-/-- `PerfectClosure K p` is the quotient by this relation. -/
+/-- `PerfectClosure.R` is the relation `(n, x) ∼ (n + 1, x ^ p)` for `n : ℕ` and `x : K`.
+`PerfectClosure K p` is the quotient by this relation. -/
 @[mk_iff]
 inductive PerfectClosure.R : ℕ × K → ℕ × K → Prop
   | intro : ∀ n x, PerfectClosure.R (n, x) (n + 1, frobenius K p x)
@@ -40,11 +78,15 @@ section Ring
 
 variable [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
 
-/-- Constructor for `PerfectClosure`. -/
+/-- `PerfectClosure.mk K p (n, x)` for `n : ℕ` and `x : K` is an element of `PerfectClosure K p`,
+viewed as `x ^ (p ^ -n)`. Every element of `PerfectClosure K p` is of this form
+(`PerfectClosure.mk_surjective`). -/
 def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
 
+theorem mk_surjective : Function.Surjective (mk K p) := surjective_quot_mk _
+
 @[simp] theorem mk_succ_pow (m : ℕ) (x : K) : mk K p ⟨m + 1, x ^ p⟩ = mk K p ⟨m, x⟩ :=
   Eq.symm <| Quot.sound (R.intro m x)
 
@@ -95,7 +137,7 @@ private theorem mul_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
       rw [← iterate_succ_apply, iterate_succ_apply', iterate_succ_apply', ← frobenius_mul]
       apply R.intro
 
-instance : Mul (PerfectClosure K p) :=
+instance instMul : Mul (PerfectClosure K p) :=
   ⟨Quot.lift
       (fun x : ℕ × K =>
         Quot.lift
@@ -112,7 +154,7 @@ theorem mk_mul_mk (x y : ℕ × K) :
   rfl
 #align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mk
 
-instance : CommMonoid (PerfectClosure K p) :=
+instance instCommMonoid : CommMonoid (PerfectClosure K p) :=
   { (inferInstance : Mul (PerfectClosure K p)) with
     mul_assoc := fun e f g =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
@@ -140,7 +182,7 @@ theorem one_def : (1 : PerfectClosure K p) = mk K p (0, 1) :=
   rfl
 #align perfect_closure.one_def PerfectClosure.one_def
 
-instance : Inhabited (PerfectClosure K p) :=
+instance instInhabited : Inhabited (PerfectClosure K p) :=
   ⟨1⟩
 
 private theorem add_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
@@ -162,7 +204,7 @@ private theorem add_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
       rw [← iterate_succ_apply, iterate_succ_apply', iterate_succ_apply', ← frobenius_add]
       apply R.intro
 
-instance : Add (PerfectClosure K p) :=
+instance instAdd : Add (PerfectClosure K p) :=
   ⟨Quot.lift
       (fun x : ℕ × K =>
         Quot.lift
@@ -179,7 +221,7 @@ theorem mk_add_mk (x y : ℕ × K) :
   rfl
 #align perfect_closure.mk_add_mk PerfectClosure.mk_add_mk
 
-instance : Neg (PerfectClosure K p) :=
+instance instNeg : Neg (PerfectClosure K p) :=
   ⟨Quot.lift (fun x : ℕ × K => mk K p (x.1, -x.2)) fun x y (H : R K p x y) =>
       match x, y, H with
       | _, _, R.intro n x => Quot.sound <| by rw [← frobenius_neg]; apply R.intro⟩
@@ -189,7 +231,7 @@ theorem neg_mk (x : ℕ × K) : -mk K p x = mk K p (x.1, -x.2) :=
   rfl
 #align perfect_closure.neg_mk PerfectClosure.neg_mk
 
-instance : Zero (PerfectClosure K p) :=
+instance instZero : Zero (PerfectClosure K p) :=
   ⟨mk K p (0, 0)⟩
 
 theorem zero_def : (0 : PerfectClosure K p) = mk K p (0, 0) :=
@@ -223,7 +265,7 @@ theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p)^[m] x = y) :
   apply R.intro
 #align perfect_closure.r.sound PerfectClosure.R.sound
 
-instance PerfectClosure.addCommGroup : AddCommGroup (PerfectClosure K p) :=
+instance instAddCommGroup : AddCommGroup (PerfectClosure K p) :=
   { (inferInstance : Add (PerfectClosure K p)),
     (inferInstance : Neg (PerfectClosure K p)) with
     add_assoc := fun e f g =>
@@ -250,8 +292,8 @@ instance PerfectClosure.addCommGroup : AddCommGroup (PerfectClosure K p) :=
       Quot.inductionOn e fun ⟨m, x⟩ =>
         Quot.inductionOn f fun ⟨n, y⟩ => congr_arg (Quot.mk _) <| by simp only [add_comm] }
 
-instance PerfectClosure.commRing : CommRing (PerfectClosure K p) :=
-  { PerfectClosure.addCommGroup K p, AddMonoidWithOne.unary,
+instance instCommRing : CommRing (PerfectClosure K p) :=
+  { instAddCommGroup K p, AddMonoidWithOne.unary,
     (inferInstance : CommMonoid (PerfectClosure K p)) with
     -- Porting note: added `zero_mul`, `mul_zero`
     zero_mul := fun a => by
@@ -281,7 +323,7 @@ instance PerfectClosure.commRing : CommRing (PerfectClosure K p) :=
             simp only [iterate_map_mul, iterate_map_add, ← iterate_add_apply,
               add_mul, add_comm, add_left_comm] }
 
-theorem eq_iff' (x y : ℕ × K) :
+theorem mk_eq_iff (x y : ℕ × K) :
     mk K p x = mk K p y ↔ ∃ z, (frobenius K p)^[y.1 + z] x.2 = (frobenius K p)^[x.1 + z] y.2 := by
   constructor
   · intro H
@@ -304,7 +346,18 @@ theorem eq_iff' (x y : ℕ × K) :
   cases' H with z H; dsimp only at H
   rw [R.sound K p (n + z) m x _ rfl, R.sound K p (m + z) n y _ rfl, H]
   rw [add_assoc, add_comm, add_comm z]
-#align perfect_closure.eq_iff' PerfectClosure.eq_iff'
+#align perfect_closure.eq_iff' PerfectClosure.mk_eq_iff
+
+@[simp]
+theorem mk_pow (x : ℕ × K) (n : ℕ) : mk K p x ^ n = mk K p (x.1, x.2 ^ n) := by
+  induction n with
+  | zero =>
+    rw [pow_zero, pow_zero, one_def, mk_eq_iff]
+    exact ⟨0, by simp_rw [← coe_iterateFrobenius, map_one]⟩
+  | succ n ih =>
+    rw [pow_succ, pow_succ, ih, mk_mul_mk, mk_eq_iff]
+    exact ⟨0, by simp_rw [iterate_frobenius, add_zero, mul_pow, ← pow_mul,
+      ← pow_add, mul_assoc, ← pow_add]⟩
 
 theorem nat_cast (n x : ℕ) : (x : PerfectClosure K p) = mk K p (n, x) := by
   induction' n with n ih
@@ -326,13 +379,13 @@ theorem int_cast (x : ℤ) : (x : PerfectClosure K p) = mk K p (0, x) := by
 
 theorem nat_cast_eq_iff (x y : ℕ) : (x : PerfectClosure K p) = y ↔ (x : K) = y := by
   constructor <;> intro H
-  · rw [nat_cast K p 0, nat_cast K p 0, eq_iff'] at H
+  · rw [nat_cast K p 0, nat_cast K p 0, mk_eq_iff] at H
     cases' H with z H
     simpa only [zero_add, iterate_fixed (frobenius_nat_cast K p _)] using H
   rw [nat_cast K p 0, nat_cast K p 0, H]
 #align perfect_closure.nat_cast_eq_iff PerfectClosure.nat_cast_eq_iff
 
-instance : CharP (PerfectClosure K p) p := by
+instance instCharP : CharP (PerfectClosure K p) p := by
   constructor; intro x; rw [← CharP.cast_eq_zero_iff K]
   rw [← Nat.cast_zero, nat_cast_eq_iff, Nat.cast_zero]
 
@@ -366,67 +419,23 @@ theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
   rfl
 #align perfect_closure.of_apply PerfectClosure.of_apply
 
-end Ring
-
-theorem eq_iff [CommRing K] [IsReduced K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
-    Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p)^[y.1] x.2 = (frobenius K p)^[x.1] y.2 :=
-  (eq_iff' K p x y).trans
-    ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
-      fun H => ⟨0, H⟩⟩
-#align perfect_closure.eq_iff PerfectClosure.eq_iff
-
-section Field
-
-variable [Field K] (p : ℕ) [Fact p.Prime] [CharP K p]
-
-instance : Inv (PerfectClosure K p) :=
-  ⟨Quot.lift (fun x : ℕ × K => Quot.mk (R K p) (x.1, x.2⁻¹)) fun x y (H : R K p x y) =>
-      match x, y, H with
-      | _, _, R.intro n x =>
-        Quot.sound <| by
-          simp only [frobenius_def]
-          rw [← inv_pow]
-          apply R.intro⟩
-
--- Porting note: added
-@[simp]
-theorem mk_inv (x : ℕ × K) : (mk K p x)⁻¹ = mk K p (x.1, x.2⁻¹) :=
-  rfl
-
--- Porting note: added to avoid "unknown free variable" error
-instance : DivisionRing (PerfectClosure K p) :=
-  { (inferInstance : Inv (PerfectClosure K p)) with
-    exists_pair_ne := ⟨0, 1, fun H => zero_ne_one ((eq_iff _ _ _ _).1 H)⟩
-    mul_inv_cancel := fun e =>
-      induction_on e fun ⟨m, x⟩ H => by
-        -- Porting note: restructured
-        have := mt (eq_iff _ _ _ _).2 H
-        rw [mk_inv, mk_mul_mk]
-        refine (eq_iff K p _ _).2 ?_
-        simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
-            iterate_zero_apply, ← iterate_map_mul] at this ⊢
-        rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
-    inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
-
-instance : Field (PerfectClosure K p) :=
-  { (inferInstance : DivisionRing (PerfectClosure K p)),
-    (inferInstance : CommRing (PerfectClosure K p)) with }
+instance instReduced : IsReduced (PerfectClosure K p) where
+  eq_zero x := induction_on x fun x ⟨n, h⟩ ↦ by
+    replace h : mk K p x ^ p ^ n = 0 := by
+      rw [← Nat.sub_add_cancel ((Nat.lt_pow_self (Fact.out : p.Prime).one_lt n).le),
+        pow_add, h, mul_zero]
+    simp only [zero_def, mk_pow, mk_eq_iff, zero_add, ← coe_iterateFrobenius, map_zero] at h ⊢
+    obtain ⟨m, h⟩ := h
+    exact ⟨n + m, by simpa only [iterateFrobenius_def, pow_add, pow_mul] using h⟩
 
-instance : PerfectRing (PerfectClosure K p) p where
+instance instPerfectRing : PerfectRing (PerfectClosure K p) p where
   bijective_frobenius := by
     let f : PerfectClosure K p → PerfectClosure K p := fun e ↦
       liftOn e (fun x => mk K p (x.1 + 1, x.2)) fun x y H =>
       match x, y, H with
       | _, _, R.intro n x => Quot.sound (R.intro _ _)
-    have hl : LeftInverse f (frobenius (PerfectClosure K p) p) := fun e ↦
-      induction_on e fun ⟨n, x⟩ => by
-        simp only [liftOn_mk, frobenius_mk]
-        exact (Quot.sound <| R.intro _ _).symm
-    have hr : RightInverse f (frobenius (PerfectClosure K p) p) := fun e ↦
-      induction_on e fun ⟨n, x⟩ => by
-        simp only [liftOn_mk, frobenius_mk]
-        exact (Quot.sound <| R.intro _ _).symm
-    exact bijective_iff_has_inverse.mpr ⟨f, hl, hr⟩
+    refine bijective_iff_has_inverse.mpr ⟨f, fun e ↦ induction_on e fun ⟨n, x⟩ ↦ ?_,
+      fun e ↦ induction_on e fun ⟨n, x⟩ ↦ ?_⟩ <;> simp only [liftOn_mk, frobenius_mk, mk_succ_pow]
 
 @[simp]
 theorem iterate_frobenius_mk (n : ℕ) (x : K) :
@@ -434,7 +443,7 @@ theorem iterate_frobenius_mk (n : ℕ) (x : K) :
   induction' n with n ih; rfl
   rw [iterate_succ_apply, ← ih, frobenius_mk, mk_succ_pow]
 
-/-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
+/-- Given a ring `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `PerfectClosure K p`. -/
 noncomputable def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
     (K →+* L) ≃ (PerfectClosure K p →+* L) where
@@ -468,6 +477,54 @@ noncomputable def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L
       RightInverse.iterate (frobenius_apply_frobeniusEquiv_symm L p) n]
 #align perfect_closure.lift PerfectClosure.lift
 
+end Ring
+
+theorem eq_iff [CommRing K] [IsReduced K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
+    mk K p x = mk K p y ↔ (frobenius K p)^[y.1] x.2 = (frobenius K p)^[x.1] y.2 :=
+  (mk_eq_iff K p x y).trans
+    ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
+      fun H => ⟨0, H⟩⟩
+#align perfect_closure.eq_iff PerfectClosure.eq_iff
+
+section Field
+
+variable [Field K] (p : ℕ) [Fact p.Prime] [CharP K p]
+
+instance instInv : Inv (PerfectClosure K p) :=
+  ⟨Quot.lift (fun x : ℕ × K => Quot.mk (R K p) (x.1, x.2⁻¹)) fun x y (H : R K p x y) =>
+      match x, y, H with
+      | _, _, R.intro n x =>
+        Quot.sound <| by
+          simp only [frobenius_def]
+          rw [← inv_pow]
+          apply R.intro⟩
+
+-- Porting note: added
+@[simp]
+theorem mk_inv (x : ℕ × K) : (mk K p x)⁻¹ = mk K p (x.1, x.2⁻¹) :=
+  rfl
+
+-- Porting note: added to avoid "unknown free variable" error
+instance instDivisionRing : DivisionRing (PerfectClosure K p) :=
+  { (inferInstance : Inv (PerfectClosure K p)) with
+    exists_pair_ne := ⟨0, 1, fun H => zero_ne_one ((eq_iff _ _ _ _).1 H)⟩
+    mul_inv_cancel := fun e =>
+      induction_on e fun ⟨m, x⟩ H => by
+        -- Porting note: restructured
+        have := mt (eq_iff _ _ _ _).2 H
+        rw [mk_inv, mk_mul_mk]
+        refine (eq_iff K p _ _).2 ?_
+        simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
+            iterate_zero_apply, ← iterate_map_mul] at this ⊢
+        rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
+    inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
+
+instance instField : Field (PerfectClosure K p) :=
+  { (inferInstance : DivisionRing (PerfectClosure K p)),
+    (inferInstance : CommRing (PerfectClosure K p)) with }
+
+instance instPerfectField : PerfectField (PerfectClosure K p) := PerfectRing.toPerfectField _ p
+
 end Field
 
 end PerfectClosure
chore(*): replace $ with <| (#9319)

See Zulip thread for the discussion.

Diff
@@ -46,7 +46,7 @@ def mk (x : ℕ × K) : PerfectClosure K p :=
 #align perfect_closure.mk PerfectClosure.mk
 
 @[simp] theorem mk_succ_pow (m : ℕ) (x : K) : mk K p ⟨m + 1, x ^ p⟩ = mk K p ⟨m, x⟩ :=
-  Eq.symm $ Quot.sound (R.intro m x)
+  Eq.symm <| Quot.sound (R.intro m x)
 
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
style: use cases x with | ... instead of cases x; case => ... (#9321)

This converts usages of the pattern

cases h
case inl h' => ...
case inr h' => ...

which derive from mathported code, to the "structured cases" syntax:

cases h with
| inl h' => ...
| inr h' => ...

The case where the subgoals are handled with · instead of case is more contentious (and much more numerous) so I left those alone. This pattern also appears with cases', induction, induction', and rcases. Furthermore, there is a similar transformation for by_cases:

by_cases h : cond
case pos => ...
case neg => ...

is replaced by:

if h : cond then
  ...
else
  ...

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -286,11 +286,11 @@ theorem eq_iff' (x y : ℕ × K) :
   constructor
   · intro H
     replace H := Quot.exact _ H
-    induction H
-    case rel x y H => cases' H with n x; exact ⟨0, rfl⟩
-    case refl H => exact ⟨0, rfl⟩
-    case symm x y H ih => cases' ih with w ih; exact ⟨w, ih.symm⟩
-    case trans x y z H1 H2 ih1 ih2 =>
+    induction H with
+    | rel x y H => cases' H with n x; exact ⟨0, rfl⟩
+    | refl H => exact ⟨0, rfl⟩
+    | symm x y H ih => cases' ih with w ih; exact ⟨w, ih.symm⟩
+    | trans x y z H1 H2 ih1 ih2 =>
       cases' ih1 with z1 ih1
       cases' ih2 with z2 ih2
       exists z2 + (y.1 + z1)
@@ -344,9 +344,9 @@ theorem frobenius_mk (x : ℕ × K) :
   dsimp only
   suffices ∀ p' : ℕ, mk K p (n, x) ^ p' = mk K p (n, x ^ p') by apply this
   intro p
-  induction' p with p ih
-  case zero => apply R.sound; rw [(frobenius _ _).iterate_map_one, pow_zero]
-  case succ =>
+  induction p with
+  | zero => apply R.sound; rw [(frobenius _ _).iterate_map_one, pow_zero]
+  | succ p ih =>
     rw [pow_succ, ih]
     symm
     apply R.sound
chore: refactor perfect rings / fields (#6182)

The main changes are:

  • we replace the data-bearing PerfectRing typeclass with a Prop-valued (non-constructive) version,
  • we introduce a new typeclass PerfectField,
  • we add a proof that a perfect field of positive characteristic has surjective Frobenius map,
  • we add some basic facts such as perfection of finite rings / fields and products of perfect rings.
Diff
@@ -3,9 +3,7 @@ Copyright (c) 2018 Kenny Lau. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
 -/
-import Mathlib.Algebra.CharP.Basic
-import Mathlib.Algebra.Hom.Iterate
-import Mathlib.Algebra.Ring.Equiv
+import Mathlib.FieldTheory.Perfect
 
 #align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
 
@@ -13,118 +11,10 @@ import Mathlib.Algebra.Ring.Equiv
 # The perfect closure of a field
 -/
 
-
 universe u v
 
 open Function
 
-section Defs
-
-variable (R : Type u) [CommSemiring R] (p : ℕ) [Fact p.Prime] [CharP R p]
-
-/-- A perfect ring is a ring of characteristic p that has p-th root. -/
-class PerfectRing : Type u where
-  pthRoot' : R → R
-  frobenius_pthRoot' : ∀ x, frobenius R p (pthRoot' x) = x
-  pthRoot_frobenius' : ∀ x, pthRoot' (frobenius R p x) = x
-#align perfect_ring PerfectRing
-
-/-- Frobenius automorphism of a perfect ring. -/
-def frobeniusEquiv [PerfectRing R p] : R ≃+* R :=
-  { frobenius R p with
-    invFun := PerfectRing.pthRoot' p
-    left_inv := PerfectRing.pthRoot_frobenius'
-    right_inv := PerfectRing.frobenius_pthRoot' }
-#align frobenius_equiv frobeniusEquiv
-
-/-- `p`-th root of an element in a `PerfectRing` as a `RingHom`. -/
-def pthRoot [PerfectRing R p] : R →+* R :=
-  (frobeniusEquiv R p).symm
-#align pth_root pthRoot
-
-end Defs
-
-section
-
-variable {R : Type u} [CommSemiring R] {S : Type v} [CommSemiring S] (f : R →* S) (g : R →+* S)
-  {p : ℕ} [Fact p.Prime] [CharP R p] [PerfectRing R p] [CharP S p] [PerfectRing S p]
-
-@[simp]
-theorem coe_frobeniusEquiv : ⇑(frobeniusEquiv R p) = frobenius R p :=
-  rfl
-#align coe_frobenius_equiv coe_frobeniusEquiv
-
-@[simp]
-theorem coe_frobeniusEquiv_symm : ⇑(frobeniusEquiv R p).symm = pthRoot R p :=
-  rfl
-#align coe_frobenius_equiv_symm coe_frobeniusEquiv_symm
-
-@[simp]
-theorem frobenius_pthRoot (x : R) : frobenius R p (pthRoot R p x) = x :=
-  (frobeniusEquiv R p).apply_symm_apply x
-#align frobenius_pth_root frobenius_pthRoot
-
-@[simp]
-theorem pthRoot_pow_p (x : R) : pthRoot R p x ^ p = x :=
-  frobenius_pthRoot x
-#align pth_root_pow_p pthRoot_pow_p
-
-@[simp]
-theorem pthRoot_frobenius (x : R) : pthRoot R p (frobenius R p x) = x :=
-  (frobeniusEquiv R p).symm_apply_apply x
-#align pth_root_frobenius pthRoot_frobenius
-
--- Porting note: @[simp] can prove this
-theorem pthRoot_pow_p' (x : R) : pthRoot R p (x ^ p) = x :=
-  pthRoot_frobenius x
-#align pth_root_pow_p' pthRoot_pow_p'
-
-theorem leftInverse_pthRoot_frobenius : LeftInverse (pthRoot R p) (frobenius R p) :=
-  pthRoot_frobenius
-#align left_inverse_pth_root_frobenius leftInverse_pthRoot_frobenius
-
-theorem rightInverse_pthRoot_frobenius : Function.RightInverse (pthRoot R p) (frobenius R p) :=
-  frobenius_pthRoot
-#align right_inverse_pth_root_frobenius rightInverse_pthRoot_frobenius
-
-theorem commute_frobenius_pthRoot : Function.Commute (frobenius R p) (pthRoot R p) := fun x =>
-  (frobenius_pthRoot x).trans (pthRoot_frobenius x).symm
-#align commute_frobenius_pth_root commute_frobenius_pthRoot
-
-theorem eq_pthRoot_iff {x y : R} : x = pthRoot R p y ↔ frobenius R p x = y :=
-  (frobeniusEquiv R p).toEquiv.eq_symm_apply
-#align eq_pth_root_iff eq_pthRoot_iff
-
-theorem pthRoot_eq_iff {x y : R} : pthRoot R p x = y ↔ x = frobenius R p y :=
-  (frobeniusEquiv R p).toEquiv.symm_apply_eq
-#align pth_root_eq_iff pthRoot_eq_iff
-
-theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
-  eq_pthRoot_iff.2 <| by rw [← f.map_frobenius, frobenius_pthRoot]
-#align monoid_hom.map_pth_root MonoidHom.map_pthRoot
-
-theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
-    f ((pthRoot R p)^[n] x) = (pthRoot S p)^[n] (f x) :=
-  Semiconj.iterate_right f.map_pthRoot n x
-#align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
-
-theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
-  g.toMonoidHom.map_pthRoot x
-#align ring_hom.map_pth_root RingHom.map_pthRoot
-
-theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
-    g ((pthRoot R p)^[n] x) = (pthRoot S p)^[n] (g x) :=
-  g.toMonoidHom.map_iterate_pthRoot x n
-#align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRoot
-
-variable (p)
-
-theorem injective_pow_p {x y : R} (hxy : x ^ p = y ^ p) : x = y :=
-  leftInverse_pthRoot_frobenius.injective hxy
-#align injective_pow_p injective_pow_p
-
-end
-
 section
 
 variable (K : Type u) [CommRing K] (p : ℕ) [Fact p.Prime] [CharP K p]
@@ -155,6 +45,9 @@ def mk (x : ℕ × K) : PerfectClosure K p :=
   Quot.mk (R K p) x
 #align perfect_closure.mk PerfectClosure.mk
 
+@[simp] theorem mk_succ_pow (m : ℕ) (x : K) : mk K p ⟨m + 1, x ^ p⟩ = mk K p ⟨m, x⟩ :=
+  Eq.symm $ Quot.sound (R.intro m x)
+
 @[simp]
 theorem quot_mk_eq_mk (x : ℕ × K) : (Quot.mk (R K p) x : PerfectClosure K p) = mk K p x :=
   rfl
@@ -227,7 +120,7 @@ instance : CommMonoid (PerfectClosure K p) :=
           Quot.inductionOn g fun ⟨s, z⟩ => by
             simp only [quot_mk_eq_mk, mk_mul_mk] -- Porting note: added this line
             apply congr_arg (Quot.mk _)
-            simp only [add_assoc, mul_assoc, RingHom.iterate_map_mul, ← iterate_add_apply,
+            simp only [add_assoc, mul_assoc, iterate_map_mul, ← iterate_add_apply,
               add_comm, add_left_comm]
     one := mk K p (0, 1)
     one_mul := fun e =>
@@ -339,7 +232,7 @@ instance PerfectClosure.addCommGroup : AddCommGroup (PerfectClosure K p) :=
           Quot.inductionOn g fun ⟨s, z⟩ => by
             simp only [quot_mk_eq_mk, mk_add_mk] -- Porting note: added this line
             apply congr_arg (Quot.mk _)
-            simp only [RingHom.iterate_map_add, ← iterate_add_apply, add_assoc, add_comm s _]
+            simp only [iterate_map_add, ← iterate_add_apply, add_assoc, add_comm s _]
     zero := 0
     zero_add := fun e =>
       Quot.inductionOn e fun ⟨n, x⟩ =>
@@ -376,7 +269,7 @@ instance PerfectClosure.commRing : CommRing (PerfectClosure K p) :=
             simp only [quot_mk_eq_mk, mk_add_mk, mk_mul_mk] -- Porting note: added this line
             simp only [add_assoc, add_comm, add_left_comm]
             apply R.sound
-            simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
+            simp only [iterate_map_mul, iterate_map_add, ← iterate_add_apply,
               mul_add, add_comm, add_left_comm]
     right_distrib := fun e f g =>
       Quot.inductionOn e fun ⟨m, x⟩ =>
@@ -385,7 +278,7 @@ instance PerfectClosure.commRing : CommRing (PerfectClosure K p) :=
             simp only [quot_mk_eq_mk, mk_add_mk, mk_mul_mk] -- Porting note: added this line
             simp only [add_assoc, add_comm _ s, add_left_comm _ s]
             apply R.sound
-            simp only [RingHom.iterate_map_mul, RingHom.iterate_map_add, ← iterate_add_apply,
+            simp only [iterate_map_mul, iterate_map_add, ← iterate_add_apply,
               add_mul, add_comm, add_left_comm] }
 
 theorem eq_iff' (x y : ℕ × K) :
@@ -457,7 +350,7 @@ theorem frobenius_mk (x : ℕ × K) :
     rw [pow_succ, ih]
     symm
     apply R.sound
-    simp only [pow_succ, (frobenius _ _).iterate_map_mul]
+    simp only [pow_succ, iterate_map_mul]
 #align perfect_closure.frobenius_mk PerfectClosure.frobenius_mk
 
 /-- Embedding of `K` into `PerfectClosure K p` -/
@@ -475,7 +368,7 @@ theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
 
 end Ring
 
-theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
+theorem eq_iff [CommRing K] [IsReduced K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
     Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p)^[y.1] x.2 = (frobenius K p)^[x.1] y.2 :=
   (eq_iff' K p x y).trans
     ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
@@ -511,7 +404,7 @@ instance : DivisionRing (PerfectClosure K p) :=
         rw [mk_inv, mk_mul_mk]
         refine (eq_iff K p _ _).2 ?_
         simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
-            iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this ⊢
+            iterate_zero_apply, ← iterate_map_mul] at this ⊢
         rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
     inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
 
@@ -520,69 +413,61 @@ instance : Field (PerfectClosure K p) :=
     (inferInstance : CommRing (PerfectClosure K p)) with }
 
 instance : PerfectRing (PerfectClosure K p) p where
-  pthRoot' e :=
-    liftOn e (fun x => mk K p (x.1 + 1, x.2)) fun x y H =>
+  bijective_frobenius := by
+    let f : PerfectClosure K p → PerfectClosure K p := fun e ↦
+      liftOn e (fun x => mk K p (x.1 + 1, x.2)) fun x y H =>
       match x, y, H with
       | _, _, R.intro n x => Quot.sound (R.intro _ _)
-  frobenius_pthRoot' e :=
-    induction_on e fun ⟨n, x⟩ => by
-      simp only [liftOn_mk, frobenius_mk]
-      exact (Quot.sound <| R.intro _ _).symm
-  pthRoot_frobenius' e :=
-    induction_on e fun ⟨n, x⟩ => by
-      simp only [liftOn_mk, frobenius_mk]
-      exact (Quot.sound <| R.intro _ _).symm
-
-theorem eq_pthRoot (x : ℕ × K) :
-    mk K p x = (pthRoot (PerfectClosure K p) p)^[x.1] (of K p x.2) := by
-  rcases x with ⟨m, x⟩
-  induction' m with m ih
-  · rfl
-  rw [iterate_succ_apply', ← ih]
-  rfl
-#align perfect_closure.eq_pth_root PerfectClosure.eq_pthRoot
+    have hl : LeftInverse f (frobenius (PerfectClosure K p) p) := fun e ↦
+      induction_on e fun ⟨n, x⟩ => by
+        simp only [liftOn_mk, frobenius_mk]
+        exact (Quot.sound <| R.intro _ _).symm
+    have hr : RightInverse f (frobenius (PerfectClosure K p) p) := fun e ↦
+      induction_on e fun ⟨n, x⟩ => by
+        simp only [liftOn_mk, frobenius_mk]
+        exact (Quot.sound <| R.intro _ _).symm
+    exact bijective_iff_has_inverse.mpr ⟨f, hl, hr⟩
+
+@[simp]
+theorem iterate_frobenius_mk (n : ℕ) (x : K) :
+    (frobenius (PerfectClosure K p) p)^[n] (mk K p ⟨n, x⟩) = of K p x := by
+  induction' n with n ih; rfl
+  rw [iterate_succ_apply, ← ih, frobenius_mk, mk_succ_pow]
 
 /-- Given a field `K` of characteristic `p` and a perfect ring `L` of the same characteristic,
 any homomorphism `K →+* L` can be lifted to `PerfectClosure K p`. -/
-def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
+noncomputable def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
     (K →+* L) ≃ (PerfectClosure K p →+* L) where
   toFun f :=
     { toFun := by
-        refine' fun e => liftOn e (fun x => (pthRoot L p)^[x.1] (f x.2)) _
-        rintro a b ⟨n⟩
-        simp only [f.map_frobenius, iterate_succ_apply, pthRoot_frobenius],
-      map_one' := f.map_one,
-      map_zero' := f.map_zero,
+        refine' fun e => liftOn e (fun x => (frobeniusEquiv L p).symm^[x.1] (f x.2)) _
+        rintro - - ⟨n, x⟩
+        simp [f.map_frobenius]
+      map_one' := f.map_one
+      map_zero' := f.map_zero
       map_mul' := by
-        have := (leftInverse_pthRoot_frobenius (R := L) (p := p)).iterate
-        rintro ⟨x⟩ ⟨y⟩
-        simp only [quot_mk_eq_mk, liftOn_mk, mk_mul_mk, RingHom.map_iterate_frobenius,
-          RingHom.iterate_map_mul, RingHom.map_mul]
-        rw [iterate_add_apply, this _ _, add_comm, iterate_add_apply, this _ _],
+        rintro ⟨n, x⟩ ⟨m, y⟩
+        simp only [quot_mk_eq_mk, liftOn_mk, f.map_iterate_frobenius, mk_mul_mk, map_mul,
+          iterate_map_mul]
+        have := LeftInverse.iterate (frobeniusEquiv_symm_apply_frobenius L p)
+        rw [iterate_add_apply, this _ _, add_comm, iterate_add_apply, this _ _]
       map_add' := by
-        have := (leftInverse_pthRoot_frobenius (R := L) (p := p)).iterate
-        rintro ⟨x⟩ ⟨y⟩
-        simp only [quot_mk_eq_mk, liftOn_mk, mk_add_mk, RingHom.map_iterate_frobenius,
-          RingHom.iterate_map_add, RingHom.map_add]
-        rw [iterate_add_apply, this _ _, add_comm x.1, iterate_add_apply, this _ _] }
+        rintro ⟨n, x⟩ ⟨m, y⟩
+        simp only [quot_mk_eq_mk, liftOn_mk, f.map_iterate_frobenius, mk_add_mk, map_add,
+          iterate_map_add]
+        have := LeftInverse.iterate (frobeniusEquiv_symm_apply_frobenius L p)
+        rw [iterate_add_apply, this _ _, add_comm n, iterate_add_apply, this _ _] }
   invFun f := f.comp (of K p)
   left_inv f := by ext x; rfl
   right_inv f := by
-    ext ⟨x⟩
+    ext ⟨n, x⟩
     simp only [quot_mk_eq_mk, RingHom.comp_apply, RingHom.coe_mk, MonoidHom.coe_mk, OneHom.coe_mk,
       liftOn_mk]
-    rw [eq_pthRoot, RingHom.map_iterate_pthRoot]
+    apply (injective_frobenius L p).iterate n
+    rw [← f.map_iterate_frobenius, iterate_frobenius_mk,
+      RightInverse.iterate (frobenius_apply_frobeniusEquiv_symm L p) n]
 #align perfect_closure.lift PerfectClosure.lift
 
 end Field
 
 end PerfectClosure
-
-/-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
-noncomputable def PerfectRing.ofSurjective (k : Type*) [CommRing k] [IsReduced k] (p : ℕ)
-    [Fact p.Prime] [CharP k p] (h : Function.Surjective <| frobenius k p) : PerfectRing k p
-    where
-  pthRoot' := Function.surjInv h
-  frobenius_pthRoot' := Function.surjInv_eq h
-  pthRoot_frobenius' _ := frobenius_inj _ _ <| Function.surjInv_eq h _
-#align perfect_ring.of_surjective PerfectRing.ofSurjective
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
@@ -164,7 +164,7 @@ variable {K p}
 
 /-- Lift a function `ℕ × K → L` to a function on `PerfectClosure K p`. -/
 -- Porting note: removed `@[elab_as_elim]` for "unexpected eliminator resulting type L"
-def liftOn {L : Type _} (x : PerfectClosure K p) (f : ℕ × K → L)
+def liftOn {L : Type*} (x : PerfectClosure K p) (f : ℕ × K → L)
     (hf : ∀ x y, R K p x y → f x = f y) : L :=
   Quot.liftOn x f hf
 #align perfect_closure.lift_on PerfectClosure.liftOn
@@ -579,7 +579,7 @@ end Field
 end PerfectClosure
 
 /-- A reduced ring with prime characteristic and surjective frobenius map is perfect. -/
-noncomputable def PerfectRing.ofSurjective (k : Type _) [CommRing k] [IsReduced k] (p : ℕ)
+noncomputable def PerfectRing.ofSurjective (k : Type*) [CommRing k] [IsReduced k] (p : ℕ)
     [Fact p.Prime] [CharP k p] (h : Function.Surjective <| frobenius k p) : PerfectRing k p
     where
   pthRoot' := Function.surjInv h
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) 2018 Kenny Lau. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kenny Lau, Yury Kudryashov
-
-! This file was ported from Lean 3 source module field_theory.perfect_closure
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.CharP.Basic
 import Mathlib.Algebra.Hom.Iterate
 import Mathlib.Algebra.Ring.Equiv
 
+#align_import field_theory.perfect_closure from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
 /-!
 # The perfect closure of a field
 -/
fix precedence of Nat.iterate (#5589)
Diff
@@ -107,7 +107,7 @@ theorem MonoidHom.map_pthRoot (x : R) : f (pthRoot R p x) = pthRoot S p (f x) :=
 #align monoid_hom.map_pth_root MonoidHom.map_pthRoot
 
 theorem MonoidHom.map_iterate_pthRoot (x : R) (n : ℕ) :
-    f ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (f x) :=
+    f ((pthRoot R p)^[n] x) = (pthRoot S p)^[n] (f x) :=
   Semiconj.iterate_right f.map_pthRoot n x
 #align monoid_hom.map_iterate_pth_root MonoidHom.map_iterate_pthRoot
 
@@ -116,7 +116,7 @@ theorem RingHom.map_pthRoot (x : R) : g (pthRoot R p x) = pthRoot S p (g x) :=
 #align ring_hom.map_pth_root RingHom.map_pthRoot
 
 theorem RingHom.map_iterate_pthRoot (x : R) (n : ℕ) :
-    g ((pthRoot R p^[n]) x) = (pthRoot S p^[n]) (g x) :=
+    g ((pthRoot R p)^[n] x) = (pthRoot S p)^[n] (g x) :=
   g.toMonoidHom.map_iterate_pthRoot x n
 #align ring_hom.map_iterate_pth_root RingHom.map_iterate_pthRoot
 
@@ -187,8 +187,8 @@ theorem induction_on (x : PerfectClosure K p) {q : PerfectClosure K p → Prop}
 variable (K p)
 
 private theorem mul_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
-    mk K p (x1.1 + y.1, (frobenius K p^[y.1]) x1.2 * (frobenius K p^[x1.1]) y.2) =
-      mk K p (x2.1 + y.1, (frobenius K p^[y.1]) x2.2 * (frobenius K p^[x2.1]) y.2) :=
+    mk K p (x1.1 + y.1, (frobenius K p)^[y.1] x1.2 * (frobenius K p)^[x1.1] y.2) =
+      mk K p (x2.1 + y.1, (frobenius K p)^[y.1] x2.2 * (frobenius K p)^[x2.1] y.2) :=
   match x1, x2, H with
   | _, _, R.intro n x =>
     Quot.sound <| by
@@ -197,8 +197,8 @@ private theorem mul_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
       apply R.intro
 
 private theorem mul_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
-    mk K p (x.1 + y1.1, (frobenius K p^[y1.1]) x.2 * (frobenius K p^[x.1]) y1.2) =
-      mk K p (x.1 + y2.1, (frobenius K p^[y2.1]) x.2 * (frobenius K p^[x.1]) y2.2) :=
+    mk K p (x.1 + y1.1, (frobenius K p)^[y1.1] x.2 * (frobenius K p)^[x.1] y1.2) =
+      mk K p (x.1 + y2.1, (frobenius K p)^[y2.1] x.2 * (frobenius K p)^[x.1] y2.2) :=
   match y1, y2, H with
   | _, _, R.intro n y =>
     Quot.sound <| by
@@ -210,7 +210,7 @@ instance : Mul (PerfectClosure K p) :=
       (fun x : ℕ × K =>
         Quot.lift
           (fun y : ℕ × K =>
-            mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 * (frobenius K p^[x.1]) y.2))
+            mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 * (frobenius K p)^[x.1] y.2))
           (mul_aux_right K p x))
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => mul_aux_left K p x1 x2 y H⟩
@@ -218,7 +218,7 @@ instance : Mul (PerfectClosure K p) :=
 @[simp]
 theorem mk_mul_mk (x y : ℕ × K) :
     mk K p x * mk K p y =
-      mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 * (frobenius K p^[x.1]) y.2) :=
+      mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 * (frobenius K p)^[x.1] y.2) :=
   rfl
 #align perfect_closure.mk_mul_mk PerfectClosure.mk_mul_mk
 
@@ -254,8 +254,8 @@ instance : Inhabited (PerfectClosure K p) :=
   ⟨1⟩
 
 private theorem add_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
-    mk K p (x1.1 + y.1, (frobenius K p^[y.1]) x1.2 + (frobenius K p^[x1.1]) y.2) =
-      mk K p (x2.1 + y.1, (frobenius K p^[y.1]) x2.2 + (frobenius K p^[x2.1]) y.2) :=
+    mk K p (x1.1 + y.1, (frobenius K p)^[y.1] x1.2 + (frobenius K p)^[x1.1] y.2) =
+      mk K p (x2.1 + y.1, (frobenius K p)^[y.1] x2.2 + (frobenius K p)^[x2.1] y.2) :=
   match x1, x2, H with
   | _, _, R.intro n x =>
     Quot.sound <| by
@@ -264,8 +264,8 @@ private theorem add_aux_left (x1 x2 y : ℕ × K) (H : R K p x1 x2) :
       apply R.intro
 
 private theorem add_aux_right (x y1 y2 : ℕ × K) (H : R K p y1 y2) :
-    mk K p (x.1 + y1.1, (frobenius K p^[y1.1]) x.2 + (frobenius K p^[x.1]) y1.2) =
-      mk K p (x.1 + y2.1, (frobenius K p^[y2.1]) x.2 + (frobenius K p^[x.1]) y2.2) :=
+    mk K p (x.1 + y1.1, (frobenius K p)^[y1.1] x.2 + (frobenius K p)^[x.1] y1.2) =
+      mk K p (x.1 + y2.1, (frobenius K p)^[y2.1] x.2 + (frobenius K p)^[x.1] y2.2) :=
   match y1, y2, H with
   | _, _, R.intro n y =>
     Quot.sound <| by
@@ -277,7 +277,7 @@ instance : Add (PerfectClosure K p) :=
       (fun x : ℕ × K =>
         Quot.lift
           (fun y : ℕ × K =>
-            mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 + (frobenius K p^[x.1]) y.2))
+            mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 + (frobenius K p)^[x.1] y.2))
           (add_aux_right K p x))
       fun x1 x2 (H : R K p x1 x2) =>
       funext fun e => Quot.inductionOn e fun y => add_aux_left K p x1 x2 y H⟩
@@ -285,7 +285,7 @@ instance : Add (PerfectClosure K p) :=
 @[simp]
 theorem mk_add_mk (x y : ℕ × K) :
     mk K p x + mk K p y =
-      mk K p (x.1 + y.1, (frobenius K p^[y.1]) x.2 + (frobenius K p^[x.1]) y.2) :=
+      mk K p (x.1 + y.1, (frobenius K p)^[y.1] x.2 + (frobenius K p)^[x.1] y.2) :=
   rfl
 #align perfect_closure.mk_add_mk PerfectClosure.mk_add_mk
 
@@ -323,7 +323,7 @@ theorem mk_zero (n : ℕ) : mk K p (n, 0) = 0 := by
 #align perfect_closure.mk_zero PerfectClosure.mk_zero
 
 -- Porting note: improved proof structure
-theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p^[m]) x = y) :
+theorem R.sound (m n : ℕ) (x y : K) (H : (frobenius K p)^[m] x = y) :
     mk K p (n, x) = mk K p (m + n, y) := by
   subst H
   induction' m with m ih
@@ -392,7 +392,7 @@ instance PerfectClosure.commRing : CommRing (PerfectClosure K p) :=
               add_mul, add_comm, add_left_comm] }
 
 theorem eq_iff' (x y : ℕ × K) :
-    mk K p x = mk K p y ↔ ∃ z, (frobenius K p^[y.1 + z]) x.2 = (frobenius K p^[x.1 + z]) y.2 := by
+    mk K p x = mk K p y ↔ ∃ z, (frobenius K p)^[y.1 + z] x.2 = (frobenius K p)^[x.1 + z] y.2 := by
   constructor
   · intro H
     replace H := Quot.exact _ H
@@ -479,7 +479,7 @@ theorem of_apply (x : K) : of K p x = mk _ _ (0, x) :=
 end Ring
 
 theorem eq_iff [CommRing K] [IsDomain K] (p : ℕ) [Fact p.Prime] [CharP K p] (x y : ℕ × K) :
-    Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p^[y.1]) x.2 = (frobenius K p^[x.1]) y.2 :=
+    Quot.mk (R K p) x = Quot.mk (R K p) y ↔ (frobenius K p)^[y.1] x.2 = (frobenius K p)^[x.1] y.2 :=
   (eq_iff' K p x y).trans
     ⟨fun ⟨z, H⟩ => (frobenius_inj K p).iterate z <| by simpa only [add_comm, iterate_add] using H,
       fun H => ⟨0, H⟩⟩
@@ -537,7 +537,7 @@ instance : PerfectRing (PerfectClosure K p) p where
       exact (Quot.sound <| R.intro _ _).symm
 
 theorem eq_pthRoot (x : ℕ × K) :
-    mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) := by
+    mk K p x = (pthRoot (PerfectClosure K p) p)^[x.1] (of K p x.2) := by
   rcases x with ⟨m, x⟩
   induction' m with m ih
   · rfl
@@ -551,7 +551,7 @@ def lift (L : Type v) [CommSemiring L] [CharP L p] [PerfectRing L p] :
     (K →+* L) ≃ (PerfectClosure K p →+* L) where
   toFun f :=
     { toFun := by
-        refine' fun e => liftOn e (fun x => (pthRoot L p^[x.1]) (f x.2)) _
+        refine' fun e => liftOn e (fun x => (pthRoot L p)^[x.1] (f x.2)) _
         rintro a b ⟨n⟩
         simp only [f.map_frobenius, iterate_succ_apply, pthRoot_frobenius],
       map_one' := f.map_one,
chore: clean up spacing around at and goals (#5387)

Changes are of the form

  • some_tactic at h⊢ -> some_tactic at h ⊢
  • some_tactic at h -> some_tactic at h
Diff
@@ -514,7 +514,7 @@ instance : DivisionRing (PerfectClosure K p) :=
         rw [mk_inv, mk_mul_mk]
         refine (eq_iff K p _ _).2 ?_
         simp only [(frobenius _ _).iterate_map_one, (frobenius K p).iterate_map_zero,
-            iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this⊢
+            iterate_zero_apply, ← (frobenius _ p).iterate_map_mul] at this ⊢
         rw [mul_inv_cancel this, (frobenius _ _).iterate_map_one]
     inv_zero := congr_arg (Quot.mk (R K p)) (by rw [inv_zero]) }
 
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -536,8 +536,8 @@ instance : PerfectRing (PerfectClosure K p) p where
       simp only [liftOn_mk, frobenius_mk]
       exact (Quot.sound <| R.intro _ _).symm
 
-theorem eq_pthRoot (x : ℕ × K) : mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) :=
-  by
+theorem eq_pthRoot (x : ℕ × K) :
+    mk K p x = (pthRoot (PerfectClosure K p) p^[x.1]) (of K p x.2) := by
   rcases x with ⟨m, x⟩
   induction' m with m ih
   · rfl
feat: port FieldTheory.PerfectClosure (#2879)

Dependencies 8 + 478

479 files ported (98.4%)
197440 lines ported (98.4%)
Show graph

The unported dependencies are