algebra.module.projectiveMathlib.Algebra.Module.Projective

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -148,7 +148,7 @@ variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [
 instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by
   classical
   rw [Module.projective_def']
-  simp_rw [projective_def] at h 
+  simp_rw [projective_def] at h
   choose s hs using h
   letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
   letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
@@ -221,7 +221,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
     huniv (Finsupp.total P P R (id : P → P)) (LinearMap.id : P →ₗ[R] P) _
   -- This `s` works.
   · use s
-    rwa [LinearMap.ext_iff] at hs 
+    rwa [LinearMap.ext_iff] at hs
   · intro p
     use Finsupp.single p 1
     simp
@@ -250,7 +250,7 @@ theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type ma
     huniv (Finsupp.total P P R (id : P → P)) (LinearMap.id : P →ₗ[R] P) _
   -- This `s` works.
   · use s
-    rwa [LinearMap.ext_iff] at hs 
+    rwa [LinearMap.ext_iff] at hs
   · intro p
     use Finsupp.single p 1
     simp
Diff
@@ -145,7 +145,31 @@ instance [hP : Projective R P] [hQ : Projective R Q] : Projective R (P × Q) :=
 
 variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [∀ i : ι, Module R (A i)]
 
-instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by classical
+instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by
+  classical
+  rw [Module.projective_def']
+  simp_rw [projective_def] at h 
+  choose s hs using h
+  letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
+  letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
+  letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @DFinsupp.addCommMonoid ι (fun i => A i →₀ R) _
+  letI : Module R (Π₀ i : ι, A i →₀ R) := @DFinsupp.module ι R (fun i => A i →₀ R) _ _ _
+  let f i := lmap_domain R R (DFinsupp.single i : A i → Π₀ i, A i)
+  use DFinsupp.coprodMap f ∘ₗ DFinsupp.mapRange.linearMap s
+  ext i x j
+  simp only [DFinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
+    LinearEquiv.coe_toLinearMap, finsuppLequivDFinsupp_symm_apply, Function.comp_apply,
+    DFinsupp.lsingle_apply, DFinsupp.mapRange.linearMap_apply, DFinsupp.mapRange_single,
+    lmap_domain_apply, DFinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
+    Function.id_comp, DFinsupp.single_apply]
+  rw [← DFinsupp.lapply_apply j, apply_total R]
+  obtain rfl | hij := eq_or_ne i j
+  · convert (hs i) x
+    · ext; simp
+    · simp
+  · convert Finsupp.total_zero_apply _ ((s i) x)
+    · ext; simp [hij]
+    · simp [hij]
 
 end Semiring
 
Diff
@@ -145,31 +145,7 @@ instance [hP : Projective R P] [hQ : Projective R Q] : Projective R (P × Q) :=
 
 variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [∀ i : ι, Module R (A i)]
 
-instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by
-  classical
-  rw [Module.projective_def']
-  simp_rw [projective_def] at h 
-  choose s hs using h
-  letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
-  letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
-  letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @DFinsupp.addCommMonoid ι (fun i => A i →₀ R) _
-  letI : Module R (Π₀ i : ι, A i →₀ R) := @DFinsupp.module ι R (fun i => A i →₀ R) _ _ _
-  let f i := lmap_domain R R (DFinsupp.single i : A i → Π₀ i, A i)
-  use DFinsupp.coprodMap f ∘ₗ DFinsupp.mapRange.linearMap s
-  ext i x j
-  simp only [DFinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
-    LinearEquiv.coe_toLinearMap, finsuppLequivDFinsupp_symm_apply, Function.comp_apply,
-    DFinsupp.lsingle_apply, DFinsupp.mapRange.linearMap_apply, DFinsupp.mapRange_single,
-    lmap_domain_apply, DFinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
-    Function.id_comp, DFinsupp.single_apply]
-  rw [← DFinsupp.lapply_apply j, apply_total R]
-  obtain rfl | hij := eq_or_ne i j
-  · convert (hs i) x
-    · ext; simp
-    · simp
-  · convert Finsupp.total_zero_apply _ ((s i) x)
-    · ext; simp [hij]
-    · simp [hij]
+instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by classical
 
 end Semiring
 
Diff
@@ -97,7 +97,7 @@ theorem projective_def :
 
 #print Module.projective_def' /-
 theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = id :=
-  by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
+  by simp_rw [projective_def, DFunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
 #align module.projective_def' Module.projective_def'
 -/
 
Diff
@@ -161,7 +161,7 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := b
     LinearEquiv.coe_toLinearMap, finsuppLequivDFinsupp_symm_apply, Function.comp_apply,
     DFinsupp.lsingle_apply, DFinsupp.mapRange.linearMap_apply, DFinsupp.mapRange_single,
     lmap_domain_apply, DFinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
-    Function.comp.left_id, DFinsupp.single_apply]
+    Function.id_comp, DFinsupp.single_apply]
   rw [← DFinsupp.lapply_apply j, apply_total R]
   obtain rfl | hij := eq_or_ne i j
   · convert (hs i) x
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2021 Kevin Buzzard. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kevin Buzzard, Antoine Labelle
 -/
-import Mathbin.Algebra.Module.Basic
-import Mathbin.LinearAlgebra.Finsupp
-import Mathbin.LinearAlgebra.FreeModule.Basic
+import Algebra.Module.Basic
+import LinearAlgebra.Finsupp
+import LinearAlgebra.FreeModule.Basic
 
 #align_import algebra.module.projective from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
 
@@ -186,7 +186,7 @@ theorem Module.Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective
   use b.constr ℕ fun i => Finsupp.single (b i) (1 : R)
   intro m
   simp only [b.constr_apply, mul_one, id.def, Finsupp.smul_single', Finsupp.total_single,
-    LinearMap.map_finsupp_sum]
+    map_finsupp_sum]
   exact b.total_repr m
 #align module.projective_of_basis Module.Projective.of_basis
 -/
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Kevin Buzzard. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kevin Buzzard, Antoine Labelle
-
-! This file was ported from Lean 3 source module algebra.module.projective
-! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Module.Basic
 import Mathbin.LinearAlgebra.Finsupp
 import Mathbin.LinearAlgebra.FreeModule.Basic
 
+#align_import algebra.module.projective from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
+
 /-!
 
 # Projective modules
Diff
@@ -155,17 +155,17 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := b
   choose s hs using h
   letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
   letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
-  letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @Dfinsupp.addCommMonoid ι (fun i => A i →₀ R) _
-  letI : Module R (Π₀ i : ι, A i →₀ R) := @Dfinsupp.module ι R (fun i => A i →₀ R) _ _ _
-  let f i := lmap_domain R R (Dfinsupp.single i : A i → Π₀ i, A i)
-  use Dfinsupp.coprodMap f ∘ₗ Dfinsupp.mapRange.linearMap s
+  letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @DFinsupp.addCommMonoid ι (fun i => A i →₀ R) _
+  letI : Module R (Π₀ i : ι, A i →₀ R) := @DFinsupp.module ι R (fun i => A i →₀ R) _ _ _
+  let f i := lmap_domain R R (DFinsupp.single i : A i → Π₀ i, A i)
+  use DFinsupp.coprodMap f ∘ₗ DFinsupp.mapRange.linearMap s
   ext i x j
-  simp only [Dfinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
-    LinearEquiv.coe_toLinearMap, finsuppLequivDfinsupp_symm_apply, Function.comp_apply,
-    Dfinsupp.lsingle_apply, Dfinsupp.mapRange.linearMap_apply, Dfinsupp.mapRange_single,
-    lmap_domain_apply, Dfinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
-    Function.comp.left_id, Dfinsupp.single_apply]
-  rw [← Dfinsupp.lapply_apply j, apply_total R]
+  simp only [DFinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
+    LinearEquiv.coe_toLinearMap, finsuppLequivDFinsupp_symm_apply, Function.comp_apply,
+    DFinsupp.lsingle_apply, DFinsupp.mapRange.linearMap_apply, DFinsupp.mapRange_single,
+    lmap_domain_apply, DFinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
+    Function.comp.left_id, DFinsupp.single_apply]
+  rw [← DFinsupp.lapply_apply j, apply_total R]
   obtain rfl | hij := eq_or_ne i j
   · convert (hs i) x
     · ext; simp
Diff
@@ -159,7 +159,7 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := b
   letI : Module R (Π₀ i : ι, A i →₀ R) := @Dfinsupp.module ι R (fun i => A i →₀ R) _ _ _
   let f i := lmap_domain R R (Dfinsupp.single i : A i → Π₀ i, A i)
   use Dfinsupp.coprodMap f ∘ₗ Dfinsupp.mapRange.linearMap s
-  ext (i x j)
+  ext i x j
   simp only [Dfinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
     LinearEquiv.coe_toLinearMap, finsuppLequivDfinsupp_symm_apply, Function.comp_apply,
     Dfinsupp.lsingle_apply, Dfinsupp.mapRange.linearMap_apply, Dfinsupp.mapRange_single,
Diff
@@ -91,15 +91,20 @@ section Semiring
 variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {M : Type _}
   [AddCommMonoid M] [Module R M] {N : Type _} [AddCommMonoid N] [Module R N]
 
+#print Module.projective_def /-
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align module.projective_def Module.projective_def
+-/
 
+#print Module.projective_def' /-
 theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = id :=
   by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
 #align module.projective_def' Module.projective_def'
+-/
 
+#print Module.projective_lifting_property /-
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
     (hf : Function.Surjective f) : ∃ h : P →ₗ[R] M, f.comp h = g :=
@@ -122,6 +127,7 @@ theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g
   conv_rhs => rw [← hs p]
   simp [φ, Finsupp.total_apply, Function.surjInv_eq hf]
 #align module.projective_lifting_property Module.projective_lifting_property
+-/
 
 variable {Q : Type _} [AddCommMonoid Q] [Module R Q]
 
@@ -174,6 +180,7 @@ section Ring
 
 variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
 
+#print Module.Projective.of_basis /-
 /-- Free modules are projective. -/
 theorem Module.Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P :=
   by
@@ -185,6 +192,7 @@ theorem Module.Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective
     LinearMap.map_finsupp_sum]
   exact b.total_repr m
 #align module.projective_of_basis Module.Projective.of_basis
+-/
 
 #print Module.Projective.of_free /-
 instance (priority := 100) Module.Projective.of_free [Module.Free R P] : Module.Projective R P :=
@@ -197,6 +205,7 @@ end Ring
 --This is in a different section because special universe restrictions are required.
 section OfLiftingProperty
 
+#print Module.Projective.of_lifting_property' /-
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
 theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max u v}
@@ -220,7 +229,9 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
     use Finsupp.single p 1
     simp
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
+-/
 
+#print Module.Projective.of_lifting_property /-
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
 theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v}
