algebra.module.projective
⟷
Mathlib.Algebra.Module.Projective
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/4e24c4bfcff371c71f7ba22050308aa17815626c
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -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,
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -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. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -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. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -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. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/e05ead7993520a432bec94ac504842d90707ad63
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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>
@@ -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
@@ -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
@@ -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]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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]
@@ -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
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>
@@ -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]
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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)
@@ -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
@@ -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
fix-comments.py
on all files.@@ -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
Now that leanprover/lean4#2210 has been merged, this PR:
set_option synthInstance.etaExperiment true
commands (and some etaExperiment%
term elaborators)set_option maxHeartbeats
commandsCo-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>
@@ -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]
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>
@@ -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.
@@ -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`,
The unported dependencies are