@@ -247,6 +258,7 @@ theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type ma
     use Finsupp.single p 1
     simp
 #align module.projective_of_lifting_property Module.Projective.of_lifting_property
+-/
 
 end OfLiftingProperty
 
Diff
@@ -144,29 +144,29 @@ variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [
 
 instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by
   classical
-    rw [Module.projective_def']
-    simp_rw [projective_def] at h 
-    choose s hs using h
-    letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
-    letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
-    letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @Dfinsupp.addCommMonoid ι (fun i => A i →₀ R) _
-    letI : Module R (Π₀ i : ι, A i →₀ R) := @Dfinsupp.module ι R (fun i => A i →₀ R) _ _ _
-    let f i := lmap_domain R R (Dfinsupp.single i : A i → Π₀ i, A i)
-    use Dfinsupp.coprodMap f ∘ₗ Dfinsupp.mapRange.linearMap s
-    ext (i x j)
-    simp only [Dfinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
-      LinearEquiv.coe_toLinearMap, finsuppLequivDfinsupp_symm_apply, Function.comp_apply,
-      Dfinsupp.lsingle_apply, Dfinsupp.mapRange.linearMap_apply, Dfinsupp.mapRange_single,
-      lmap_domain_apply, Dfinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
-      Function.comp.left_id, Dfinsupp.single_apply]
-    rw [← Dfinsupp.lapply_apply j, apply_total R]
-    obtain rfl | hij := eq_or_ne i j
-    · convert(hs i) x
-      · ext; simp
-      · simp
-    · convert Finsupp.total_zero_apply _ ((s i) x)
-      · ext; simp [hij]
-      · simp [hij]
+  rw [Module.projective_def']
+  simp_rw [projective_def] at h 
+  choose s hs using h
+  letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
+  letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
+  letI : AddCommMonoid (Π₀ i : ι, A i →₀ R) := @Dfinsupp.addCommMonoid ι (fun i => A i →₀ R) _
+  letI : Module R (Π₀ i : ι, A i →₀ R) := @Dfinsupp.module ι R (fun i => A i →₀ R) _ _ _
+  let f i := lmap_domain R R (Dfinsupp.single i : A i → Π₀ i, A i)
+  use Dfinsupp.coprodMap f ∘ₗ Dfinsupp.mapRange.linearMap s
+  ext (i x j)
+  simp only [Dfinsupp.coprodMap, DirectSum.lof, total_map_domain, coe_comp, coe_lsum, id_coe,
+    LinearEquiv.coe_toLinearMap, finsuppLequivDfinsupp_symm_apply, Function.comp_apply,
+    Dfinsupp.lsingle_apply, Dfinsupp.mapRange.linearMap_apply, Dfinsupp.mapRange_single,
+    lmap_domain_apply, Dfinsupp.toFinsupp_single, Finsupp.sum_single_index, id.def,
+    Function.comp.left_id, Dfinsupp.single_apply]
+  rw [← Dfinsupp.lapply_apply j, apply_total R]
+  obtain rfl | hij := eq_or_ne i j
+  · convert (hs i) x
+    · ext; simp
+    · simp
+  · convert Finsupp.total_zero_apply _ ((s i) x)
+    · ext; simp [hij]
+    · simp [hij]
 
 end Semiring
 
Diff
@@ -79,7 +79,7 @@ open LinearMap Finsupp
   if maps from the module lift along surjections. There are several other equivalent
   definitions. -/
 class Module.Projective (R : Type _) [Semiring R] (P : Type _) [AddCommMonoid P] [Module R P] :
-  Prop where
+    Prop where
   out : ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s
 #align module.projective Module.Projective
 -/
@@ -145,7 +145,7 @@ variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [
 instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := by
   classical
     rw [Module.projective_def']
-    simp_rw [projective_def] at h
+    simp_rw [projective_def] at h 
     choose s hs using h
     letI : ∀ i : ι, AddCommMonoid (A i →₀ R) := fun i => by infer_instance
     letI : ∀ i : ι, Module R (A i →₀ R) := fun i => by infer_instance
@@ -215,7 +215,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
     huniv (Finsupp.total P P R (id : P → P)) (LinearMap.id : P →ₗ[R] P) _
   -- This `s` works.
   · use s
-    rwa [LinearMap.ext_iff] at hs
+    rwa [LinearMap.ext_iff] at hs 
   · intro p
     use Finsupp.single p 1
     simp
@@ -242,7 +242,7 @@ theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type ma
     huniv (Finsupp.total P P R (id : P → P)) (LinearMap.id : P →ₗ[R] P) _
   -- This `s` works.
   · use s
-    rwa [LinearMap.ext_iff] at hs
+    rwa [LinearMap.ext_iff] at hs 
   · intro p
     use Finsupp.single p 1
     simp
Diff
@@ -91,24 +91,15 @@ section Semiring
 variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {M : Type _}
   [AddCommMonoid M] [Module R M] {N : Type _} [AddCommMonoid N] [Module R N]
 
-/- warning: module.projective_def -> Module.projective_def is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align module.projective_def Module.projective_defₓ'. -/
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align module.projective_def Module.projective_def
 
-/- warning: module.projective_def' -> Module.projective_def' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align module.projective_def' Module.projective_def'ₓ'. -/
 theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = id :=
   by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
 #align module.projective_def' Module.projective_def'
 
-/- warning: module.projective_lifting_property -> Module.projective_lifting_property is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align module.projective_lifting_property Module.projective_lifting_propertyₓ'. -/
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
     (hf : Function.Surjective f) : ∃ h : P →ₗ[R] M, f.comp h = g :=
@@ -183,12 +174,6 @@ section Ring
 
 variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
 
-/- warning: module.projective_of_basis -> Module.Projective.of_basis is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommGroup.{u2} P] [_inst_3 : Module.{u1, u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{u2} P _inst_2)] {ι : Type.{u3}}, (Basis.{u3, u1, u2} ι R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{u2} P _inst_2) _inst_3) -> (Module.Projective.{u1, u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{u2} P _inst_2) _inst_3)
-but is expected to have type
-  forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommGroup.{u1} P] [_inst_3 : Module.{u2, u1} R P (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} P _inst_2)] {ι : Type.{u3}}, (Basis.{u3, u2, u1} ι R P (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} P _inst_2) _inst_3) -> (Module.Projective.{u2, u1} R (Ring.toSemiring.{u2} R _inst_1) P (AddCommGroup.toAddCommMonoid.{u1} P _inst_2) _inst_3)
-Case conversion may be inaccurate. Consider using '#align module.projective_of_basis Module.Projective.of_basisₓ'. -/
 /-- Free modules are projective. -/
 theorem Module.Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P :=
   by
@@ -212,9 +197,6 @@ end Ring
 --This is in a different section because special universe restrictions are required.
 section OfLiftingProperty
 
-/- warning: module.projective_of_lifting_property' -> Module.Projective.of_lifting_property' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'ₓ'. -/
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
 theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max u v}
@@ -239,9 +221,6 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
     simp
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
 
-/- warning: module.projective_of_lifting_property -> Module.Projective.of_lifting_property is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
 theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v}
Diff
@@ -144,14 +144,10 @@ instance [hP : Projective R P] [hQ : Projective R Q] : Projective R (P × Q) :=
     simp only [coe_inl, coe_inr, coe_comp, Function.comp_apply, prod_map_apply, map_zero,
       coprod_apply, lmap_domain_apply, map_domain_zero, add_zero, zero_add, id_comp,
       total_map_domain]
-  · rw [← fst_apply _, apply_total R]
-    exact hsP x
-  · rw [← snd_apply _, apply_total R]
-    exact Finsupp.total_zero_apply _ (sP x)
-  · rw [← fst_apply _, apply_total R]
-    exact Finsupp.total_zero_apply _ (sQ x)
-  · rw [← snd_apply _, apply_total R]
-    exact hsQ x
+  · rw [← fst_apply _, apply_total R]; exact hsP x
+  · rw [← snd_apply _, apply_total R]; exact Finsupp.total_zero_apply _ (sP x)
+  · rw [← fst_apply _, apply_total R]; exact Finsupp.total_zero_apply _ (sQ x)
+  · rw [← snd_apply _, apply_total R]; exact hsQ x
 
 variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [∀ i : ι, Module R (A i)]
 
@@ -175,12 +171,10 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := b
     rw [← Dfinsupp.lapply_apply j, apply_total R]
     obtain rfl | hij := eq_or_ne i j
     · convert(hs i) x
-      · ext
-        simp
+      · ext; simp
       · simp
     · convert Finsupp.total_zero_apply _ ((s i) x)
-      · ext
-        simp [hij]
+      · ext; simp [hij]
       · simp [hij]
 
 end Semiring
Diff
@@ -92,10 +92,7 @@ variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {
   [AddCommMonoid M] [Module R M] {N : Type _} [AddCommMonoid N] [Module R N]
 
 /- warning: module.projective_def -> Module.projective_def is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Function.LeftInverse.{succ u2, max (succ u2) (succ u1)} P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (coeFn.{max (succ (max u2 u1)) (succ u2), max (succ (max u2 u1)) (succ u2)} (LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) (fun (_x : LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) => (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) -> P) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, u2} R R (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P))) (coeFn.{max (succ u2) (succ (max u2 u1)), max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => P -> (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))) (LinearMap.hasCoeToFun.{u1, u1, u2, max u2 u1} R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) s)))
-but is expected to have type
-  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align module.projective_def Module.projective_defₓ'. -/
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
@@ -103,20 +100,14 @@ theorem projective_def :
 #align module.projective_def Module.projective_def
 
 /- warning: module.projective_def' -> Module.projective_def' is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Eq.{succ u2} (LinearMap.{u1, u1, u2, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P P _inst_2 _inst_2 _inst_3 _inst_3) (LinearMap.comp.{u1, u1, u1, u2, max u2 u1, u2} R R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P)) s) (LinearMap.id.{u1, u2} R P _inst_1 _inst_2 _inst_3)))
-but is expected to have type
-  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Eq.{succ u1} (LinearMap.{u2, u2, u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P P _inst_2 _inst_2 _inst_3 _inst_3) (LinearMap.comp.{u2, u2, u2, u1, max u2 u1, u1} R R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHomCompTriple.ids.{u2, u2} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P)) s) (LinearMap.id.{u2, u1} R P _inst_1 _inst_2 _inst_3)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align module.projective_def' Module.projective_def'ₓ'. -/
 theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = id :=
   by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
 #align module.projective_def' Module.projective_def'
 
 /- warning: module.projective_lifting_property -> Module.projective_lifting_property is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2] {M : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} M] [_inst_5 : Module.{u1, u3} R M _inst_1 _inst_4] {N : Type.{u4}} [_inst_6 : AddCommMonoid.{u4} N] [_inst_7 : Module.{u1, u4} R N _inst_1 _inst_6] [h : Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (fun (_x : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u3, u4} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u2) (succ u4)} (LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))
-but is expected to have type
-  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
+<too large>
 Case conversion may be inaccurate. Consider using '#align module.projective_lifting_property Module.projective_lifting_propertyₓ'. -/
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
@@ -228,10 +219,7 @@ end Ring
 section OfLiftingProperty
 
 /- warning: module.projective_of_lifting_property' -> Module.Projective.of_lifting_property' is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u2 u1} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
+<too large>
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'ₓ'. -/
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
@@ -258,10 +246,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
 
 /- warning: module.projective_of_lifting_property -> Module.Projective.of_lifting_property is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u2 u1} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
-but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+<too large>
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
Diff
@@ -95,7 +95,7 @@ variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Function.LeftInverse.{succ u2, max (succ u2) (succ u1)} P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (coeFn.{max (succ (max u2 u1)) (succ u2), max (succ (max u2 u1)) (succ u2)} (LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) (fun (_x : LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) => (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) -> P) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, u2} R R (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P))) (coeFn.{max (succ u2) (succ (max u2 u1)), max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => P -> (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))) (LinearMap.hasCoeToFun.{u1, u1, u2, max u2 u1} R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) s)))
 but is expected to have type
-  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
+  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
 Case conversion may be inaccurate. Consider using '#align module.projective_def Module.projective_defₓ'. -/
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
@@ -116,7 +116,7 @@ theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Fin
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2] {M : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} M] [_inst_5 : Module.{u1, u3} R M _inst_1 _inst_4] {N : Type.{u4}} [_inst_6 : AddCommMonoid.{u4} N] [_inst_7 : Module.{u1, u4} R N _inst_1 _inst_6] [h : Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (fun (_x : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u3, u4} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u2) (succ u4)} (LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))
 but is expected to have type
-  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
+  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
 Case conversion may be inaccurate. Consider using '#align module.projective_lifting_property Module.projective_lifting_propertyₓ'. -/
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
@@ -231,7 +231,7 @@ section OfLiftingProperty
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u2 u1} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'ₓ'. -/
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
@@ -261,7 +261,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u2 u1} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
Diff
@@ -95,7 +95,7 @@ variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Function.LeftInverse.{succ u2, max (succ u2) (succ u1)} P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (coeFn.{max (succ (max u2 u1)) (succ u2), max (succ (max u2 u1)) (succ u2)} (LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) (fun (_x : LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) => (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) -> P) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, u2} R R (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P))) (coeFn.{max (succ u2) (succ (max u2 u1)), max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => P -> (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))) (LinearMap.hasCoeToFun.{u1, u1, u2, max u2 u1} R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) s)))
 but is expected to have type
-  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
+  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
 Case conversion may be inaccurate. Consider using '#align module.projective_def Module.projective_defₓ'. -/
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
@@ -116,7 +116,7 @@ theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Fin
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2] {M : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} M] [_inst_5 : Module.{u1, u3} R M _inst_1 _inst_4] {N : Type.{u4}} [_inst_6 : AddCommMonoid.{u4} N] [_inst_7 : Module.{u1, u4} R N _inst_1 _inst_6] [h : Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (fun (_x : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u3, u4} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u2) (succ u4)} (LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))
 but is expected to have type
-  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
+  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
 Case conversion may be inaccurate. Consider using '#align module.projective_lifting_property Module.projective_lifting_propertyₓ'. -/
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
@@ -231,7 +231,7 @@ section OfLiftingProperty
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u2 u1} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'ₓ'. -/
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
@@ -261,7 +261,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u2 u1} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
Diff
@@ -261,7 +261,7 @@ theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Ty
 lean 3 declaration is
   forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u2 u1} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 but is expected to have type
-  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
 Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kevin Buzzard, Antoine Labelle
 
 ! This file was ported from Lean 3 source module algebra.module.projective
-! leanprover-community/mathlib commit 405ea5cee7a7070ff8fb8dcb4cfb003532e34bce
+! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -16,6 +16,9 @@ import Mathbin.LinearAlgebra.FreeModule.Basic
 
 # Projective modules
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file contains a definition of a projective module, the proof that
 our definition is equivalent to a lifting property, and the
 proof that all free modules are projective.
Diff
@@ -69,6 +69,7 @@ universe u v
 
 open LinearMap Finsupp
 
+#print Module.Projective /-
 /- The actual implementation we choose: `P` is projective if the natural surjection
    from the free `R`-module on `P` to `P` splits. -/
 /-- An R-module is projective if it is a direct summand of a free module, or equivalently
@@ -78,6 +79,7 @@ class Module.Projective (R : Type _) [Semiring R] (P : Type _) [AddCommMonoid P]
   Prop where
   out : ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s
 #align module.projective Module.Projective
+-/
 
 namespace Module
 
@@ -86,15 +88,33 @@ section Semiring
 variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {M : Type _}
   [AddCommMonoid M] [Module R M] {N : Type _} [AddCommMonoid N] [Module R N]
 
+/- warning: module.projective_def -> Module.projective_def is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Function.LeftInverse.{succ u2, max (succ u2) (succ u1)} P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) (coeFn.{max (succ (max u2 u1)) (succ u2), max (succ (max u2 u1)) (succ u2)} (LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) (fun (_x : LinearMap.{u1, u1, max u2 u1, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3) => (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) -> P) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, u2} R R (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P))) (coeFn.{max (succ u2) (succ (max u2 u1)), max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (_x : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => P -> (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))))) (LinearMap.hasCoeToFun.{u1, u1, u2, max u2 u1} R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) s)))
+but is expected to have type
+  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (LinearMap.{u2, u2, max u2 u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3) (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) (fun (_x : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) => P) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, max u2 u1, u1} R R (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P))) (FunLike.coe.{max (succ u2) (succ u1), succ u1, max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) P (fun (_x : P) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : P) => Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _x) (LinearMap.instFunLikeLinearMap.{u2, u2, u1, max u2 u1} R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) s)))
+Case conversion may be inaccurate. Consider using '#align module.projective_def Module.projective_defₓ'. -/
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align module.projective_def Module.projective_def
 
+/- warning: module.projective_def' -> Module.projective_def' is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2], Iff (Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ (max u2 u1))} (LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) (fun (s : LinearMap.{u1, u1, u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1))) => Eq.{succ u2} (LinearMap.{u1, u1, u2, u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P P _inst_2 _inst_2 _inst_3 _inst_3) (LinearMap.comp.{u1, u1, u1, u2, max u2 u1, u2} R R R P (Finsupp.{u2, u1} P R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))))) P _inst_1 _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u2, u1} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)))) _inst_2 _inst_3 (Finsupp.module.{u2, u1, u1} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Semiring.toModule.{u1} R _inst_1)) _inst_3 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (Finsupp.total.{u2, u2, u1} P P R _inst_1 _inst_2 _inst_3 (id.{succ u2} P)) s) (LinearMap.id.{u1, u2} R P _inst_1 _inst_2 _inst_3)))
+but is expected to have type
+  forall {R : Type.{u2}} [_inst_1 : Semiring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommMonoid.{u1} P] [_inst_3 : Module.{u2, u1} R P _inst_1 _inst_2], Iff (Module.Projective.{u2, u1} R _inst_1 P _inst_2 _inst_3) (Exists.{max (succ u2) (succ u1)} (LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) (fun (s : LinearMap.{u2, u2, u1, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1))) => Eq.{succ u1} (LinearMap.{u2, u2, u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) P P _inst_2 _inst_2 _inst_3 _inst_3) (LinearMap.comp.{u2, u2, u2, u1, max u2 u1, u1} R R R P (Finsupp.{u1, u2} P R (MonoidWithZero.toZero.{u2} R (Semiring.toMonoidWithZero.{u2} R _inst_1))) P _inst_1 _inst_1 _inst_1 _inst_2 (Finsupp.addCommMonoid.{u1, u2} P R (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)))) _inst_2 _inst_3 (Finsupp.module.{u1, u2, u2} P R R _inst_1 (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Semiring.toModule.{u2} R _inst_1)) _inst_3 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1)) (RingHomCompTriple.ids.{u2, u2} R R _inst_1 _inst_1 (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_1))) (Finsupp.total.{u1, u1, u2} P P R _inst_1 _inst_2 _inst_3 (id.{succ u1} P)) s) (LinearMap.id.{u2, u1} R P _inst_1 _inst_2 _inst_3)))
+Case conversion may be inaccurate. Consider using '#align module.projective_def' Module.projective_def'ₓ'. -/
 theorem projective_def' : Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = id :=
   by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, coe_comp, id_coe, id.def]
 #align module.projective_def' Module.projective_def'
 
+/- warning: module.projective_lifting_property -> Module.projective_lifting_property is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommMonoid.{u2} P] [_inst_3 : Module.{u1, u2} R P _inst_1 _inst_2] {M : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} M] [_inst_5 : Module.{u1, u3} R M _inst_1 _inst_4] {N : Type.{u4}} [_inst_6 : AddCommMonoid.{u4} N] [_inst_7 : Module.{u1, u4} R N _inst_1 _inst_6] [h : Module.Projective.{u1, u2} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (fun (_x : LinearMap.{u1, u1, u3, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u3, u4} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u2) (succ u4)} (LinearMap.{u1, u1, u2, u4} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))
+but is expected to have type
+  forall {R : Type.{u4}} [_inst_1 : Semiring.{u4} R] {P : Type.{u3}} [_inst_2 : AddCommMonoid.{u3} P] [_inst_3 : Module.{u4, u3} R P _inst_1 _inst_2] {M : Type.{u2}} [_inst_4 : AddCommMonoid.{u2} M] [_inst_5 : Module.{u4, u2} R M _inst_1 _inst_4] {N : Type.{u1}} [_inst_6 : AddCommMonoid.{u1} N] [_inst_7 : Module.{u4, u1} R N _inst_1 _inst_6] [h : Module.Projective.{u4, u3} R _inst_1 P _inst_2 _inst_3] (f : LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) (g : LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u4, u4, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) M N _inst_4 _inst_6 _inst_5 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u2, u1} R R M N _inst_1 _inst_1 _inst_4 _inst_6 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f)) -> (Exists.{max (succ u3) (succ u2)} (LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) (fun (h : LinearMap.{u4, u4, u3, u2} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_5) => Eq.{max (succ u3) (succ u1)} (LinearMap.{u4, u4, u3, u1} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) P N _inst_2 _inst_6 _inst_3 _inst_7) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_6 _inst_3 _inst_5 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1)) (RingHomCompTriple.ids.{u4, u4} R R _inst_1 _inst_1 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R _inst_1))) f h) g))
+Case conversion may be inaccurate. Consider using '#align module.projective_lifting_property Module.projective_lifting_propertyₓ'. -/
 /-- A projective R-module has the property that maps from it lift along surjections. -/
 theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g : P →ₗ[R] N)
     (hf : Function.Surjective f) : ∃ h : P →ₗ[R] M, f.comp h = g :=
@@ -175,8 +195,14 @@ section Ring
 
 variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
 
+/- warning: module.projective_of_basis -> Module.Projective.of_basis is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{u2}} [_inst_2 : AddCommGroup.{u2} P] [_inst_3 : Module.{u1, u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{u2} P _inst_2)] {ι : Type.{u3}}, (Basis.{u3, u1, u2} ι R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{u2} P _inst_2) _inst_3) -> (Module.Projective.{u1, u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{u2} P _inst_2) _inst_3)
+but is expected to have type
+  forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {P : Type.{u1}} [_inst_2 : AddCommGroup.{u1} P] [_inst_3 : Module.{u2, u1} R P (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} P _inst_2)] {ι : Type.{u3}}, (Basis.{u3, u2, u1} ι R P (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} P _inst_2) _inst_3) -> (Module.Projective.{u2, u1} R (Ring.toSemiring.{u2} R _inst_1) P (AddCommGroup.toAddCommMonoid.{u1} P _inst_2) _inst_3)
+Case conversion may be inaccurate. Consider using '#align module.projective_of_basis Module.Projective.of_basisₓ'. -/
 /-- Free modules are projective. -/
-theorem projectiveOfBasis {ι : Type _} (b : Basis ι R P) : Projective R P :=
+theorem Module.Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P :=
   by
   -- need P →ₗ (P →₀ R) for definition of projective.
   -- get it from `ι → (P →₀ R)` coming from `b`.
@@ -185,21 +211,29 @@ theorem projectiveOfBasis {ι : Type _} (b : Basis ι R P) : Projective R P :=
   simp only [b.constr_apply, mul_one, id.def, Finsupp.smul_single', Finsupp.total_single,
     LinearMap.map_finsupp_sum]
   exact b.total_repr m
-#align module.projective_of_basis Module.projectiveOfBasis
+#align module.projective_of_basis Module.Projective.of_basis
 
-instance (priority := 100) projectiveOfFree [Module.Free R P] : Module.Projective R P :=
-  projectiveOfBasis <| Module.Free.chooseBasis R P
-#align module.projective_of_free Module.projectiveOfFree
+#print Module.Projective.of_free /-
+instance (priority := 100) Module.Projective.of_free [Module.Free R P] : Module.Projective R P :=
+  Module.Projective.of_basis <| Module.Free.chooseBasis R P
+#align module.projective_of_free Module.Projective.of_free
+-/
 
 end Ring
 
 --This is in a different section because special universe restrictions are required.
 section OfLiftingProperty
 
+/- warning: module.projective_of_lifting_property' -> Module.Projective.of_lifting_property' is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u2 u1} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.right_ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommMonoid.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P _inst_1 _inst_2], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommMonoid.{max u1 u2} M] [_inst_5 : AddCommMonoid.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M _inst_1 _inst_4] [_inst_7 : Module.{u1, max u1 u2} R N _inst_1 _inst_5] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_4 _inst_5 _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N _inst_1 _inst_1 _inst_4 _inst_5 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P M _inst_2 _inst_4 _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) P N _inst_2 _inst_5 _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N _inst_1 _inst_1 _inst_1 _inst_2 _inst_4 _inst_5 _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomCompTriple.ids.{u1, u1} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R _inst_1 P _inst_2 _inst_3)
+Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'ₓ'. -/
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
-theorem projectiveOfLiftingProperty' {R : Type u} [Semiring R] {P : Type max u v} [AddCommMonoid P]
-    [Module R P]
+theorem Module.Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max u v}
+    [AddCommMonoid P] [Module R P]
     -- If for all surjections of `R`-modules `M →ₗ N`, all maps `P →ₗ N` lift to `P →ₗ M`,
     (huniv :
       ∀ {M : Type max v u} {N : Type max u v} [AddCommMonoid M] [AddCommMonoid N],
@@ -218,12 +252,18 @@ theorem projectiveOfLiftingProperty' {R : Type u} [Semiring R] {P : Type max u v
   · intro p
     use Finsupp.single p 1
     simp
-#align module.projective_of_lifting_property' Module.projectiveOfLiftingProperty'
-
+#align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
+
+/- warning: module.projective_of_lifting_property -> Module.Projective.of_lifting_property is a dubious translation:
+lean 3 declaration is
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u2 u1} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u2 u1} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{succ (max u2 u1), succ (max u1 u2)} M N (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (fun (_x : LinearMap.{u1, u1, max u2 u1, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, max u2 u1, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f)) -> (Exists.{max (succ (max u1 u2)) (succ (max u2 u1))} (LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u2 u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) _inst_3 _inst_6) => Eq.{succ (max u1 u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u2 u1, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u2 u1} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+but is expected to have type
+  forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] {P : Type.{max u1 u2}} [_inst_2 : AddCommGroup.{max u1 u2} P] [_inst_3 : Module.{u1, max u1 u2} R P (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2)], (forall {M : Type.{max u2 u1}} {N : Type.{max u1 u2}} [_inst_4 : AddCommGroup.{max u1 u2} M] [_inst_5 : AddCommGroup.{max u1 u2} N] [_inst_6 : Module.{u1, max u1 u2} R M (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4)] [_inst_7 : Module.{u1, max u1 u2} R N (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5)] (f : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) (g : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7), (Function.Surjective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} M N (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) M N (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u1, u1, max u1 u2, max u1 u2} R R M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_6 _inst_7 (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1)))) f)) -> (Exists.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) (fun (h : LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P M (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) _inst_3 _inst_6) => Eq.{max (succ u1) (succ u2)} (LinearMap.{u1, u1, max u1 u2, max u1 u2} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) P N (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_7) (LinearMap.comp.{u1, u1, u1, max u1 u2, max u1 u2, max u1 u2} R R R P M N (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) (AddCommGroup.toAddCommMonoid.{max u1 u2} M _inst_4) (AddCommGroup.toAddCommMonoid.{max u1 u2} N _inst_5) _inst_3 _inst_6 _inst_7 (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingHomCompTriple.ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1)))) f h) g))) -> (Module.Projective.{u1, max u1 u2} R (Ring.toSemiring.{u1} R _inst_1) P (AddCommGroup.toAddCommMonoid.{max u1 u2} P _inst_2) _inst_3)
+Case conversion may be inaccurate. Consider using '#align module.projective_of_lifting_property Module.Projective.of_lifting_propertyₓ'. -/
 /-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
 which only requires quantifying over modules with an `add_comm_group` instance. -/
-theorem projectiveOfLiftingProperty {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
-    [Module R P]
+theorem Module.Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v}
+    [AddCommGroup P] [Module R P]
     -- If for all surjections of `R`-modules `M →ₗ N`, all maps `P →ₗ N` lift to `P →ₗ M`,
     (huniv :
       ∀ {M : Type max v u} {N : Type max u v} [AddCommGroup M] [AddCommGroup N],
@@ -245,7 +285,7 @@ theorem projectiveOfLiftingProperty {R : Type u} [Ring R] {P : Type max u v} [Ad
   · intro p
     use Finsupp.single p 1
     simp
-#align module.projective_of_lifting_property Module.projectiveOfLiftingProperty
+#align module.projective_of_lifting_property Module.Projective.of_lifting_property
 
 end OfLiftingProperty
 
Diff
@@ -160,7 +160,7 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) := b
       Function.comp.left_id, Dfinsupp.single_apply]
     rw [← Dfinsupp.lapply_apply j, apply_total R]
     obtain rfl | hij := eq_or_ne i j
-    · convert (hs i) x
+    · convert(hs i) x
       · ext
         simp
       · simp

Changes in mathlib4

mathlib3
mathlib4
chore: split Algebra.Module.Basic (#12501)

Similar to #12486, which did this for Algebra.Algebra.Basic.

Splits Algebra.Module.Defs off Algebra.Module.Basic. Most imports only need the Defs file, which has significantly smaller imports. The remaining Algebra.Module.Basic is now a grab-bag of unrelated results, and should probably be split further or rehomed.

This is mostly motivated by the wasted effort during minimization upon encountering Algebra.Module.Basic.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>

Diff
@@ -3,7 +3,7 @@ Copyright (c) 2021 Kevin Buzzard. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kevin Buzzard, Antoine Labelle
 -/
-import Mathlib.Algebra.Module.Basic
+import Mathlib.Algebra.Module.Defs
 import Mathlib.LinearAlgebra.Finsupp
 import Mathlib.LinearAlgebra.FreeModule.Basic
 
chore: avoid id.def (adaptation for nightly-2024-03-27) (#11829)

Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>

Diff
@@ -157,7 +157,7 @@ theorem Projective.of_basis {ι : Type*} (b : Basis ι R P) : Projective R P :=
   -- get it from `ι → (P →₀ R)` coming from `b`.
   use b.constr ℕ fun i => Finsupp.single (b i) (1 : R)
   intro m
-  simp only [b.constr_apply, mul_one, id.def, Finsupp.smul_single', Finsupp.total_single,
+  simp only [b.constr_apply, mul_one, id, Finsupp.smul_single', Finsupp.total_single,
     map_finsupp_sum]
   exact b.total_repr m
 #align module.projective_of_basis Module.Projective.of_basis
chore: classify todo porting notes (#11216)

Classifies by adding issue number #11215 to porting notes claiming "TODO".

Diff
@@ -171,7 +171,7 @@ end Ring
 --This is in a different section because special universe restrictions are required.
 section OfLiftingProperty
 
--- Porting note: todo: generalize to `P : Type v`?
+-- Porting note (#11215): TODO: generalize to `P : Type v`?
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
 theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max u v}
@@ -185,7 +185,7 @@ theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max
   .of_lifting_property'' (huniv · _)
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
 
--- Porting note: todo: generalize to `P : Type v`?
+-- Porting note (#11215): TODO: generalize to `P : Type v`?
 /-- A variant of `of_lifting_property'` when we're working over a `[Ring R]`,
 which only requires quantifying over modules with an `AddCommGroup` instance. -/
 theorem Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -171,7 +171,7 @@ end Ring
 --This is in a different section because special universe restrictions are required.
 section OfLiftingProperty
 
--- porting note: todo: generalize to `P : Type v`?
+-- Porting note: todo: generalize to `P : Type v`?
 /-- A module which satisfies the universal property is projective. Note that the universe variables
 in `huniv` are somewhat restricted. -/
 theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max u v}
@@ -185,7 +185,7 @@ theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max
   .of_lifting_property'' (huniv · _)
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
 
--- porting note: todo: generalize to `P : Type v`?
+-- Porting note: todo: generalize to `P : Type v`?
 /-- A variant of `of_lifting_property'` when we're working over a `[Ring R]`,
 which only requires quantifying over modules with an `AddCommGroup` instance. -/
 theorem Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -112,7 +112,7 @@ theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g
   use φ.comp s
   ext p
   conv_rhs => rw [← hs p]
-  simp [Finsupp.total_apply, Function.surjInv_eq hf, map_finsupp_sum]
+  simp [φ, Finsupp.total_apply, Function.surjInv_eq hf, map_finsupp_sum]
 #align module.projective_lifting_property Module.projective_lifting_property
 
 /-- A module which satisfies the universal property is projective: If all surjections of
chore(*): rename FunLike to DFunLike (#9785)

This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.

This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:

sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean     
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean

Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -90,7 +90,7 @@ theorem projective_def :
 
 theorem projective_def' :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Finsupp.total P P R id ∘ₗ s = .id :=
-  by simp_rw [projective_def, FunLike.ext_iff, Function.LeftInverse, comp_apply, id_apply]
+  by simp_rw [projective_def, DFunLike.ext_iff, Function.LeftInverse, comp_apply, id_apply]
 #align module.projective_def' Module.projective_def'
 
 /-- A projective R-module has the property that maps from it lift along surjections. -/
@@ -140,7 +140,7 @@ instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) :=
   .of_lifting_property'' fun f hf ↦ by
     classical
       choose g hg using fun i ↦ projective_lifting_property f (DFinsupp.lsingle i) hf
-      replace hg : ∀ i x, f (g i x) = DFinsupp.single i x := fun i ↦ FunLike.congr_fun (hg i)
+      replace hg : ∀ i x, f (g i x) = DFinsupp.single i x := fun i ↦ DFunLike.congr_fun (hg i)
       refine ⟨DFinsupp.coprodMap g, ?_⟩
       ext i x j
       simp only [comp_apply, id_apply, DFinsupp.lsingle_apply, DFinsupp.coprodMap_apply_single, hg]
chore: drop redundant LinearMap/LinearEquiv.map_finsupp_sum (#7313)
Diff
@@ -112,7 +112,7 @@ theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g
   use φ.comp s
   ext p
   conv_rhs => rw [← hs p]
-  simp [Finsupp.total_apply, Function.surjInv_eq hf]
+  simp [Finsupp.total_apply, Function.surjInv_eq hf, map_finsupp_sum]
 #align module.projective_lifting_property Module.projective_lifting_property
 
 /-- A module which satisfies the universal property is projective: If all surjections of
@@ -158,7 +158,7 @@ theorem Projective.of_basis {ι : Type*} (b : Basis ι R P) : Projective R P :=
   use b.constr ℕ fun i => Finsupp.single (b i) (1 : R)
   intro m
   simp only [b.constr_apply, mul_one, id.def, Finsupp.smul_single', Finsupp.total_single,
-    LinearMap.map_finsupp_sum]
+    map_finsupp_sum]
   exact b.total_repr m
 #align module.projective_of_basis Module.Projective.of_basis
 
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
@@ -71,7 +71,7 @@ open Finsupp
 /-- An R-module is projective if it is a direct summand of a free module, or equivalently
   if maps from the module lift along surjections. There are several other equivalent
   definitions. -/
-class Module.Projective (R : Type _) [Semiring R] (P : Type _) [AddCommMonoid P] [Module R P] :
+class Module.Projective (R : Type*) [Semiring R] (P : Type*) [AddCommMonoid P] [Module R P] :
     Prop where
   out : ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s
 #align module.projective Module.Projective
@@ -80,8 +80,8 @@ namespace Module
 
 section Semiring
 
-variable {R : Type _} [Semiring R] {P : Type _} [AddCommMonoid P] [Module R P] {M : Type _}
-  [AddCommMonoid M] [Module R M] {N : Type _} [AddCommMonoid N] [Module R N]
+variable {R : Type*} [Semiring R] {P : Type*} [AddCommMonoid P] [Module R P] {M : Type*}
+  [AddCommMonoid M] [Module R M] {N : Type*} [AddCommMonoid N] [Module R N]
 
 theorem projective_def :
     Projective R P ↔ ∃ s : P →ₗ[R] P →₀ R, Function.LeftInverse (Finsupp.total P P R id) s :=
@@ -125,7 +125,7 @@ theorem Projective.of_lifting_property'' {R : Type u} [Semiring R] {P : Type v}
   projective_def'.2 <| huniv (Finsupp.total P P R (id : P → P))
     (total_surjective _ Function.surjective_id)
 
-variable {Q : Type _} [AddCommMonoid Q] [Module R Q]
+variable {Q : Type*} [AddCommMonoid Q] [Module R Q]
 
 instance [Projective R P] [Projective R Q] : Projective R (P × Q) := by
   refine .of_lifting_property'' fun f hf ↦ ?_
@@ -134,7 +134,7 @@ instance [Projective R P] [Projective R Q] : Projective R (P × Q) := by
   refine ⟨coprod g₁ g₂, ?_⟩
   rw [LinearMap.comp_coprod, hg₁, hg₂, LinearMap.coprod_inl_inr]
 
-variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [∀ i : ι, Module R (A i)]
+variable {ι : Type*} (A : ι → Type*) [∀ i : ι, AddCommMonoid (A i)] [∀ i : ι, Module R (A i)]
 
 instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) :=
   .of_lifting_property'' fun f hf ↦ by
@@ -149,10 +149,10 @@ end Semiring
 
 section Ring
 
-variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
+variable {R : Type*} [Ring R] {P : Type*} [AddCommGroup P] [Module R P]
 
 /-- Free modules are projective. -/
-theorem Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P := by
+theorem Projective.of_basis {ι : Type*} (b : Basis ι R P) : Projective R P := by
   -- need P →ₗ (P →₀ R) for definition of projective.
   -- get it from `ι → (P →₀ R)` coming from `b`.
   use b.constr ℕ fun i => Finsupp.single (b i) (1 : R)
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) 2021 Kevin Buzzard. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Kevin Buzzard, Antoine Labelle
-
-! This file was ported from Lean 3 source module algebra.module.projective
-! leanprover-community/mathlib commit 405ea5cee7a7070ff8fb8dcb4cfb003532e34bce
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Module.Basic
 import Mathlib.LinearAlgebra.Finsupp
 import Mathlib.LinearAlgebra.FreeModule.Basic
 
+#align_import algebra.module.projective from "leanprover-community/mathlib"@"405ea5cee7a7070ff8fb8dcb4cfb003532e34bce"
+
 /-!
 
 # Projective modules
chore: rename Dfinsupp to DFinsupp (#5822)

See #4354

Diff
@@ -142,11 +142,11 @@ variable {ι : Type _} (A : ι → Type _) [∀ i : ι, AddCommMonoid (A i)] [
 instance [h : ∀ i : ι, Projective R (A i)] : Projective R (Π₀ i, A i) :=
   .of_lifting_property'' fun f hf ↦ by
     classical
-      choose g hg using fun i ↦ projective_lifting_property f (Dfinsupp.lsingle i) hf
-      replace hg : ∀ i x, f (g i x) = Dfinsupp.single i x := fun i ↦ FunLike.congr_fun (hg i)
-      refine ⟨Dfinsupp.coprodMap g, ?_⟩
+      choose g hg using fun i ↦ projective_lifting_property f (DFinsupp.lsingle i) hf
+      replace hg : ∀ i x, f (g i x) = DFinsupp.single i x := fun i ↦ FunLike.congr_fun (hg i)
+      refine ⟨DFinsupp.coprodMap g, ?_⟩
       ext i x j
-      simp only [comp_apply, id_apply, Dfinsupp.lsingle_apply, Dfinsupp.coprodMap_apply_single, hg]
+      simp only [comp_apply, id_apply, DFinsupp.lsingle_apply, DFinsupp.coprodMap_apply_single, hg]
 
 end Semiring
 
chore: fix upper/lowercase in comments (#4360)
  • Run a non-interactive version of fix-comments.py on all files.
  • Go through the diff and manually add/discard/edit chunks.
Diff
@@ -102,7 +102,7 @@ theorem projective_lifting_property [h : Projective R P] (f : M →ₗ[R] N) (g
   /-
     Here's the first step of the proof.
     Recall that `X →₀ R` is Lean's way of talking about the free `R`-module
-    on a type `X`. The universal property `finsupp.total` says that to a map
+    on a type `X`. The universal property `Finsupp.total` says that to a map
     `X → N` from a type to an `R`-module, we get an associated R-module map
     `(X →₀ R) →ₗ N`. Apply this to a (noncomputable) map `P → M` coming from the map
     `P →ₗ N` and a random splitting of the surjection `M →ₗ N`, and we get
chore: reenable eta, bump to nightly 2023-05-16 (#3414)

Now that leanprover/lean4#2210 has been merged, this PR:

  • removes all the set_option synthInstance.etaExperiment true commands (and some etaExperiment% term elaborators)
  • removes many but not quite all set_option maxHeartbeats commands
  • makes various other changes required to cope with leanprover/lean4#2210.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>

Diff
@@ -154,7 +154,6 @@ section Ring
 
 variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
 
-set_option synthInstance.etaExperiment true in
 /-- Free modules are projective. -/
 theorem Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P := by
   -- need P →ₗ (P →₀ R) for definition of projective.
@@ -190,7 +189,6 @@ theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max
 #align module.projective_of_lifting_property' Module.Projective.of_lifting_property'
 
 -- porting note: todo: generalize to `P : Type v`?
-set_option synthInstance.etaExperiment true in
 /-- A variant of `of_lifting_property'` when we're working over a `[Ring R]`,
 which only requires quantifying over modules with an `AddCommGroup` instance. -/
 theorem Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
chore: use etaExperiment rather than hacking with instances (#3668)

This is to fix timeouts in https://github.com/leanprover-community/mathlib4/pull/3552.

See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.233552.20.28LinearAlgebra.2EMatrix.2EToLin.29.

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

Diff
@@ -154,6 +154,7 @@ section Ring
 
 variable {R : Type _} [Ring R] {P : Type _} [AddCommGroup P] [Module R P]
 
+set_option synthInstance.etaExperiment true in
 /-- Free modules are projective. -/
 theorem Projective.of_basis {ι : Type _} (b : Basis ι R P) : Projective R P := by
   -- need P →ₗ (P →₀ R) for definition of projective.
chore: tidy various files (#3408)
Diff
@@ -190,8 +190,8 @@ theorem Projective.of_lifting_property' {R : Type u} [Semiring R] {P : Type max
 
 -- porting note: todo: generalize to `P : Type v`?
 set_option synthInstance.etaExperiment true in
-/-- A variant of `of_lifting_property'` when we're working over a `[ring R]`,
-which only requires quantifying over modules with an `add_comm_group` instance. -/
+/-- A variant of `of_lifting_property'` when we're working over a `[Ring R]`,
+which only requires quantifying over modules with an `AddCommGroup` instance. -/
 theorem Projective.of_lifting_property {R : Type u} [Ring R] {P : Type max u v} [AddCommGroup P]
     [Module R P]
     -- If for all surjections of `R`-modules `M →ₗ N`, all maps `P →ₗ N` lift to `P →ₗ M`,
feat: port Algebra.Module.Projective (#3335)

Dependencies 8 + 444

445 files ported (98.2%)
182703 lines ported (98.3%)
Show graph

The unported dependencies are