ring_theory.polynomial.pochhammer ⟷
    
    Mathlib.RingTheory.Polynomial.Pochhammer
    
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -122,7 +122,7 @@ theorem ascPochhammer_succ_right (n : ℕ) : ascPochhammer S (n + 1) = ascPochha
   suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + n)
   · apply_fun Polynomial.map (algebraMap ℕ S) at h
     simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
-      Polynomial.map_nat_cast] using h
+      Polynomial.map_natCast] using h
   induction' n with n ih
   · simp
   ·
@@ -155,11 +155,11 @@ theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
 #align pochhammer_succ_comp_X_add_one ascPochhammer_succ_comp_X_add_one
 -/
 
-#print Polynomial.mul_X_add_nat_cast_comp /-
-theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
+#print Polynomial.mul_X_add_natCast_comp /-
+theorem Polynomial.mul_X_add_natCast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + n)).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
-#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
+#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_natCast_comp
 -/
 
 #print ascPochhammer_mul /-
@@ -169,7 +169,7 @@ theorem ascPochhammer_mul (n m : ℕ) :
   induction' m with m ih
   · simp
   ·
-    rw [ascPochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
+    rw [ascPochhammer_succ_right, Polynomial.mul_X_add_natCast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, ascPochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul ascPochhammer_mul
 -/
        mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
 import Tactic.Abel
-import Data.Polynomial.Eval
+import Algebra.Polynomial.Eval
 
 #align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
 
        mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -120,7 +120,7 @@ theorem ascPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (ascPochhammer
 theorem ascPochhammer_succ_right (n : ℕ) : ascPochhammer S (n + 1) = ascPochhammer S n * (X + n) :=
   by
   suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + n)
-  · apply_fun Polynomial.map (algebraMap ℕ S) at h 
+  · apply_fun Polynomial.map (algebraMap ℕ S) at h
     simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
        mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathbin.Tactic.Abel
-import Mathbin.Data.Polynomial.Eval
+import Tactic.Abel
+import Data.Polynomial.Eval
 
 #align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
 
        mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -41,118 +41,118 @@ section Semiring
 
 variable (S : Type u) [Semiring S]
 
-#print pochhammer /-
+#print ascPochhammer /-
 /-- `pochhammer S n` is the polynomial `X * (X+1) * ... * (X + n - 1)`,
 with coefficients in the semiring `S`.
 -/
-noncomputable def pochhammer : ℕ → S[X]
+noncomputable def ascPochhammer : ℕ → S[X]
   | 0 => 1
-  | n + 1 => X * (pochhammer n).comp (X + 1)
-#align pochhammer pochhammer
+  | n + 1 => X * (ascPochhammer n).comp (X + 1)
+#align pochhammer ascPochhammer
 -/
 
-#print pochhammer_zero /-
+#print ascPochhammer_zero /-
 @[simp]
-theorem pochhammer_zero : pochhammer S 0 = 1 :=
+theorem ascPochhammer_zero : ascPochhammer S 0 = 1 :=
   rfl
-#align pochhammer_zero pochhammer_zero
+#align pochhammer_zero ascPochhammer_zero
 -/
 
-#print pochhammer_one /-
+#print ascPochhammer_one /-
 @[simp]
-theorem pochhammer_one : pochhammer S 1 = X := by simp [pochhammer]
-#align pochhammer_one pochhammer_one
+theorem ascPochhammer_one : ascPochhammer S 1 = X := by simp [ascPochhammer]
+#align pochhammer_one ascPochhammer_one
 -/
 
-#print pochhammer_succ_left /-
-theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = X * (pochhammer S n).comp (X + 1) :=
-  by rw [pochhammer]
-#align pochhammer_succ_left pochhammer_succ_left
+#print ascPochhammer_succ_left /-
+theorem ascPochhammer_succ_left (n : ℕ) :
+    ascPochhammer S (n + 1) = X * (ascPochhammer S n).comp (X + 1) := by rw [ascPochhammer]
+#align pochhammer_succ_left ascPochhammer_succ_left
 -/
 
 section
 
 variable {S} {T : Type v} [Semiring T]
 
-#print pochhammer_map /-
+#print ascPochhammer_map /-
 @[simp]
-theorem pochhammer_map (f : S →+* T) (n : ℕ) : (pochhammer S n).map f = pochhammer T n :=
+theorem ascPochhammer_map (f : S →+* T) (n : ℕ) : (ascPochhammer S n).map f = ascPochhammer T n :=
   by
   induction' n with n ih
   · simp
-  · simp [ih, pochhammer_succ_left, map_comp]
-#align pochhammer_map pochhammer_map
+  · simp [ih, ascPochhammer_succ_left, map_comp]
+#align pochhammer_map ascPochhammer_map
 -/
 
 end
 
-#print pochhammer_eval_cast /-
+#print ascPochhammer_eval_cast /-
 @[simp, norm_cast]
-theorem pochhammer_eval_cast (n k : ℕ) : ((pochhammer ℕ n).eval k : S) = (pochhammer S n).eval k :=
-  by
-  rw [← pochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S), eval₂_at_nat_cast,
-    Nat.cast_id, eq_natCast]
-#align pochhammer_eval_cast pochhammer_eval_cast
+theorem ascPochhammer_eval_cast (n k : ℕ) :
+    ((ascPochhammer ℕ n).eval k : S) = (ascPochhammer S n).eval k := by
+  rw [← ascPochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S),
+    eval₂_at_nat_cast, Nat.cast_id, eq_natCast]
+#align pochhammer_eval_cast ascPochhammer_eval_cast
 -/
 
-#print pochhammer_eval_zero /-
-theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then 1 else 0 :=
+#print ascPochhammer_eval_zero /-
+theorem ascPochhammer_eval_zero {n : ℕ} : (ascPochhammer S n).eval 0 = if n = 0 then 1 else 0 :=
   by
   cases n
   · simp
-  · simp [X_mul, Nat.succ_ne_zero, pochhammer_succ_left]
-#align pochhammer_eval_zero pochhammer_eval_zero
+  · simp [X_mul, Nat.succ_ne_zero, ascPochhammer_succ_left]
+#align pochhammer_eval_zero ascPochhammer_eval_zero
 -/
 
-#print pochhammer_zero_eval_zero /-
-theorem pochhammer_zero_eval_zero : (pochhammer S 0).eval 0 = 1 := by simp
-#align pochhammer_zero_eval_zero pochhammer_zero_eval_zero
+#print ascPochhammer_zero_eval_zero /-
+theorem ascPochhammer_zero_eval_zero : (ascPochhammer S 0).eval 0 = 1 := by simp
+#align pochhammer_zero_eval_zero ascPochhammer_zero_eval_zero
 -/
 
-#print pochhammer_ne_zero_eval_zero /-
+#print ascPochhammer_ne_zero_eval_zero /-
 @[simp]
-theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).eval 0 = 0 := by
-  simp [pochhammer_eval_zero, h]
-#align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
+theorem ascPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (ascPochhammer S n).eval 0 = 0 := by
+  simp [ascPochhammer_eval_zero, h]
+#align pochhammer_ne_zero_eval_zero ascPochhammer_ne_zero_eval_zero
 -/
 
-#print pochhammer_succ_right /-
-theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
+#print ascPochhammer_succ_right /-
+theorem ascPochhammer_succ_right (n : ℕ) : ascPochhammer S (n + 1) = ascPochhammer S n * (X + n) :=
   by
-  suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + n)
+  suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + n)
   · apply_fun Polynomial.map (algebraMap ℕ S) at h 
-    simpa only [pochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
+    simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
   · simp
   ·
     conv_lhs =>
-      rw [pochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← pochhammer_succ_left, add_comp, X_comp,
-        nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
-#align pochhammer_succ_right pochhammer_succ_right
+      rw [ascPochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← ascPochhammer_succ_left, add_comp,
+        X_comp, nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
+#align pochhammer_succ_right ascPochhammer_succ_right
 -/
 
-#print pochhammer_succ_eval /-
-theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
-    (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
-  rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
+#print ascPochhammer_succ_eval /-
+theorem ascPochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
+    (ascPochhammer S (n + 1)).eval k = (ascPochhammer S n).eval k * (k + n) := by
+  rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
-#align pochhammer_succ_eval pochhammer_succ_eval
+#align pochhammer_succ_eval ascPochhammer_succ_eval
 -/
 
-#print pochhammer_succ_comp_X_add_one /-
-theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
-    (pochhammer S (n + 1)).comp (X + 1) =
-      pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) :=
+#print ascPochhammer_succ_comp_X_add_one /-
+theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
+    (ascPochhammer S (n + 1)).comp (X + 1) =
+      ascPochhammer S (n + 1) + (n + 1) • (ascPochhammer S n).comp (X + 1) :=
   by
   suffices
-    (pochhammer ℕ (n + 1)).comp (X + 1) =
-      pochhammer ℕ (n + 1) + (n + 1) * (pochhammer ℕ n).comp (X + 1)
+    (ascPochhammer ℕ (n + 1)).comp (X + 1) =
+      ascPochhammer ℕ (n + 1) + (n + 1) * (ascPochhammer ℕ n).comp (X + 1)
     by simpa [map_comp] using congr_arg (Polynomial.map (Nat.castRingHom S)) this
-  nth_rw 2 [pochhammer_succ_left]
-  rw [← add_mul, pochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
+  nth_rw 2 [ascPochhammer_succ_left]
+  rw [← add_mul, ascPochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
     add_comm ↑n, ← add_assoc]
-#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_X_add_one
+#align pochhammer_succ_comp_X_add_one ascPochhammer_succ_comp_X_add_one
 -/
 
 #print Polynomial.mul_X_add_nat_cast_comp /-
@@ -162,44 +162,45 @@ theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
 #align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
 -/
 
-#print pochhammer_mul /-
-theorem pochhammer_mul (n m : ℕ) :
-    pochhammer S n * (pochhammer S m).comp (X + n) = pochhammer S (n + m) :=
+#print ascPochhammer_mul /-
+theorem ascPochhammer_mul (n m : ℕ) :
+    ascPochhammer S n * (ascPochhammer S m).comp (X + n) = ascPochhammer S (n + m) :=
   by
   induction' m with m ih
   · simp
   ·
-    rw [pochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
-      Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
-#align pochhammer_mul pochhammer_mul
+    rw [ascPochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
+      Nat.succ_eq_add_one, ← add_assoc, ascPochhammer_succ_right, Nat.cast_add, add_assoc]
+#align pochhammer_mul ascPochhammer_mul
 -/
 
-#print pochhammer_nat_eq_ascFactorial /-
-theorem pochhammer_nat_eq_ascFactorial (n : ℕ) :
-    ∀ k, (pochhammer ℕ k).eval (n + 1) = n.ascFactorial k
+#print ascPochhammer_nat_eq_ascFactorial /-
+theorem ascPochhammer_nat_eq_ascFactorial (n : ℕ) :
+    ∀ k, (ascPochhammer ℕ k).eval (n + 1) = n.ascFactorial k
   | 0 => by erw [eval_one] <;> rfl
-  | t + 1 => by
-    rw [pochhammer_succ_right, eval_mul, pochhammer_nat_eq_ascFactorial t]
+  | t + 1 =>
+    by
+    rw [ascPochhammer_succ_right, eval_mul, ascPochhammer_nat_eq_ascFactorial t]
     suffices n.asc_factorial t * (n + 1 + t) = n.asc_factorial (t + 1) by simpa
     rw [Nat.ascFactorial_succ, add_right_comm, mul_comm]
-#align pochhammer_nat_eq_asc_factorial pochhammer_nat_eq_ascFactorial
+#align pochhammer_nat_eq_asc_factorial ascPochhammer_nat_eq_ascFactorial
 -/
 
-#print pochhammer_nat_eq_descFactorial /-
-theorem pochhammer_nat_eq_descFactorial (a b : ℕ) :
-    (pochhammer ℕ b).eval a = (a + b - 1).descFactorial b :=
+#print ascPochhammer_nat_eq_descFactorial /-
+theorem ascPochhammer_nat_eq_descFactorial (a b : ℕ) :
+    (ascPochhammer ℕ b).eval a = (a + b - 1).descFactorial b :=
   by
   cases b
-  · rw [Nat.descFactorial_zero, pochhammer_zero, Polynomial.eval_one]
+  · rw [Nat.descFactorial_zero, ascPochhammer_zero, Polynomial.eval_one]
   rw [Nat.add_succ, Nat.succ_sub_succ, tsub_zero]
   cases a
   ·
-    rw [pochhammer_ne_zero_eval_zero _ b.succ_ne_zero, zero_add,
+    rw [ascPochhammer_ne_zero_eval_zero _ b.succ_ne_zero, zero_add,
       Nat.descFactorial_of_lt b.lt_succ_self]
   ·
     rw [Nat.succ_add, ← Nat.add_succ, Nat.add_descFactorial_eq_ascFactorial,
-      pochhammer_nat_eq_ascFactorial]
-#align pochhammer_nat_eq_desc_factorial pochhammer_nat_eq_descFactorial
+      ascPochhammer_nat_eq_ascFactorial]
+#align pochhammer_nat_eq_desc_factorial ascPochhammer_nat_eq_descFactorial
 -/
 
 end Semiring
@@ -208,15 +209,15 @@ section StrictOrderedSemiring
 
 variable {S : Type _} [StrictOrderedSemiring S]
 
-#print pochhammer_pos /-
-theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s :=
+#print ascPochhammer_pos /-
+theorem ascPochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (ascPochhammer S n).eval s :=
   by
   induction' n with n ih
-  · simp only [Nat.zero_eq, pochhammer_zero, eval_one]; exact zero_lt_one
-  · rw [pochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
+  · simp only [Nat.zero_eq, ascPochhammer_zero, eval_one]; exact zero_lt_one
+  · rw [ascPochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
       Nat.cast_comm, ← mul_add]
     exact mul_pos ih (lt_of_lt_of_le h ((le_add_iff_nonneg_right _).mpr (Nat.cast_nonneg n)))
-#align pochhammer_pos pochhammer_pos
+#align pochhammer_pos ascPochhammer_pos
 -/
 
 end StrictOrderedSemiring
@@ -227,37 +228,37 @@ open scoped Nat
 
 variable (S : Type _) [Semiring S] (r n : ℕ)
 
-#print pochhammer_eval_one /-
+#print ascPochhammer_eval_one /-
 @[simp]
-theorem pochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
-    (pochhammer S n).eval (1 : S) = (n ! : S) := by
-  rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
-#align pochhammer_eval_one pochhammer_eval_one
+theorem ascPochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
+    (ascPochhammer S n).eval (1 : S) = (n ! : S) := by
+  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
+#align pochhammer_eval_one ascPochhammer_eval_one
 -/
 
-#print factorial_mul_pochhammer /-
-theorem factorial_mul_pochhammer (S : Type _) [Semiring S] (r n : ℕ) :
-    (r ! : S) * (pochhammer S n).eval (r + 1) = (r + n)! := by
-  rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
-#align factorial_mul_pochhammer factorial_mul_pochhammer
+#print factorial_mul_ascPochhammer /-
+theorem factorial_mul_ascPochhammer (S : Type _) [Semiring S] (r n : ℕ) :
+    (r ! : S) * (ascPochhammer S n).eval (r + 1) = (r + n)! := by
+  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
+#align factorial_mul_pochhammer factorial_mul_ascPochhammer
 -/
 
-#print pochhammer_nat_eval_succ /-
-theorem pochhammer_nat_eval_succ (r : ℕ) :
-    ∀ n : ℕ, n * (pochhammer ℕ r).eval (n + 1) = (n + r) * (pochhammer ℕ r).eval n
+#print ascPochhammer_nat_eval_succ /-
+theorem ascPochhammer_nat_eval_succ (r : ℕ) :
+    ∀ n : ℕ, n * (ascPochhammer ℕ r).eval (n + 1) = (n + r) * (ascPochhammer ℕ r).eval n
   | 0 => by
     by_cases h : r = 0
     · simp only [h, MulZeroClass.zero_mul, zero_add]
-    · simp only [pochhammer_eval_zero, MulZeroClass.zero_mul, if_neg h, MulZeroClass.mul_zero]
-  | k + 1 => by simp only [pochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
-#align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
+    · simp only [ascPochhammer_eval_zero, MulZeroClass.zero_mul, if_neg h, MulZeroClass.mul_zero]
+  | k + 1 => by simp only [ascPochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
+#align pochhammer_nat_eval_succ ascPochhammer_nat_eval_succ
 -/
 
-#print pochhammer_eval_succ /-
-theorem pochhammer_eval_succ (r n : ℕ) :
-    (n : S) * (pochhammer S r).eval (n + 1 : S) = (n + r) * (pochhammer S r).eval n := by
-  exact_mod_cast congr_arg Nat.cast (pochhammer_nat_eval_succ r n)
-#align pochhammer_eval_succ pochhammer_eval_succ
+#print ascPochhammer_eval_succ /-
+theorem ascPochhammer_eval_succ (r n : ℕ) :
+    (n : S) * (ascPochhammer S r).eval (n + 1 : S) = (n + r) * (ascPochhammer S r).eval n := by
+  exact_mod_cast congr_arg Nat.cast (ascPochhammer_nat_eval_succ r n)
+#align pochhammer_eval_succ ascPochhammer_eval_succ
 -/
 
 end Factorial
        mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module ring_theory.polynomial.pochhammer
-! leanprover-community/mathlib commit 69c6a5a12d8a2b159f20933e60115a4f2de62b58
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Tactic.Abel
 import Mathbin.Data.Polynomial.Eval
 
+#align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
+
 /-!
 # The Pochhammer polynomials
 
        mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -98,20 +98,26 @@ theorem pochhammer_eval_cast (n k : ℕ) : ((pochhammer ℕ n).eval k : S) = (po
 #align pochhammer_eval_cast pochhammer_eval_cast
 -/
 
+#print pochhammer_eval_zero /-
 theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then 1 else 0 :=
   by
   cases n
   · simp
   · simp [X_mul, Nat.succ_ne_zero, pochhammer_succ_left]
 #align pochhammer_eval_zero pochhammer_eval_zero
+-/
 
+#print pochhammer_zero_eval_zero /-
 theorem pochhammer_zero_eval_zero : (pochhammer S 0).eval 0 = 1 := by simp
 #align pochhammer_zero_eval_zero pochhammer_zero_eval_zero
+-/
 
+#print pochhammer_ne_zero_eval_zero /-
 @[simp]
 theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).eval 0 = 0 := by
   simp [pochhammer_eval_zero, h]
 #align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
+-/
 
 #print pochhammer_succ_right /-
 theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
@@ -129,11 +135,13 @@ theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n
 #align pochhammer_succ_right pochhammer_succ_right
 -/
 
+#print pochhammer_succ_eval /-
 theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
     (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
   rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
 #align pochhammer_succ_eval pochhammer_succ_eval
+-/
 
 #print pochhammer_succ_comp_X_add_one /-
 theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
@@ -203,6 +211,7 @@ section StrictOrderedSemiring
 
 variable {S : Type _} [StrictOrderedSemiring S]
 
+#print pochhammer_pos /-
 theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s :=
   by
   induction' n with n ih
@@ -211,6 +220,7 @@ theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval
       Nat.cast_comm, ← mul_add]
     exact mul_pos ih (lt_of_lt_of_le h ((le_add_iff_nonneg_right _).mpr (Nat.cast_nonneg n)))
 #align pochhammer_pos pochhammer_pos
+-/
 
 end StrictOrderedSemiring
 
@@ -228,10 +238,12 @@ theorem pochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
 #align pochhammer_eval_one pochhammer_eval_one
 -/
 
+#print factorial_mul_pochhammer /-
 theorem factorial_mul_pochhammer (S : Type _) [Semiring S] (r n : ℕ) :
     (r ! : S) * (pochhammer S n).eval (r + 1) = (r + n)! := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
 #align factorial_mul_pochhammer factorial_mul_pochhammer
+-/
 
 #print pochhammer_nat_eval_succ /-
 theorem pochhammer_nat_eval_succ (r : ℕ) :
@@ -244,10 +256,12 @@ theorem pochhammer_nat_eval_succ (r : ℕ) :
 #align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
 -/
 
+#print pochhammer_eval_succ /-
 theorem pochhammer_eval_succ (r n : ℕ) :
     (n : S) * (pochhammer S r).eval (n + 1 : S) = (n + r) * (pochhammer S r).eval n := by
   exact_mod_cast congr_arg Nat.cast (pochhammer_nat_eval_succ r n)
 #align pochhammer_eval_succ pochhammer_eval_succ
+-/
 
 end Factorial
 
        mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -117,7 +117,7 @@ theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).
 theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
   by
   suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + n)
-  · apply_fun Polynomial.map (algebraMap ℕ S)  at h 
+  · apply_fun Polynomial.map (algebraMap ℕ S) at h 
     simpa only [pochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
        mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -117,7 +117,7 @@ theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).
 theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
   by
   suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + n)
-  · apply_fun Polynomial.map (algebraMap ℕ S)  at h
+  · apply_fun Polynomial.map (algebraMap ℕ S)  at h 
     simpa only [pochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
        mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -38,7 +38,7 @@ universe u v
 
 open Polynomial
 
-open Polynomial
+open scoped Polynomial
 
 section Semiring
 
@@ -216,7 +216,7 @@ end StrictOrderedSemiring
 
 section Factorial
 
-open Nat
+open scoped Nat
 
 variable (S : Type _) [Semiring S] (r n : ℕ)
 
        mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -98,12 +98,6 @@ theorem pochhammer_eval_cast (n k : ℕ) : ((pochhammer ℕ n).eval k : S) = (po
 #align pochhammer_eval_cast pochhammer_eval_cast
 -/
 
-/- warning: pochhammer_eval_zero -> pochhammer_eval_zero is a dubious translation:
-lean 3 declaration is
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 n)) (ite.{succ u1} S (Eq.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) (Nat.decidableEq n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))))
-but is expected to have type
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 n)) (ite.{succ u1} S (Eq.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) (instDecidableEqNat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align pochhammer_eval_zero pochhammer_eval_zeroₓ'. -/
 theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then 1 else 0 :=
   by
   cases n
@@ -111,21 +105,9 @@ theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then
   · simp [X_mul, Nat.succ_ne_zero, pochhammer_succ_left]
 #align pochhammer_eval_zero pochhammer_eval_zero
 
-/- warning: pochhammer_zero_eval_zero -> pochhammer_zero_eval_zero is a dubious translation:
-lean 3 declaration is
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S], Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))))) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))))))
-but is expected to have type
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S], Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)))) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1)))
-Case conversion may be inaccurate. Consider using '#align pochhammer_zero_eval_zero pochhammer_zero_eval_zeroₓ'. -/
 theorem pochhammer_zero_eval_zero : (pochhammer S 0).eval 0 = 1 := by simp
 #align pochhammer_zero_eval_zero pochhammer_zero_eval_zero
 
-/- warning: pochhammer_ne_zero_eval_zero -> pochhammer_ne_zero_eval_zero is a dubious translation:
-lean 3 declaration is
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 n)) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))))
-but is expected to have type
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 n)) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zeroₓ'. -/
 @[simp]
 theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).eval 0 = 0 := by
   simp [pochhammer_eval_zero, h]
@@ -147,12 +129,6 @@ theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n
 #align pochhammer_succ_right pochhammer_succ_right
 -/
 
-/- warning: pochhammer_succ_eval -> pochhammer_succ_eval is a dubious translation:
-lean 3 declaration is
-  forall {S : Type.{u1}} [_inst_2 : Semiring.{u1} S] (n : Nat) (k : S), Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 n)) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) k ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) n)))
-but is expected to have type
-  forall {S : Type.{u1}} [_inst_2 : Semiring.{u1} S] (n : Nat) (k : S), Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))) (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 n)) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) k (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) n)))
-Case conversion may be inaccurate. Consider using '#align pochhammer_succ_eval pochhammer_succ_evalₓ'. -/
 theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
     (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
   rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
@@ -227,12 +203,6 @@ section StrictOrderedSemiring
 
 variable {S : Type _} [StrictOrderedSemiring S]
 
-/- warning: pochhammer_pos -> pochhammer_pos is a dubious translation:
-lean 3 declaration is
-  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toHasLt.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) s) -> (LT.lt.{u1} S (Preorder.toHasLt.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
-but is expected to have type
-  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) s) -> (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
-Case conversion may be inaccurate. Consider using '#align pochhammer_pos pochhammer_posₓ'. -/
 theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s :=
   by
   induction' n with n ih
@@ -258,12 +228,6 @@ theorem pochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
 #align pochhammer_eval_one pochhammer_eval_one
 -/
 
-/- warning: factorial_mul_pochhammer -> factorial_mul_pochhammer is a dubious translation:
-lean 3 declaration is
-  forall (S : Type.{u1}) [_inst_2 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) (Nat.factorial r)) (Polynomial.eval.{u1} S _inst_2 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) r) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))))))) (pochhammer.{u1} S _inst_2 n))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) (Nat.factorial (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) r n)))
-but is expected to have type
-  forall (S : Type.{u1}) [_inst_2 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) (Nat.factorial r)) (Polynomial.eval.{u1} S _inst_2 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) r) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_2)))) (pochhammer.{u1} S _inst_2 n))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) (Nat.factorial (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) r n)))
-Case conversion may be inaccurate. Consider using '#align factorial_mul_pochhammer factorial_mul_pochhammerₓ'. -/
 theorem factorial_mul_pochhammer (S : Type _) [Semiring S] (r n : ℕ) :
     (r ! : S) * (pochhammer S n).eval (r + 1) = (r + n)! := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
@@ -280,12 +244,6 @@ theorem pochhammer_nat_eval_succ (r : ℕ) :
 #align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
 -/
 
-/- warning: pochhammer_eval_succ -> pochhammer_eval_succ is a dubious translation:
-lean 3 declaration is
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (Polynomial.eval.{u1} S _inst_1 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))))))) (pochhammer.{u1} S _inst_1 r))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) r)) (Polynomial.eval.{u1} S _inst_1 ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (pochhammer.{u1} S _inst_1 r)))
-but is expected to have type
-  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (Polynomial.eval.{u1} S _inst_1 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 r))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) r)) (Polynomial.eval.{u1} S _inst_1 (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (pochhammer.{u1} S _inst_1 r)))
-Case conversion may be inaccurate. Consider using '#align pochhammer_eval_succ pochhammer_eval_succₓ'. -/
 theorem pochhammer_eval_succ (r n : ℕ) :
     (n : S) * (pochhammer S r).eval (n + 1 : S) = (n + r) * (pochhammer S r).eval n := by
   exact_mod_cast congr_arg Nat.cast (pochhammer_nat_eval_succ r n)
        mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -236,8 +236,7 @@ Case conversion may be inaccurate. Consider using '#align pochhammer_pos pochham
 theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s :=
   by
   induction' n with n ih
-  · simp only [Nat.zero_eq, pochhammer_zero, eval_one]
-    exact zero_lt_one
+  · simp only [Nat.zero_eq, pochhammer_zero, eval_one]; exact zero_lt_one
   · rw [pochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
       Nat.cast_comm, ← mul_add]
     exact mul_pos ih (lt_of_lt_of_le h ((le_add_iff_nonneg_right _).mpr (Nat.cast_nonneg n)))
        mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -229,7 +229,7 @@ variable {S : Type _} [StrictOrderedSemiring S]
 
 /- warning: pochhammer_pos -> pochhammer_pos is a dubious translation:
 lean 3 declaration is
-  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) s) -> (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
+  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toHasLt.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) s) -> (LT.lt.{u1} S (Preorder.toHasLt.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
 but is expected to have type
   forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) s) -> (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
 Case conversion may be inaccurate. Consider using '#align pochhammer_pos pochhammer_posₓ'. -/
        mathlib commit https://github.com/leanprover-community/mathlib/commit/172bf2812857f5e56938cc148b7a539f52f84ca9
@@ -159,8 +159,8 @@ theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
     eval_C_mul, Nat.cast_comm, ← mul_add]
 #align pochhammer_succ_eval pochhammer_succ_eval
 
-#print pochhammer_succ_comp_x_add_one /-
-theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
+#print pochhammer_succ_comp_X_add_one /-
+theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
     (pochhammer S (n + 1)).comp (X + 1) =
       pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) :=
   by
@@ -171,14 +171,14 @@ theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
   nth_rw 2 [pochhammer_succ_left]
   rw [← add_mul, pochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
     add_comm ↑n, ← add_assoc]
-#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_x_add_one
+#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_X_add_one
 -/
 
-#print Polynomial.mul_x_add_nat_cast_comp /-
-theorem Polynomial.mul_x_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
+#print Polynomial.mul_X_add_nat_cast_comp /-
+theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + n)).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
-#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_x_add_nat_cast_comp
+#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
 -/
 
 #print pochhammer_mul /-
@@ -188,7 +188,7 @@ theorem pochhammer_mul (n m : ℕ) :
   induction' m with m ih
   · simp
   ·
-    rw [pochhammer_succ_right, Polynomial.mul_x_add_nat_cast_comp, ← mul_assoc, ih,
+    rw [pochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul pochhammer_mul
 -/
        mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module ring_theory.polynomial.pochhammer
-! leanprover-community/mathlib commit 53b216bcc1146df1c4a0a86877890ea9f1f01589
+! leanprover-community/mathlib commit 69c6a5a12d8a2b159f20933e60115a4f2de62b58
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Data.Polynomial.Eval
 /-!
 # The Pochhammer polynomials
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 We define and prove some basic relations about
 `pochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1)`
 which is also known as the rising factorial. A version of this definition
        mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -272,8 +272,8 @@ theorem pochhammer_nat_eval_succ (r : ℕ) :
     ∀ n : ℕ, n * (pochhammer ℕ r).eval (n + 1) = (n + r) * (pochhammer ℕ r).eval n
   | 0 => by
     by_cases h : r = 0
-    · simp only [h, zero_mul, zero_add]
-    · simp only [pochhammer_eval_zero, zero_mul, if_neg h, mul_zero]
+    · simp only [h, MulZeroClass.zero_mul, zero_add]
+    · simp only [pochhammer_eval_zero, MulZeroClass.zero_mul, if_neg h, MulZeroClass.mul_zero]
   | k + 1 => by simp only [pochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
 #align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
 -/
        mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -41,6 +41,7 @@ section Semiring
 
 variable (S : Type u) [Semiring S]
 
+#print pochhammer /-
 /-- `pochhammer S n` is the polynomial `X * (X+1) * ... * (X + n - 1)`,
 with coefficients in the semiring `S`.
 -/
@@ -48,24 +49,32 @@ noncomputable def pochhammer : ℕ → S[X]
   | 0 => 1
   | n + 1 => X * (pochhammer n).comp (X + 1)
 #align pochhammer pochhammer
+-/
 
+#print pochhammer_zero /-
 @[simp]
 theorem pochhammer_zero : pochhammer S 0 = 1 :=
   rfl
 #align pochhammer_zero pochhammer_zero
+-/
 
+#print pochhammer_one /-
 @[simp]
 theorem pochhammer_one : pochhammer S 1 = X := by simp [pochhammer]
 #align pochhammer_one pochhammer_one
+-/
 
+#print pochhammer_succ_left /-
 theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = X * (pochhammer S n).comp (X + 1) :=
   by rw [pochhammer]
 #align pochhammer_succ_left pochhammer_succ_left
+-/
 
 section
 
 variable {S} {T : Type v} [Semiring T]
 
+#print pochhammer_map /-
 @[simp]
 theorem pochhammer_map (f : S →+* T) (n : ℕ) : (pochhammer S n).map f = pochhammer T n :=
   by
@@ -73,16 +82,25 @@ theorem pochhammer_map (f : S →+* T) (n : ℕ) : (pochhammer S n).map f = poch
   · simp
   · simp [ih, pochhammer_succ_left, map_comp]
 #align pochhammer_map pochhammer_map
+-/
 
 end
 
+#print pochhammer_eval_cast /-
 @[simp, norm_cast]
 theorem pochhammer_eval_cast (n k : ℕ) : ((pochhammer ℕ n).eval k : S) = (pochhammer S n).eval k :=
   by
   rw [← pochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S), eval₂_at_nat_cast,
     Nat.cast_id, eq_natCast]
 #align pochhammer_eval_cast pochhammer_eval_cast
+-/
 
+/- warning: pochhammer_eval_zero -> pochhammer_eval_zero is a dubious translation:
+lean 3 declaration is
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 n)) (ite.{succ u1} S (Eq.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) (Nat.decidableEq n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))))
+but is expected to have type
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 n)) (ite.{succ u1} S (Eq.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) (instDecidableEqNat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align pochhammer_eval_zero pochhammer_eval_zeroₓ'. -/
 theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then 1 else 0 :=
   by
   cases n
@@ -90,14 +108,27 @@ theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then
   · simp [X_mul, Nat.succ_ne_zero, pochhammer_succ_left]
 #align pochhammer_eval_zero pochhammer_eval_zero
 
+/- warning: pochhammer_zero_eval_zero -> pochhammer_zero_eval_zero is a dubious translation:
+lean 3 declaration is
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S], Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))))) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))))))
+but is expected to have type
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S], Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)))) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1)))
+Case conversion may be inaccurate. Consider using '#align pochhammer_zero_eval_zero pochhammer_zero_eval_zeroₓ'. -/
 theorem pochhammer_zero_eval_zero : (pochhammer S 0).eval 0 = 1 := by simp
 #align pochhammer_zero_eval_zero pochhammer_zero_eval_zero
 
+/- warning: pochhammer_ne_zero_eval_zero -> pochhammer_ne_zero_eval_zero is a dubious translation:
+lean 3 declaration is
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) (pochhammer.{u1} S _inst_1 n)) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))))
+but is expected to have type
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_1 (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 n)) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zeroₓ'. -/
 @[simp]
 theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).eval 0 = 0 := by
   simp [pochhammer_eval_zero, h]
 #align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
 
+#print pochhammer_succ_right /-
 theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
   by
   suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + n)
@@ -111,13 +142,21 @@ theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n
       rw [pochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← pochhammer_succ_left, add_comp, X_comp,
         nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
 #align pochhammer_succ_right pochhammer_succ_right
+-/
 
+/- warning: pochhammer_succ_eval -> pochhammer_succ_eval is a dubious translation:
+lean 3 declaration is
+  forall {S : Type.{u1}} [_inst_2 : Semiring.{u1} S] (n : Nat) (k : S), Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 n)) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) k ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) n)))
+but is expected to have type
+  forall {S : Type.{u1}} [_inst_2 : Semiring.{u1} S] (n : Nat) (k : S), Eq.{succ u1} S (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))) (Polynomial.eval.{u1} S _inst_2 k (pochhammer.{u1} S _inst_2 n)) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) k (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) n)))
+Case conversion may be inaccurate. Consider using '#align pochhammer_succ_eval pochhammer_succ_evalₓ'. -/
 theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
     (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
   rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
 #align pochhammer_succ_eval pochhammer_succ_eval
 
+#print pochhammer_succ_comp_x_add_one /-
 theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
     (pochhammer S (n + 1)).comp (X + 1) =
       pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) :=
@@ -130,12 +169,16 @@ theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
   rw [← add_mul, pochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
     add_comm ↑n, ← add_assoc]
 #align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_x_add_one
+-/
 
+#print Polynomial.mul_x_add_nat_cast_comp /-
 theorem Polynomial.mul_x_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + n)).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
 #align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_x_add_nat_cast_comp
+-/
 
+#print pochhammer_mul /-
 theorem pochhammer_mul (n m : ℕ) :
     pochhammer S n * (pochhammer S m).comp (X + n) = pochhammer S (n + m) :=
   by
@@ -145,7 +188,9 @@ theorem pochhammer_mul (n m : ℕ) :
     rw [pochhammer_succ_right, Polynomial.mul_x_add_nat_cast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul pochhammer_mul
+-/
 
+#print pochhammer_nat_eq_ascFactorial /-
 theorem pochhammer_nat_eq_ascFactorial (n : ℕ) :
     ∀ k, (pochhammer ℕ k).eval (n + 1) = n.ascFactorial k
   | 0 => by erw [eval_one] <;> rfl
@@ -154,7 +199,9 @@ theorem pochhammer_nat_eq_ascFactorial (n : ℕ) :
     suffices n.asc_factorial t * (n + 1 + t) = n.asc_factorial (t + 1) by simpa
     rw [Nat.ascFactorial_succ, add_right_comm, mul_comm]
 #align pochhammer_nat_eq_asc_factorial pochhammer_nat_eq_ascFactorial
+-/
 
+#print pochhammer_nat_eq_descFactorial /-
 theorem pochhammer_nat_eq_descFactorial (a b : ℕ) :
     (pochhammer ℕ b).eval a = (a + b - 1).descFactorial b :=
   by
@@ -169,6 +216,7 @@ theorem pochhammer_nat_eq_descFactorial (a b : ℕ) :
     rw [Nat.succ_add, ← Nat.add_succ, Nat.add_descFactorial_eq_ascFactorial,
       pochhammer_nat_eq_ascFactorial]
 #align pochhammer_nat_eq_desc_factorial pochhammer_nat_eq_descFactorial
+-/
 
 end Semiring
 
@@ -176,6 +224,12 @@ section StrictOrderedSemiring
 
 variable {S : Type _} [StrictOrderedSemiring S]
 
+/- warning: pochhammer_pos -> pochhammer_pos is a dubious translation:
+lean 3 declaration is
+  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) s) -> (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (OrderedCancelAddCommMonoid.toPartialOrder.{u1} S (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} S _inst_1)))) (OfNat.ofNat.{u1} S 0 (OfNat.mk.{u1} S 0 (Zero.zero.{u1} S (MulZeroClass.toHasZero.{u1} S (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1)))))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
+but is expected to have type
+  forall {S : Type.{u1}} [_inst_1 : StrictOrderedSemiring.{u1} S] (n : Nat) (s : S), (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) s) -> (LT.lt.{u1} S (Preorder.toLT.{u1} S (PartialOrder.toPreorder.{u1} S (StrictOrderedSemiring.toPartialOrder.{u1} S _inst_1))) (OfNat.ofNat.{u1} S 0 (Zero.toOfNat0.{u1} S (MonoidWithZero.toZero.{u1} S (Semiring.toMonoidWithZero.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1))))) (Polynomial.eval.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) s (pochhammer.{u1} S (StrictOrderedSemiring.toSemiring.{u1} S _inst_1) n)))
+Case conversion may be inaccurate. Consider using '#align pochhammer_pos pochhammer_posₓ'. -/
 theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s :=
   by
   induction' n with n ih
@@ -194,17 +248,26 @@ open Nat
 
 variable (S : Type _) [Semiring S] (r n : ℕ)
 
+#print pochhammer_eval_one /-
 @[simp]
 theorem pochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
     (pochhammer S n).eval (1 : S) = (n ! : S) := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
 #align pochhammer_eval_one pochhammer_eval_one
+-/
 
+/- warning: factorial_mul_pochhammer -> factorial_mul_pochhammer is a dubious translation:
+lean 3 declaration is
+  forall (S : Type.{u1}) [_inst_2 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) (Nat.factorial r)) (Polynomial.eval.{u1} S _inst_2 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) r) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))))))) (pochhammer.{u1} S _inst_2 n))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))))) (Nat.factorial (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) r n)))
+but is expected to have type
+  forall (S : Type.{u1}) [_inst_2 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2)))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) (Nat.factorial r)) (Polynomial.eval.{u1} S _inst_2 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_2))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) r) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_2)))) (pochhammer.{u1} S _inst_2 n))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_2) (Nat.factorial (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) r n)))
+Case conversion may be inaccurate. Consider using '#align factorial_mul_pochhammer factorial_mul_pochhammerₓ'. -/
 theorem factorial_mul_pochhammer (S : Type _) [Semiring S] (r n : ℕ) :
     (r ! : S) * (pochhammer S n).eval (r + 1) = (r + n)! := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
 #align factorial_mul_pochhammer factorial_mul_pochhammer
 
+#print pochhammer_nat_eval_succ /-
 theorem pochhammer_nat_eval_succ (r : ℕ) :
     ∀ n : ℕ, n * (pochhammer ℕ r).eval (n + 1) = (n + r) * (pochhammer ℕ r).eval n
   | 0 => by
@@ -213,7 +276,14 @@ theorem pochhammer_nat_eval_succ (r : ℕ) :
     · simp only [pochhammer_eval_zero, zero_mul, if_neg h, mul_zero]
   | k + 1 => by simp only [pochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
 #align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
+-/
 
+/- warning: pochhammer_eval_succ -> pochhammer_eval_succ is a dubious translation:
+lean 3 declaration is
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (Polynomial.eval.{u1} S _inst_1 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (OfNat.ofNat.{u1} S 1 (OfNat.mk.{u1} S 1 (One.one.{u1} S (AddMonoidWithOne.toOne.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))))))) (pochhammer.{u1} S _inst_1 r))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (Distrib.toHasMul.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toHasAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) r)) (Polynomial.eval.{u1} S _inst_1 ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat S (HasLiftT.mk.{1, succ u1} Nat S (CoeTCₓ.coe.{1, succ u1} Nat S (Nat.castCoe.{u1} S (AddMonoidWithOne.toNatCast.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))))) n) (pochhammer.{u1} S _inst_1 r)))
+but is expected to have type
+  forall (S : Type.{u1}) [_inst_1 : Semiring.{u1} S] (r : Nat) (n : Nat), Eq.{succ u1} S (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (Polynomial.eval.{u1} S _inst_1 (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (OfNat.ofNat.{u1} S 1 (One.toOfNat1.{u1} S (Semiring.toOne.{u1} S _inst_1)))) (pochhammer.{u1} S _inst_1 r))) (HMul.hMul.{u1, u1, u1} S S S (instHMul.{u1} S (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1)))) (HAdd.hAdd.{u1, u1, u1} S S S (instHAdd.{u1} S (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S (Semiring.toNonAssocSemiring.{u1} S _inst_1))))) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) r)) (Polynomial.eval.{u1} S _inst_1 (Nat.cast.{u1} S (Semiring.toNatCast.{u1} S _inst_1) n) (pochhammer.{u1} S _inst_1 r)))
+Case conversion may be inaccurate. Consider using '#align pochhammer_eval_succ pochhammer_eval_succₓ'. -/
 theorem pochhammer_eval_succ (r n : ℕ) :
     (n : S) * (pochhammer S r).eval (n + 1 : S) = (n + r) * (pochhammer S r).eval n := by
   exact_mod_cast congr_arg Nat.cast (pochhammer_nat_eval_succ r n)
        mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -46,7 +46,7 @@ with coefficients in the semiring `S`.
 -/
 noncomputable def pochhammer : ℕ → S[X]
   | 0 => 1
-  | n + 1 => x * (pochhammer n).comp (x + 1)
+  | n + 1 => X * (pochhammer n).comp (X + 1)
 #align pochhammer pochhammer
 
 @[simp]
@@ -55,10 +55,10 @@ theorem pochhammer_zero : pochhammer S 0 = 1 :=
 #align pochhammer_zero pochhammer_zero
 
 @[simp]
-theorem pochhammer_one : pochhammer S 1 = x := by simp [pochhammer]
+theorem pochhammer_one : pochhammer S 1 = X := by simp [pochhammer]
 #align pochhammer_one pochhammer_one
 
-theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = x * (pochhammer S n).comp (x + 1) :=
+theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = X * (pochhammer S n).comp (X + 1) :=
   by rw [pochhammer]
 #align pochhammer_succ_left pochhammer_succ_left
 
@@ -98,7 +98,7 @@ theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).
   simp [pochhammer_eval_zero, h]
 #align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
 
-theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (x + n) :=
+theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + n) :=
   by
   suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + n)
   · apply_fun Polynomial.map (algebraMap ℕ S)  at h
@@ -119,8 +119,8 @@ theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
 #align pochhammer_succ_eval pochhammer_succ_eval
 
 theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
-    (pochhammer S (n + 1)).comp (x + 1) =
-      pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (x + 1) :=
+    (pochhammer S (n + 1)).comp (X + 1) =
+      pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) :=
   by
   suffices
     (pochhammer ℕ (n + 1)).comp (X + 1) =
@@ -132,12 +132,12 @@ theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
 #align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_x_add_one
 
 theorem Polynomial.mul_x_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
-    (p * (x + n)).comp q = p.comp q * (q + n) := by
+    (p * (X + n)).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
 #align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_x_add_nat_cast_comp
 
 theorem pochhammer_mul (n m : ℕ) :
-    pochhammer S n * (pochhammer S m).comp (x + n) = pochhammer S (n + m) :=
+    pochhammer S n * (pochhammer S m).comp (X + n) = pochhammer S (n + m) :=
   by
   induction' m with m ih
   · simp
        mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
nat_cast/int_cast/rat_cast to natCast/intCast/ratCast (#11486)
Now that I am defining NNRat.cast, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast/intCast/ratCast over nat_cast/int_cast/rat_cast, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -104,7 +104,7 @@ end
 theorem ascPochhammer_eval_cast (n k : ℕ) :
     (((ascPochhammer ℕ n).eval k : ℕ) : S) = ((ascPochhammer S n).eval k : S) := by
   rw [← ascPochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S),
-      eval₂_at_nat_cast,Nat.cast_id]
+      eval₂_at_natCast,Nat.cast_id]
 #align pochhammer_eval_cast ascPochhammer_eval_cast
 
 theorem ascPochhammer_eval_zero {n : ℕ} : (ascPochhammer S n).eval 0 = if n = 0 then 1 else 0 := by
@@ -126,17 +126,17 @@ theorem ascPochhammer_succ_right (n : ℕ) :
   suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + (n : ℕ[X])) by
     apply_fun Polynomial.map (algebraMap ℕ S) at h
     simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
-      Polynomial.map_nat_cast] using h
+      Polynomial.map_natCast] using h
   induction' n with n ih
   · simp
   · conv_lhs =>
       rw [ascPochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← ascPochhammer_succ_left, add_comp,
-          X_comp, nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
+          X_comp, natCast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
 #align pochhammer_succ_right ascPochhammer_succ_right
 
 theorem ascPochhammer_succ_eval {S : Type*} [Semiring S] (n : ℕ) (k : S) :
     (ascPochhammer S (n + 1)).eval k = (ascPochhammer S n).eval k * (k + n) := by
-  rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
+  rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_natCast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
 #align pochhammer_succ_eval ascPochhammer_succ_eval
 
@@ -147,7 +147,7 @@ theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
       ascPochhammer ℕ (n + 1) + (n + 1) * (ascPochhammer ℕ n).comp (X + 1)
     by simpa [map_comp] using congr_arg (Polynomial.map (Nat.castRingHom S)) this
   nth_rw 2 [ascPochhammer_succ_left]
-  rw [← add_mul, ascPochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
+  rw [← add_mul, ascPochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, natCast_comp,
     add_comm, ← add_assoc]
   ring
 set_option linter.uppercaseLean3 false in
@@ -157,7 +157,7 @@ theorem ascPochhammer_mul (n m : ℕ) :
     ascPochhammer S n * (ascPochhammer S m).comp (X + (n : S[X])) = ascPochhammer S (n + m) := by
   induction' m with m ih
   · simp
-  · rw [ascPochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
+  · rw [ascPochhammer_succ_right, Polynomial.mul_X_add_natCast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, ascPochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul ascPochhammer_mul
 
@@ -166,7 +166,7 @@ theorem ascPochhammer_nat_eq_ascFactorial (n : ℕ) :
   | 0 => by rw [ascPochhammer_zero, eval_one, Nat.ascFactorial_zero]
   | t + 1 => by
     rw [ascPochhammer_succ_right, eval_mul, ascPochhammer_nat_eq_ascFactorial n t, eval_add, eval_X,
-      eval_nat_cast, Nat.cast_id, Nat.ascFactorial_succ, mul_comm]
+      eval_natCast, Nat.cast_id, Nat.ascFactorial_succ, mul_comm]
 #align pochhammer_nat_eq_asc_factorial ascPochhammer_nat_eq_ascFactorial
 
 theorem ascPochhammer_nat_eq_descFactorial (a b : ℕ) :
@@ -196,7 +196,7 @@ theorem ascPochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (ascPochhammer S n
   induction' n with n ih
   · simp only [Nat.zero_eq, ascPochhammer_zero, eval_one]
     exact zero_lt_one
-  · rw [ascPochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
+  · rw [ascPochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_natCast_mul, eval_mul_X,
       Nat.cast_comm, ← mul_add]
     exact mul_pos ih (lt_of_lt_of_le h ((le_add_iff_nonneg_right _).mpr (Nat.cast_nonneg n)))
 #align pochhammer_pos ascPochhammer_pos
@@ -284,7 +284,7 @@ end
 theorem descPochhammer_eval_cast (n : ℕ) (k : ℤ) :
     (((descPochhammer ℤ n).eval k : ℤ) : R) = ((descPochhammer R n).eval k : R) := by
   rw [← descPochhammer_map (algebraMap ℤ R), eval_map, ← eq_intCast (algebraMap ℤ R)]
-  simp only [algebraMap_int_eq, eq_intCast, eval₂_at_int_cast, Nat.cast_id, eq_natCast, Int.cast_id]
+  simp only [algebraMap_int_eq, eq_intCast, eval₂_at_intCast, Nat.cast_id, eq_natCast, Int.cast_id]
 
 theorem descPochhammer_eval_zero {n : ℕ} :
     (descPochhammer R n).eval 0 = if n = 0 then 1 else 0 := by
@@ -303,12 +303,12 @@ theorem descPochhammer_succ_right (n : ℕ) :
   suffices h : descPochhammer ℤ (n + 1) = descPochhammer ℤ n * (X - (n : ℤ[X])) by
     apply_fun Polynomial.map (algebraMap ℤ R) at h
     simpa [descPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
-      Polynomial.map_int_cast] using h
+      Polynomial.map_intCast] using h
   induction' n with n ih
   · simp [descPochhammer]
   · conv_lhs =>
       rw [descPochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← descPochhammer_succ_left, sub_comp,
-          X_comp, nat_cast_comp]
+          X_comp, natCast_comp]
     nth_rw 1 [Nat.succ_eq_add_one]
     rw [Nat.succ_eq_one_add, Nat.cast_add, Nat.cast_one, sub_add_eq_sub_sub]
 
@@ -326,7 +326,7 @@ theorem descPochhammer_natDegree (n : ℕ) [NoZeroDivisors R] [Nontrivial R] :
 
 theorem descPochhammer_succ_eval {S : Type*} [Ring S] (n : ℕ) (k : S) :
     (descPochhammer S (n + 1)).eval k = (descPochhammer S n).eval k * (k - n) := by
-  rw [descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
+  rw [descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, ← C_eq_natCast,
     eval_C_mul, Nat.cast_comm, ← mul_sub]
 
 theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
@@ -336,7 +336,7 @@ theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
       descPochhammer ℤ (n + 1) - (n + 1) * (descPochhammer ℤ n).comp (X - 1)
     by simpa [map_comp] using congr_arg (Polynomial.map (Int.castRingHom R)) this
   nth_rw 2 [descPochhammer_succ_left]
-  rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, nat_cast_comp]
+  rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, natCast_comp]
   ring
 
 theorem descPochhammer_eval_eq_ascPochhammer (r : R) (n : ℕ) :
@@ -353,7 +353,7 @@ theorem descPochhammer_mul (n m : ℕ) :
     descPochhammer R n * (descPochhammer R m).comp (X - (n : R[X])) = descPochhammer R (n + m) := by
   induction' m with m ih
   · simp
-  · rw [descPochhammer_succ_right, Polynomial.mul_X_sub_int_cast_comp, ← mul_assoc, ih,
+  · rw [descPochhammer_succ_right, Polynomial.mul_X_sub_intCast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, descPochhammer_succ_right, Nat.cast_add, sub_add_eq_sub_sub]
 
 theorem ascPochhammer_eval_neg_eq_descPochhammer (r : R) : ∀ (k : ℕ),
@@ -362,9 +362,9 @@ theorem ascPochhammer_eval_neg_eq_descPochhammer (r : R) : ∀ (k : ℕ),
     rw [ascPochhammer_zero, descPochhammer_zero]
     simp only [eval_one, pow_zero, mul_one]
   | (k+1) => by
-    rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, eval_nat_cast_mul,
+    rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, eval_natCast_mul,
       Nat.cast_comm, ← mul_add, ascPochhammer_eval_neg_eq_descPochhammer r k, mul_assoc,
-      descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, eval_nat_cast_mul,
+      descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, eval_natCast_mul,
       pow_add, pow_one, mul_assoc ((-1)^k) (-1), mul_sub, neg_one_mul, neg_mul_eq_mul_neg,
       Nat.cast_comm, sub_eq_add_neg, neg_one_mul, neg_neg, ← mul_add]
 
@@ -374,7 +374,7 @@ theorem descPochhammer_eval_eq_descFactorial (n k : ℕ) :
   | zero => rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero, Nat.cast_one]
   | succ k ih =>
     rw [descPochhammer_succ_right, Nat.descFactorial_succ, mul_sub, eval_sub, eval_mul_X,
-      ← Nat.cast_comm k, eval_nat_cast_mul, ← Nat.cast_comm n, ← sub_mul, ih]
+      ← Nat.cast_comm k, eval_natCast_mul, ← Nat.cast_comm n, ← sub_mul, ih]
     by_cases h : n < k
     · rw [Nat.descFactorial_eq_zero_iff_lt.mpr h, Nat.cast_zero, mul_zero, mul_zero, Nat.cast_zero]
     · rw [Nat.cast_mul, Nat.cast_sub <| not_lt.mp h]
        @@ -71,7 +71,7 @@ theorem monic_ascPochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
   induction' n with n hn
   · simp
   · have : leadingCoeff (X + 1 : S[X]) = 1 := leadingCoeff_X_add_C 1
-    rw [ascPochhammer_succ_left, Monic.def', leadingCoeff_mul,
+    rw [ascPochhammer_succ_left, Monic.def, leadingCoeff_mul,
       leadingCoeff_comp (ne_zero_of_eq_one <| natDegree_X_add_C 1 : natDegree (X + 1) ≠ 0), hn,
       monic_X, one_mul, one_mul, this, one_pow]
 
@@ -265,7 +265,7 @@ theorem monic_descPochhammer (n : ℕ) [Nontrivial R] [NoZeroDivisors R] :
   · simp
   · have h : leadingCoeff (X - 1 : R[X]) = 1 := leadingCoeff_X_sub_C 1
     have : natDegree (X - (1 : R[X])) ≠ 0 := ne_zero_of_eq_one <| natDegree_X_sub_C (1 : R)
-    rw [descPochhammer_succ_left, Monic.def', leadingCoeff_mul, leadingCoeff_comp this, hn, monic_X,
+    rw [descPochhammer_succ_left, Monic.def, leadingCoeff_mul, leadingCoeff_comp this, hn, monic_X,
         one_mul, one_mul, h, one_pow]
 
 section
        Data (#11751)
Polynomial and MvPolynomial are algebraic objects, hence should be under Algebra (or at least not under Data)
@@ -3,11 +3,11 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
+import Mathlib.Algebra.Polynomial.Degree.Definitions
+import Mathlib.Algebra.Polynomial.Eval
+import Mathlib.Algebra.Polynomial.Monic
+import Mathlib.Algebra.Polynomial.RingDivision
 import Mathlib.Tactic.Abel
-import Mathlib.Data.Polynomial.Degree.Definitions
-import Mathlib.Data.Polynomial.Eval
-import Mathlib.Data.Polynomial.Monic
-import Mathlib.Data.Polynomial.RingDivision
 
 #align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"53b216bcc1146df1c4a0a86877890ea9f1f01589"
 
        @@ -376,8 +376,8 @@ theorem descPochhammer_eval_eq_descFactorial (n k : ℕ) :
     rw [descPochhammer_succ_right, Nat.descFactorial_succ, mul_sub, eval_sub, eval_mul_X,
       ← Nat.cast_comm k, eval_nat_cast_mul, ← Nat.cast_comm n, ← sub_mul, ih]
     by_cases h : n < k
-    rw [Nat.descFactorial_eq_zero_iff_lt.mpr h, Nat.cast_zero, mul_zero, mul_zero, Nat.cast_zero]
-    rw [Nat.cast_mul, Nat.cast_sub <| not_lt.mp h]
+    · rw [Nat.descFactorial_eq_zero_iff_lt.mpr h, Nat.cast_zero, mul_zero, mul_zero, Nat.cast_zero]
+    · rw [Nat.cast_mul, Nat.cast_sub <| not_lt.mp h]
 
 theorem descPochhammer_int_eq_ascFactorial (a b : ℕ) :
     (descPochhammer ℤ b).eval (a + b : ℤ) = (a + 1).ascFactorial b := by
        mul-div cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero lemma name, the Group lemma, the AddGroup lemma name).
| Statement | New name | Old name | |
@@ -344,7 +344,7 @@ theorem descPochhammer_eval_eq_ascPochhammer (r : R) (n : ℕ) :
   induction n with
   | zero => rw [descPochhammer_zero, eval_one, ascPochhammer_zero, eval_one]
   | succ n ih =>
-    rw [Nat.cast_succ, sub_add, add_sub_cancel, descPochhammer_succ_eval, ih,
+    rw [Nat.cast_succ, sub_add, add_sub_cancel_right, descPochhammer_succ_eval, ih,
       ascPochhammer_succ_left, X_mul, eval_mul_X, show (X + 1 : R[X]) =
       (X + 1 : ℕ[X]).map (algebraMap ℕ R) by simp only [Polynomial.map_add, map_X,
       Polynomial.map_one], ascPochhammer_eval_comp, eval₂_add, eval₂_X, eval₂_one]
        @@ -71,7 +71,7 @@ theorem monic_ascPochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
   induction' n with n hn
   · simp
   · have : leadingCoeff (X + 1 : S[X]) = 1 := leadingCoeff_X_add_C 1
-    rw [ascPochhammer_succ_left, Monic.def, leadingCoeff_mul,
+    rw [ascPochhammer_succ_left, Monic.def', leadingCoeff_mul,
       leadingCoeff_comp (ne_zero_of_eq_one <| natDegree_X_add_C 1 : natDegree (X + 1) ≠ 0), hn,
       monic_X, one_mul, one_mul, this, one_pow]
 
@@ -265,7 +265,7 @@ theorem monic_descPochhammer (n : ℕ) [Nontrivial R] [NoZeroDivisors R] :
   · simp
   · have h : leadingCoeff (X - 1 : R[X]) = 1 := leadingCoeff_X_sub_C 1
     have : natDegree (X - (1 : R[X])) ≠ 0 := ne_zero_of_eq_one <| natDegree_X_sub_C (1 : R)
-    rw [descPochhammer_succ_left, Monic.def, leadingCoeff_mul, leadingCoeff_comp this, hn, monic_X,
+    rw [descPochhammer_succ_left, Monic.def', leadingCoeff_mul, leadingCoeff_comp this, hn, monic_X,
         one_mul, one_mul, h, one_pow]
 
 section
        @@ -104,7 +104,7 @@ end
 theorem ascPochhammer_eval_cast (n k : ℕ) :
     (((ascPochhammer ℕ n).eval k : ℕ) : S) = ((ascPochhammer S n).eval k : S) := by
   rw [← ascPochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S),
-      eval₂_at_nat_cast,Nat.cast_id, eq_natCast]
+      eval₂_at_nat_cast,Nat.cast_id]
 #align pochhammer_eval_cast ascPochhammer_eval_cast
 
 theorem ascPochhammer_eval_zero {n : ℕ} : (ascPochhammer S n).eval 0 = if n = 0 then 1 else 0 := by
        have, replace and suffices (#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -123,8 +123,8 @@ theorem ascPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (ascPochhammer
 
 theorem ascPochhammer_succ_right (n : ℕ) :
     ascPochhammer S (n + 1) = ascPochhammer S n * (X + (n : S[X])) := by
-  suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + (n : ℕ[X]))
-  · apply_fun Polynomial.map (algebraMap ℕ S) at h
+  suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + (n : ℕ[X])) by
+    apply_fun Polynomial.map (algebraMap ℕ S) at h
     simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
@@ -300,8 +300,8 @@ theorem descPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (descPochhamm
 
 theorem descPochhammer_succ_right (n : ℕ) :
     descPochhammer R (n + 1) = descPochhammer R n * (X - (n : R[X])) := by
-  suffices h : descPochhammer ℤ (n + 1) = descPochhammer ℤ n * (X - (n : ℤ[X]))
-  · apply_fun Polynomial.map (algebraMap ℤ R) at h
+  suffices h : descPochhammer ℤ (n + 1) = descPochhammer ℤ n * (X - (n : ℤ[X])) by
+    apply_fun Polynomial.map (algebraMap ℤ R) at h
     simpa [descPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_int_cast] using h
   induction' n with n ih
        We define generalized binomial coefficients, and prove a couple basic properties. In particular, we show that
multiplication by a suitable factorial yields a descending Pochhammer evaluation.  We also show that casting Nat.choose is the same as taking Ring.choose of a natural number cast.  To prove these, we add some results about polynomial evaluation.
@@ -87,6 +87,17 @@ theorem ascPochhammer_map (f : S →+* T) (n : ℕ) :
   · simp [ih, ascPochhammer_succ_left, map_comp]
 #align pochhammer_map ascPochhammer_map
 
+theorem ascPochhammer_eval₂ (f : S →+* T) (n : ℕ) (t : T) :
+    (ascPochhammer T n).eval t = (ascPochhammer S n).eval₂ f t := by
+  rw [← ascPochhammer_map f]
+  exact eval_map f t
+
+theorem ascPochhammer_eval_comp {R : Type*} [CommSemiring R] (n : ℕ) (p : R[X]) [Algebra R S]
+    (x : S) : ((ascPochhammer S n).comp (p.map (algebraMap R S))).eval x =
+    (ascPochhammer S n).eval (p.eval₂ (algebraMap R S) x) := by
+  rw [ascPochhammer_eval₂ (algebraMap R S), ← eval₂_comp', ← ascPochhammer_map (algebraMap R S),
+    ← map_comp, eval_map]
+
 end
 
 @[simp, norm_cast]
@@ -328,6 +339,16 @@ theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
   rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, nat_cast_comp]
   ring
 
+theorem descPochhammer_eval_eq_ascPochhammer (r : R) (n : ℕ) :
+    (descPochhammer R n).eval r = (ascPochhammer R n).eval (r - n + 1) := by
+  induction n with
+  | zero => rw [descPochhammer_zero, eval_one, ascPochhammer_zero, eval_one]
+  | succ n ih =>
+    rw [Nat.cast_succ, sub_add, add_sub_cancel, descPochhammer_succ_eval, ih,
+      ascPochhammer_succ_left, X_mul, eval_mul_X, show (X + 1 : R[X]) =
+      (X + 1 : ℕ[X]).map (algebraMap ℕ R) by simp only [Polynomial.map_add, map_X,
+      Polynomial.map_one], ascPochhammer_eval_comp, eval₂_add, eval₂_X, eval₂_one]
+
 theorem descPochhammer_mul (n m : ℕ) :
     descPochhammer R n * (descPochhammer R m).comp (X - (n : R[X])) = descPochhammer R (n + m) := by
   induction' m with m ih
@@ -347,25 +368,20 @@ theorem ascPochhammer_eval_neg_eq_descPochhammer (r : R) : ∀ (k : ℕ),
       pow_add, pow_one, mul_assoc ((-1)^k) (-1), mul_sub, neg_one_mul, neg_mul_eq_mul_neg,
       Nat.cast_comm, sub_eq_add_neg, neg_one_mul, neg_neg, ← mul_add]
 
-theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
-    ∀ k, (descPochhammer ℤ k).eval (n : ℤ) = n.descFactorial k
-  | 0 => by
-    rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero]
-    rfl
-  | t + 1 => by
-    rw [descPochhammer_succ_right, eval_mul, descPochhammer_int_eq_descFactorial n t]
-    simp only [eval_sub, eval_X, eval_nat_cast, Nat.descFactorial_succ, Nat.cast_mul,
-        Nat.descFactorial_eq_zero_iff_lt]
-    rw [mul_comm]
-    simp only [mul_eq_mul_right_iff, Nat.cast_eq_zero, Nat.descFactorial_eq_zero_iff_lt]
-    by_cases h : n < t
-    · tauto
-    · left
-      exact (Int.ofNat_sub <| not_lt.mp h).symm
+theorem descPochhammer_eval_eq_descFactorial (n k : ℕ) :
+    (descPochhammer R k).eval (n : R) = n.descFactorial k := by
+  induction k with
+  | zero => rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero, Nat.cast_one]
+  | succ k ih =>
+    rw [descPochhammer_succ_right, Nat.descFactorial_succ, mul_sub, eval_sub, eval_mul_X,
+      ← Nat.cast_comm k, eval_nat_cast_mul, ← Nat.cast_comm n, ← sub_mul, ih]
+    by_cases h : n < k
+    rw [Nat.descFactorial_eq_zero_iff_lt.mpr h, Nat.cast_zero, mul_zero, mul_zero, Nat.cast_zero]
+    rw [Nat.cast_mul, Nat.cast_sub <| not_lt.mp h]
 
 theorem descPochhammer_int_eq_ascFactorial (a b : ℕ) :
     (descPochhammer ℤ b).eval (a + b : ℤ) = (a + 1).ascFactorial b := by
-  rw [← Nat.cast_add, descPochhammer_int_eq_descFactorial (a + b) b,
+  rw [← Nat.cast_add, descPochhammer_eval_eq_descFactorial ℤ (a + b) b,
     Nat.add_descFactorial_eq_ascFactorial]
 
 end Ring
        We add a binomial ring instance for integers. To prove the necessary identity for negative integers, we add a lemma comparing evaluations of ascending and descending Pochhammer polynomials.
@@ -335,6 +335,18 @@ theorem descPochhammer_mul (n m : ℕ) :
   · rw [descPochhammer_succ_right, Polynomial.mul_X_sub_int_cast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, descPochhammer_succ_right, Nat.cast_add, sub_add_eq_sub_sub]
 
+theorem ascPochhammer_eval_neg_eq_descPochhammer (r : R) : ∀ (k : ℕ),
+    (ascPochhammer R k).eval (-r) = (-1)^k * (descPochhammer R k).eval r
+  | 0 => by
+    rw [ascPochhammer_zero, descPochhammer_zero]
+    simp only [eval_one, pow_zero, mul_one]
+  | (k+1) => by
+    rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, eval_nat_cast_mul,
+      Nat.cast_comm, ← mul_add, ascPochhammer_eval_neg_eq_descPochhammer r k, mul_assoc,
+      descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, eval_nat_cast_mul,
+      pow_add, pow_one, mul_assoc ((-1)^k) (-1), mul_sub, neg_one_mul, neg_mul_eq_mul_neg,
+      Nat.cast_comm, sub_eq_add_neg, neg_one_mul, neg_neg, ← mul_add]
+
 theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
     ∀ k, (descPochhammer ℤ k).eval (n : ℤ) = n.descFactorial k
   | 0 => by
        @@ -151,24 +151,16 @@ theorem ascPochhammer_mul (n m : ℕ) :
 #align pochhammer_mul ascPochhammer_mul
 
 theorem ascPochhammer_nat_eq_ascFactorial (n : ℕ) :
-    ∀ k, (ascPochhammer ℕ k).eval (n + 1) = n.ascFactorial k
+    ∀ k, (ascPochhammer ℕ k).eval n = n.ascFactorial k
   | 0 => by rw [ascPochhammer_zero, eval_one, Nat.ascFactorial_zero]
   | t + 1 => by
-    rw [ascPochhammer_succ_right, eval_mul, ascPochhammer_nat_eq_ascFactorial n t]
-    simp only [eval_add, eval_X, eval_nat_cast, Nat.cast_id]
-    rw [Nat.ascFactorial_succ, add_right_comm, mul_comm]
+    rw [ascPochhammer_succ_right, eval_mul, ascPochhammer_nat_eq_ascFactorial n t, eval_add, eval_X,
+      eval_nat_cast, Nat.cast_id, Nat.ascFactorial_succ, mul_comm]
 #align pochhammer_nat_eq_asc_factorial ascPochhammer_nat_eq_ascFactorial
 
 theorem ascPochhammer_nat_eq_descFactorial (a b : ℕ) :
     (ascPochhammer ℕ b).eval a = (a + b - 1).descFactorial b := by
-  cases' b with b
-  · rw [Nat.descFactorial_zero, ascPochhammer_zero, Polynomial.eval_one]
-  rw [Nat.add_succ, Nat.succ_sub_succ, tsub_zero]
-  cases a
-  · simp only [Nat.zero_eq, ne_eq, Nat.succ_ne_zero, not_false_iff, ascPochhammer_ne_zero_eval_zero,
-    zero_add, Nat.descFactorial_succ, le_refl, tsub_eq_zero_of_le, zero_mul]
-  · rw [Nat.succ_add, ← Nat.add_succ, Nat.add_descFactorial_eq_ascFactorial,
-      ascPochhammer_nat_eq_ascFactorial]
+  rw [ascPochhammer_nat_eq_ascFactorial, Nat.add_descFactorial_eq_ascFactorial']
 #align pochhammer_nat_eq_desc_factorial ascPochhammer_nat_eq_descFactorial
 
 @[simp]
@@ -209,7 +201,7 @@ variable (S : Type*) [Semiring S] (r n : ℕ)
 @[simp]
 theorem ascPochhammer_eval_one (S : Type*) [Semiring S] (n : ℕ) :
     (ascPochhammer S n).eval (1 : S) = (n ! : S) := by
-  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
+  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.one_ascFactorial]
 #align pochhammer_eval_one ascPochhammer_eval_one
 
 theorem factorial_mul_ascPochhammer (S : Type*) [Semiring S] (r n : ℕ) :
@@ -360,8 +352,8 @@ theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
       exact (Int.ofNat_sub <| not_lt.mp h).symm
 
 theorem descPochhammer_int_eq_ascFactorial (a b : ℕ) :
-    (descPochhammer ℤ b).eval (a + b : ℤ) = a.ascFactorial b := by
+    (descPochhammer ℤ b).eval (a + b : ℤ) = (a + 1).ascFactorial b := by
   rw [← Nat.cast_add, descPochhammer_int_eq_descFactorial (a + b) b,
-      Nat.add_descFactorial_eq_ascFactorial]
+    Nat.add_descFactorial_eq_ascFactorial]
 
 end Ring
        I've also got a change to make this required, but I'd like to land this first.
@@ -354,7 +354,7 @@ theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
         Nat.descFactorial_eq_zero_iff_lt]
     rw [mul_comm]
     simp only [mul_eq_mul_right_iff, Nat.cast_eq_zero, Nat.descFactorial_eq_zero_iff_lt]
-    by_cases n < t
+    by_cases h : n < t
     · tauto
     · left
       exact (Int.ofNat_sub <| not_lt.mp h).symm
        exact_mod_cast tactic with mod_cast elaborator where possible (#8404)
We still have the exact_mod_cast tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -228,8 +228,8 @@ theorem ascPochhammer_nat_eval_succ (r : ℕ) :
 
 theorem ascPochhammer_eval_succ (r n : ℕ) :
     (n : S) * (ascPochhammer S r).eval (n + 1 : S) =
-    (n + r) * (ascPochhammer S r).eval (n : S) := by
-  exact_mod_cast congr_arg Nat.cast (ascPochhammer_nat_eval_succ r n)
+    (n + r) * (ascPochhammer S r).eval (n : S) :=
+  mod_cast congr_arg Nat.cast (ascPochhammer_nat_eval_succ r n)
 #align pochhammer_eval_succ ascPochhammer_eval_succ
 
 end Factorial
        @@ -310,7 +310,7 @@ theorem descPochhammer_succ_right (n : ℕ) :
     rw [Nat.succ_eq_one_add, Nat.cast_add, Nat.cast_one, sub_add_eq_sub_sub]
 
 @[simp]
-theorem descPochhammer_natDegree (n : ℕ) [NoZeroDivisors R] [Nontrivial R]:
+theorem descPochhammer_natDegree (n : ℕ) [NoZeroDivisors R] [Nontrivial R] :
     (descPochhammer R n).natDegree = n := by
   induction' n with n hn
   · simp
        @@ -142,14 +142,6 @@ theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
 set_option linter.uppercaseLean3 false in
 #align pochhammer_succ_comp_X_add_one ascPochhammer_succ_comp_X_add_one
 
-
--- TODO: find a better place for this lemma?
-theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
-    (p * (X + (n : S[X]))).comp q = p.comp q * (q + n) := by
-  rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
-set_option linter.uppercaseLean3 false in
-#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
-
 theorem ascPochhammer_mul (n m : ℕ) :
     ascPochhammer S n * (ascPochhammer S m).comp (X + (n : S[X])) = ascPochhammer S (n + m) := by
   induction' m with m ih
@@ -344,11 +336,6 @@ theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
   rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, nat_cast_comp]
   ring
 
--- TODO: find a better place for this lemma?
-theorem Polynomial.mul_X_sub_int_cast_comp {p q : R[X]} {n : ℕ} :
-    (p * (X - (n : R[X]))).comp q = p.comp q * (q - n) := by
-  rw [mul_sub, sub_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_sub]
-
 theorem descPochhammer_mul (n m : ℕ) :
     descPochhammer R n * (descPochhammer R m).comp (X - (n : R[X])) = descPochhammer R (n + m) := by
   induction' m with m ih
        @@ -66,7 +66,7 @@ theorem ascPochhammer_succ_left (n : ℕ) :
   by rw [ascPochhammer]
 #align pochhammer_succ_left ascPochhammer_succ_left
 
-theorem monic_pochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
+theorem monic_ascPochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
     Monic <| ascPochhammer S n := by
   induction' n with n hn
   · simp
@@ -180,7 +180,7 @@ theorem ascPochhammer_nat_eq_descFactorial (a b : ℕ) :
 #align pochhammer_nat_eq_desc_factorial ascPochhammer_nat_eq_descFactorial
 
 @[simp]
-theorem pochhammer_natDegree (n : ℕ) [NoZeroDivisors S] [Nontrivial S] :
+theorem ascPochhammer_natDegree (n : ℕ) [NoZeroDivisors S] [Nontrivial S] :
     (ascPochhammer S n).natDegree = n := by
   induction' n with n hn
   · simp
@@ -356,13 +356,13 @@ theorem descPochhammer_mul (n m : ℕ) :
   · rw [descPochhammer_succ_right, Polynomial.mul_X_sub_int_cast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, descPochhammer_succ_right, Nat.cast_add, sub_add_eq_sub_sub]
 
-theorem descPochhammer_int_eq_ascFactorial (n : ℕ) :
+theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
     ∀ k, (descPochhammer ℤ k).eval (n : ℤ) = n.descFactorial k
   | 0 => by
     rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero]
     rfl
   | t + 1 => by
-    rw [descPochhammer_succ_right, eval_mul, descPochhammer_int_eq_ascFactorial n t]
+    rw [descPochhammer_succ_right, eval_mul, descPochhammer_int_eq_descFactorial n t]
     simp only [eval_sub, eval_X, eval_nat_cast, Nat.descFactorial_succ, Nat.cast_mul,
         Nat.descFactorial_eq_zero_iff_lt]
     rw [mul_comm]
@@ -372,9 +372,9 @@ theorem descPochhammer_int_eq_ascFactorial (n : ℕ) :
     · left
       exact (Int.ofNat_sub <| not_lt.mp h).symm
 
-theorem Pochhammer_int_eq_descFactorial (a b : ℕ) :
+theorem descPochhammer_int_eq_ascFactorial (a b : ℕ) :
     (descPochhammer ℤ b).eval (a + b : ℤ) = a.ascFactorial b := by
-  rw [← Nat.cast_add, descPochhammer_int_eq_ascFactorial (a + b) b,
+  rw [← Nat.cast_add, descPochhammer_int_eq_descFactorial (a + b) b,
       Nat.add_descFactorial_eq_ascFactorial]
 
 end Ring
        @@ -317,6 +317,18 @@ theorem descPochhammer_succ_right (n : ℕ) :
     nth_rw 1 [Nat.succ_eq_add_one]
     rw [Nat.succ_eq_one_add, Nat.cast_add, Nat.cast_one, sub_add_eq_sub_sub]
 
+@[simp]
+theorem descPochhammer_natDegree (n : ℕ) [NoZeroDivisors R] [Nontrivial R]:
+    (descPochhammer R n).natDegree = n := by
+  induction' n with n hn
+  · simp
+  · have : natDegree (X - (n : R[X])) = 1 := natDegree_X_sub_C (n : R)
+    rw [descPochhammer_succ_right,
+        natDegree_mul _ (ne_zero_of_natDegree_gt <| this.symm ▸ Nat.zero_lt_one), hn, this]
+    cases n
+    · simp
+    · refine' ne_zero_of_natDegree_gt <| hn.symm ▸ Nat.succ_pos _
+
 theorem descPochhammer_succ_eval {S : Type*} [Ring S] (n : ℕ) (k : S) :
     (descPochhammer S (n + 1)).eval k = (descPochhammer S n).eval k * (k - n) := by
   rw [descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
        @@ -264,6 +264,15 @@ theorem descPochhammer_succ_left (n : ℕ) :
     descPochhammer R (n + 1) = X * (descPochhammer R n).comp (X - 1) :=
   by rw [descPochhammer]
 
+theorem monic_descPochhammer (n : ℕ) [Nontrivial R] [NoZeroDivisors R] :
+    Monic <| descPochhammer R n := by
+  induction' n with n hn
+  · simp
+  · have h : leadingCoeff (X - 1 : R[X]) = 1 := leadingCoeff_X_sub_C 1
+    have : natDegree (X - (1 : R[X])) ≠ 0 := ne_zero_of_eq_one <| natDegree_X_sub_C (1 : R)
+    rw [descPochhammer_succ_left, Monic.def, leadingCoeff_mul, leadingCoeff_comp this, hn, monic_X,
+        one_mul, one_mul, h, one_pow]
+
 section
 
 variable {R} {T : Type v} [Ring T]
        @@ -16,13 +16,16 @@ import Mathlib.Data.Polynomial.RingDivision
 
 We define and prove some basic relations about
 `ascPochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1)`
-which is also known as the rising factorial. A version of this definition
-that is focused on `Nat` can be found in `Data.Nat.Factorial` as `Nat.ascFactorial`.
+which is also known as the rising factorial and about
+`descPochhammer R n : R[X] := X * (X - 1) * ... * (X - n + 1)`
+which is also known as the falling factorial. Versions of this definition
+that are focused on `Nat` can be found in `Data.Nat.Factorial` as `Nat.ascFactorial` and
+`Nat.descFactorial`.
 
 ## Implementation
 
-As with many other families of polynomials, even though the coefficients are always in `ℕ`,
-we define the polynomial with coefficients in any `[Semiring S]`.
+As with many other families of polynomials, even though the coefficients are always in `ℕ` or `ℤ` ,
+we define the polynomial with coefficients in any `[Semiring S]` or `[Ring R]`.
 
 ## TODO
 
@@ -41,7 +44,7 @@ section Semiring
 
 variable (S : Type u) [Semiring S]
 
-/-- `ascPochhammer S n` is the polynomial `X * (X+1) * ... * (X + n - 1)`,
+/-- `ascPochhammer S n` is the polynomial `X * (X + 1) * ... * (X + n - 1)`,
 with coefficients in the semiring `S`.
 -/
 noncomputable def ascPochhammer : ℕ → S[X]
@@ -139,6 +142,8 @@ theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
 set_option linter.uppercaseLean3 false in
 #align pochhammer_succ_comp_X_add_one ascPochhammer_succ_comp_X_add_one
 
+
+-- TODO: find a better place for this lemma?
 theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + (n : S[X]))).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
@@ -236,3 +241,119 @@ theorem ascPochhammer_eval_succ (r n : ℕ) :
 #align pochhammer_eval_succ ascPochhammer_eval_succ
 
 end Factorial
+
+section Ring
+
+variable (R : Type u) [Ring R]
+
+/-- `descPochhammer R n` is the polynomial `X * (X - 1) * ... * (X - n + 1)`,
+with coefficients in the ring `R`.
+-/
+noncomputable def descPochhammer : ℕ → R[X]
+  | 0 => 1
+  | n + 1 => X * (descPochhammer n).comp (X - 1)
+
+@[simp]
+theorem descPochhammer_zero : descPochhammer R 0 = 1 :=
+  rfl
+
+@[simp]
+theorem descPochhammer_one : descPochhammer R 1 = X := by simp [descPochhammer]
+
+theorem descPochhammer_succ_left (n : ℕ) :
+    descPochhammer R (n + 1) = X * (descPochhammer R n).comp (X - 1) :=
+  by rw [descPochhammer]
+
+section
+
+variable {R} {T : Type v} [Ring T]
+
+@[simp]
+theorem descPochhammer_map (f : R →+* T) (n : ℕ) :
+    (descPochhammer R n).map f = descPochhammer T n := by
+  induction' n with n ih
+  · simp
+  · simp [ih, descPochhammer_succ_left, map_comp]
+end
+
+@[simp, norm_cast]
+theorem descPochhammer_eval_cast (n : ℕ) (k : ℤ) :
+    (((descPochhammer ℤ n).eval k : ℤ) : R) = ((descPochhammer R n).eval k : R) := by
+  rw [← descPochhammer_map (algebraMap ℤ R), eval_map, ← eq_intCast (algebraMap ℤ R)]
+  simp only [algebraMap_int_eq, eq_intCast, eval₂_at_int_cast, Nat.cast_id, eq_natCast, Int.cast_id]
+
+theorem descPochhammer_eval_zero {n : ℕ} :
+    (descPochhammer R n).eval 0 = if n = 0 then 1 else 0 := by
+  cases n
+  · simp
+  · simp [X_mul, Nat.succ_ne_zero, descPochhammer_succ_left]
+
+theorem descPochhammer_zero_eval_zero : (descPochhammer R 0).eval 0 = 1 := by simp
+
+@[simp]
+theorem descPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (descPochhammer R n).eval 0 = 0 := by
+  simp [descPochhammer_eval_zero, h]
+
+theorem descPochhammer_succ_right (n : ℕ) :
+    descPochhammer R (n + 1) = descPochhammer R n * (X - (n : R[X])) := by
+  suffices h : descPochhammer ℤ (n + 1) = descPochhammer ℤ n * (X - (n : ℤ[X]))
+  · apply_fun Polynomial.map (algebraMap ℤ R) at h
+    simpa [descPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
+      Polynomial.map_int_cast] using h
+  induction' n with n ih
+  · simp [descPochhammer]
+  · conv_lhs =>
+      rw [descPochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← descPochhammer_succ_left, sub_comp,
+          X_comp, nat_cast_comp]
+    nth_rw 1 [Nat.succ_eq_add_one]
+    rw [Nat.succ_eq_one_add, Nat.cast_add, Nat.cast_one, sub_add_eq_sub_sub]
+
+theorem descPochhammer_succ_eval {S : Type*} [Ring S] (n : ℕ) (k : S) :
+    (descPochhammer S (n + 1)).eval k = (descPochhammer S n).eval k * (k - n) := by
+  rw [descPochhammer_succ_right, mul_sub, eval_sub, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
+    eval_C_mul, Nat.cast_comm, ← mul_sub]
+
+theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
+    (descPochhammer R (n + 1)).comp (X - 1) =
+      descPochhammer R (n + 1) - (n + (1 : R[X])) • (descPochhammer R n).comp (X - 1) := by
+  suffices (descPochhammer ℤ (n + 1)).comp (X - 1) =
+      descPochhammer ℤ (n + 1) - (n + 1) * (descPochhammer ℤ n).comp (X - 1)
+    by simpa [map_comp] using congr_arg (Polynomial.map (Int.castRingHom R)) this
+  nth_rw 2 [descPochhammer_succ_left]
+  rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, nat_cast_comp]
+  ring
+
+-- TODO: find a better place for this lemma?
+theorem Polynomial.mul_X_sub_int_cast_comp {p q : R[X]} {n : ℕ} :
+    (p * (X - (n : R[X]))).comp q = p.comp q * (q - n) := by
+  rw [mul_sub, sub_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_sub]
+
+theorem descPochhammer_mul (n m : ℕ) :
+    descPochhammer R n * (descPochhammer R m).comp (X - (n : R[X])) = descPochhammer R (n + m) := by
+  induction' m with m ih
+  · simp
+  · rw [descPochhammer_succ_right, Polynomial.mul_X_sub_int_cast_comp, ← mul_assoc, ih,
+      Nat.succ_eq_add_one, ← add_assoc, descPochhammer_succ_right, Nat.cast_add, sub_add_eq_sub_sub]
+
+theorem descPochhammer_int_eq_ascFactorial (n : ℕ) :
+    ∀ k, (descPochhammer ℤ k).eval (n : ℤ) = n.descFactorial k
+  | 0 => by
+    rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero]
+    rfl
+  | t + 1 => by
+    rw [descPochhammer_succ_right, eval_mul, descPochhammer_int_eq_ascFactorial n t]
+    simp only [eval_sub, eval_X, eval_nat_cast, Nat.descFactorial_succ, Nat.cast_mul,
+        Nat.descFactorial_eq_zero_iff_lt]
+    rw [mul_comm]
+    simp only [mul_eq_mul_right_iff, Nat.cast_eq_zero, Nat.descFactorial_eq_zero_iff_lt]
+    by_cases n < t
+    · tauto
+    · left
+      exact (Int.ofNat_sub <| not_lt.mp h).symm
+
+theorem Pochhammer_int_eq_descFactorial (a b : ℕ) :
+    (descPochhammer ℤ b).eval (a + b : ℤ) = a.ascFactorial b := by
+  rw [← Nat.cast_add, descPochhammer_int_eq_ascFactorial (a + b) b,
+      Nat.add_descFactorial_eq_ascFactorial]
+
+end Ring
        @@ -15,7 +15,7 @@ import Mathlib.Data.Polynomial.RingDivision
 # The Pochhammer polynomials
 
 We define and prove some basic relations about
-`pochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1)`
+`ascPochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1)`
 which is also known as the rising factorial. A version of this definition
 that is focused on `Nat` can be found in `Data.Nat.Factorial` as `Nat.ascFactorial`.
 
@@ -41,100 +41,103 @@ section Semiring
 
 variable (S : Type u) [Semiring S]
 
-/-- `pochhammer S n` is the polynomial `X * (X+1) * ... * (X + n - 1)`,
+/-- `ascPochhammer S n` is the polynomial `X * (X+1) * ... * (X + n - 1)`,
 with coefficients in the semiring `S`.
 -/
-noncomputable def pochhammer : ℕ → S[X]
+noncomputable def ascPochhammer : ℕ → S[X]
   | 0 => 1
-  | n + 1 => X * (pochhammer n).comp (X + 1)
-#align pochhammer pochhammer
+  | n + 1 => X * (ascPochhammer n).comp (X + 1)
+#align pochhammer ascPochhammer
 
 @[simp]
-theorem pochhammer_zero : pochhammer S 0 = 1 :=
+theorem ascPochhammer_zero : ascPochhammer S 0 = 1 :=
   rfl
-#align pochhammer_zero pochhammer_zero
+#align pochhammer_zero ascPochhammer_zero
 
 @[simp]
-theorem pochhammer_one : pochhammer S 1 = X := by simp [pochhammer]
-#align pochhammer_one pochhammer_one
+theorem ascPochhammer_one : ascPochhammer S 1 = X := by simp [ascPochhammer]
+#align pochhammer_one ascPochhammer_one
 
-theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = X * (pochhammer S n).comp (X + 1) :=
-  by rw [pochhammer]
-#align pochhammer_succ_left pochhammer_succ_left
+theorem ascPochhammer_succ_left (n : ℕ) :
+    ascPochhammer S (n + 1) = X * (ascPochhammer S n).comp (X + 1) :=
+  by rw [ascPochhammer]
+#align pochhammer_succ_left ascPochhammer_succ_left
 
 theorem monic_pochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
-    Monic <| pochhammer S n := by
+    Monic <| ascPochhammer S n := by
   induction' n with n hn
   · simp
   · have : leadingCoeff (X + 1 : S[X]) = 1 := leadingCoeff_X_add_C 1
-    rw [pochhammer_succ_left, Monic.def, leadingCoeff_mul, leadingCoeff_comp (ne_zero_of_eq_one <|
-        natDegree_X_add_C 1 : natDegree (X + 1) ≠ 0), hn, monic_X, one_mul, one_mul, this, one_pow]
+    rw [ascPochhammer_succ_left, Monic.def, leadingCoeff_mul,
+      leadingCoeff_comp (ne_zero_of_eq_one <| natDegree_X_add_C 1 : natDegree (X + 1) ≠ 0), hn,
+      monic_X, one_mul, one_mul, this, one_pow]
 
 section
 
 variable {S} {T : Type v} [Semiring T]
 
 @[simp]
-theorem pochhammer_map (f : S →+* T) (n : ℕ) : (pochhammer S n).map f = pochhammer T n := by
+theorem ascPochhammer_map (f : S →+* T) (n : ℕ) :
+    (ascPochhammer S n).map f = ascPochhammer T n := by
   induction' n with n ih
   · simp
-  · simp [ih, pochhammer_succ_left, map_comp]
-#align pochhammer_map pochhammer_map
+  · simp [ih, ascPochhammer_succ_left, map_comp]
+#align pochhammer_map ascPochhammer_map
 
 end
 
 @[simp, norm_cast]
-theorem pochhammer_eval_cast (n k : ℕ) :
-    (((pochhammer ℕ n).eval k : ℕ) : S) = ((pochhammer S n).eval k : S) := by
-  rw [← pochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S), eval₂_at_nat_cast,
-    Nat.cast_id, eq_natCast]
-#align pochhammer_eval_cast pochhammer_eval_cast
+theorem ascPochhammer_eval_cast (n k : ℕ) :
+    (((ascPochhammer ℕ n).eval k : ℕ) : S) = ((ascPochhammer S n).eval k : S) := by
+  rw [← ascPochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S),
+      eval₂_at_nat_cast,Nat.cast_id, eq_natCast]
+#align pochhammer_eval_cast ascPochhammer_eval_cast
 
-theorem pochhammer_eval_zero {n : ℕ} : (pochhammer S n).eval 0 = if n = 0 then 1 else 0 := by
+theorem ascPochhammer_eval_zero {n : ℕ} : (ascPochhammer S n).eval 0 = if n = 0 then 1 else 0 := by
   cases n
   · simp
-  · simp [X_mul, Nat.succ_ne_zero, pochhammer_succ_left]
-#align pochhammer_eval_zero pochhammer_eval_zero
+  · simp [X_mul, Nat.succ_ne_zero, ascPochhammer_succ_left]
+#align pochhammer_eval_zero ascPochhammer_eval_zero
 
-theorem pochhammer_zero_eval_zero : (pochhammer S 0).eval 0 = 1 := by simp
-#align pochhammer_zero_eval_zero pochhammer_zero_eval_zero
+theorem ascPochhammer_zero_eval_zero : (ascPochhammer S 0).eval 0 = 1 := by simp
+#align pochhammer_zero_eval_zero ascPochhammer_zero_eval_zero
 
 @[simp]
-theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).eval 0 = 0 := by
-  simp [pochhammer_eval_zero, h]
-#align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
+theorem ascPochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (ascPochhammer S n).eval 0 = 0 := by
+  simp [ascPochhammer_eval_zero, h]
+#align pochhammer_ne_zero_eval_zero ascPochhammer_ne_zero_eval_zero
 
-theorem pochhammer_succ_right (n : ℕ) :
-    pochhammer S (n + 1) = pochhammer S n * (X + (n : S[X])) := by
-  suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + (n : ℕ[X]))
+theorem ascPochhammer_succ_right (n : ℕ) :
+    ascPochhammer S (n + 1) = ascPochhammer S n * (X + (n : S[X])) := by
+  suffices h : ascPochhammer ℕ (n + 1) = ascPochhammer ℕ n * (X + (n : ℕ[X]))
   · apply_fun Polynomial.map (algebraMap ℕ S) at h
-    simpa only [pochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
+    simpa only [ascPochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
       Polynomial.map_nat_cast] using h
   induction' n with n ih
   · simp
   · conv_lhs =>
-      rw [pochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← pochhammer_succ_left, add_comp, X_comp,
-        nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
-#align pochhammer_succ_right pochhammer_succ_right
+      rw [ascPochhammer_succ_left, ih, mul_comp, ← mul_assoc, ← ascPochhammer_succ_left, add_comp,
+          X_comp, nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
+#align pochhammer_succ_right ascPochhammer_succ_right
 
-theorem pochhammer_succ_eval {S : Type*} [Semiring S] (n : ℕ) (k : S) :
-    (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
-  rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
+theorem ascPochhammer_succ_eval {S : Type*} [Semiring S] (n : ℕ) (k : S) :
+    (ascPochhammer S (n + 1)).eval k = (ascPochhammer S n).eval k * (k + n) := by
+  rw [ascPochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
-#align pochhammer_succ_eval pochhammer_succ_eval
+#align pochhammer_succ_eval ascPochhammer_succ_eval
 
-theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
-    (pochhammer S (n + 1)).comp (X + 1) =
-      pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) := by
-  suffices (pochhammer ℕ (n + 1)).comp (X + 1) =
-      pochhammer ℕ (n + 1) + (n + 1) * (pochhammer ℕ n).comp (X + 1)
+theorem ascPochhammer_succ_comp_X_add_one (n : ℕ) :
+    (ascPochhammer S (n + 1)).comp (X + 1) =
+      ascPochhammer S (n + 1) + (n + 1) • (ascPochhammer S n).comp (X + 1) := by
+  suffices (ascPochhammer ℕ (n + 1)).comp (X + 1) =
+      ascPochhammer ℕ (n + 1) + (n + 1) * (ascPochhammer ℕ n).comp (X + 1)
     by simpa [map_comp] using congr_arg (Polynomial.map (Nat.castRingHom S)) this
-  nth_rw 2 [pochhammer_succ_left]
-  rw [← add_mul, pochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
+  nth_rw 2 [ascPochhammer_succ_left]
+  rw [← add_mul, ascPochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
     add_comm, ← add_assoc]
   ring
 set_option linter.uppercaseLean3 false in
-#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_X_add_one
+#align pochhammer_succ_comp_X_add_one ascPochhammer_succ_comp_X_add_one
 
 theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + (n : S[X]))).comp q = p.comp q * (q + n) := by
@@ -142,42 +145,42 @@ theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
 set_option linter.uppercaseLean3 false in
 #align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
 
-theorem pochhammer_mul (n m : ℕ) :
-    pochhammer S n * (pochhammer S m).comp (X + (n : S[X])) = pochhammer S (n + m) := by
+theorem ascPochhammer_mul (n m : ℕ) :
+    ascPochhammer S n * (ascPochhammer S m).comp (X + (n : S[X])) = ascPochhammer S (n + m) := by
   induction' m with m ih
   · simp
-  · rw [pochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
-      Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
-#align pochhammer_mul pochhammer_mul
+  · rw [ascPochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
+      Nat.succ_eq_add_one, ← add_assoc, ascPochhammer_succ_right, Nat.cast_add, add_assoc]
+#align pochhammer_mul ascPochhammer_mul
 
-theorem pochhammer_nat_eq_ascFactorial (n : ℕ) :
-    ∀ k, (pochhammer ℕ k).eval (n + 1) = n.ascFactorial k
-  | 0 => by rw [pochhammer_zero, eval_one, Nat.ascFactorial_zero]
+theorem ascPochhammer_nat_eq_ascFactorial (n : ℕ) :
+    ∀ k, (ascPochhammer ℕ k).eval (n + 1) = n.ascFactorial k
+  | 0 => by rw [ascPochhammer_zero, eval_one, Nat.ascFactorial_zero]
   | t + 1 => by
-    rw [pochhammer_succ_right, eval_mul, pochhammer_nat_eq_ascFactorial n t]
+    rw [ascPochhammer_succ_right, eval_mul, ascPochhammer_nat_eq_ascFactorial n t]
     simp only [eval_add, eval_X, eval_nat_cast, Nat.cast_id]
     rw [Nat.ascFactorial_succ, add_right_comm, mul_comm]
-#align pochhammer_nat_eq_asc_factorial pochhammer_nat_eq_ascFactorial
+#align pochhammer_nat_eq_asc_factorial ascPochhammer_nat_eq_ascFactorial
 
-theorem pochhammer_nat_eq_descFactorial (a b : ℕ) :
-    (pochhammer ℕ b).eval a = (a + b - 1).descFactorial b := by
+theorem ascPochhammer_nat_eq_descFactorial (a b : ℕ) :
+    (ascPochhammer ℕ b).eval a = (a + b - 1).descFactorial b := by
   cases' b with b
-  · rw [Nat.descFactorial_zero, pochhammer_zero, Polynomial.eval_one]
+  · rw [Nat.descFactorial_zero, ascPochhammer_zero, Polynomial.eval_one]
   rw [Nat.add_succ, Nat.succ_sub_succ, tsub_zero]
   cases a
-  · simp only [Nat.zero_eq, ne_eq, Nat.succ_ne_zero, not_false_iff, pochhammer_ne_zero_eval_zero,
+  · simp only [Nat.zero_eq, ne_eq, Nat.succ_ne_zero, not_false_iff, ascPochhammer_ne_zero_eval_zero,
     zero_add, Nat.descFactorial_succ, le_refl, tsub_eq_zero_of_le, zero_mul]
   · rw [Nat.succ_add, ← Nat.add_succ, Nat.add_descFactorial_eq_ascFactorial,
-      pochhammer_nat_eq_ascFactorial]
-#align pochhammer_nat_eq_desc_factorial pochhammer_nat_eq_descFactorial
+      ascPochhammer_nat_eq_ascFactorial]
+#align pochhammer_nat_eq_desc_factorial ascPochhammer_nat_eq_descFactorial
 
 @[simp]
 theorem pochhammer_natDegree (n : ℕ) [NoZeroDivisors S] [Nontrivial S] :
-    (pochhammer S n).natDegree = n := by
+    (ascPochhammer S n).natDegree = n := by
   induction' n with n hn
   · simp
   · have : natDegree (X + (n : S[X])) = 1 := natDegree_X_add_C (n : S)
-    rw [pochhammer_succ_right,
+    rw [ascPochhammer_succ_right,
         natDegree_mul _ (ne_zero_of_natDegree_gt <| this.symm ▸ Nat.zero_lt_one), hn, this]
     cases n
     · simp
@@ -189,14 +192,14 @@ section StrictOrderedSemiring
 
 variable {S : Type*} [StrictOrderedSemiring S]
 
-theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s := by
+theorem ascPochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (ascPochhammer S n).eval s := by
   induction' n with n ih
-  · simp only [Nat.zero_eq, pochhammer_zero, eval_one]
+  · simp only [Nat.zero_eq, ascPochhammer_zero, eval_one]
     exact zero_lt_one
-  · rw [pochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
+  · rw [ascPochhammer_succ_right, mul_add, eval_add, ← Nat.cast_comm, eval_nat_cast_mul, eval_mul_X,
       Nat.cast_comm, ← mul_add]
     exact mul_pos ih (lt_of_lt_of_le h ((le_add_iff_nonneg_right _).mpr (Nat.cast_nonneg n)))
-#align pochhammer_pos pochhammer_pos
+#align pochhammer_pos ascPochhammer_pos
 
 end StrictOrderedSemiring
 
@@ -207,28 +210,29 @@ open Nat
 variable (S : Type*) [Semiring S] (r n : ℕ)
 
 @[simp]
-theorem pochhammer_eval_one (S : Type*) [Semiring S] (n : ℕ) :
-    (pochhammer S n).eval (1 : S) = (n ! : S) := by
-  rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
-#align pochhammer_eval_one pochhammer_eval_one
-
-theorem factorial_mul_pochhammer (S : Type*) [Semiring S] (r n : ℕ) :
-    (r ! : S) * (pochhammer S n).eval (r + 1 : S) = (r + n)! := by
-  rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
-#align factorial_mul_pochhammer factorial_mul_pochhammer
-
-theorem pochhammer_nat_eval_succ (r : ℕ) :
-    ∀ n : ℕ, n * (pochhammer ℕ r).eval (n + 1) = (n + r) * (pochhammer ℕ r).eval n
+theorem ascPochhammer_eval_one (S : Type*) [Semiring S] (n : ℕ) :
+    (ascPochhammer S n).eval (1 : S) = (n ! : S) := by
+  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
+#align pochhammer_eval_one ascPochhammer_eval_one
+
+theorem factorial_mul_ascPochhammer (S : Type*) [Semiring S] (r n : ℕ) :
+    (r ! : S) * (ascPochhammer S n).eval (r + 1 : S) = (r + n)! := by
+  rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
+#align factorial_mul_pochhammer factorial_mul_ascPochhammer
+
+theorem ascPochhammer_nat_eval_succ (r : ℕ) :
+    ∀ n : ℕ, n * (ascPochhammer ℕ r).eval (n + 1) = (n + r) * (ascPochhammer ℕ r).eval n
   | 0 => by
     by_cases h : r = 0
     · simp only [h, zero_mul, zero_add]
-    · simp only [pochhammer_eval_zero, zero_mul, if_neg h, mul_zero]
-  | k + 1 => by simp only [pochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
-#align pochhammer_nat_eval_succ pochhammer_nat_eval_succ
-
-theorem pochhammer_eval_succ (r n : ℕ) :
-    (n : S) * (pochhammer S r).eval (n + 1 : S) = (n + r) * (pochhammer S r).eval (n : S) := by
-  exact_mod_cast congr_arg Nat.cast (pochhammer_nat_eval_succ r n)
-#align pochhammer_eval_succ pochhammer_eval_succ
+    · simp only [ascPochhammer_eval_zero, zero_mul, if_neg h, mul_zero]
+  | k + 1 => by simp only [ascPochhammer_nat_eq_ascFactorial, Nat.succ_ascFactorial, add_right_comm]
+#align pochhammer_nat_eval_succ ascPochhammer_nat_eval_succ
+
+theorem ascPochhammer_eval_succ (r n : ℕ) :
+    (n : S) * (ascPochhammer S r).eval (n + 1 : S) =
+    (n + r) * (ascPochhammer S r).eval (n : S) := by
+  exact_mod_cast congr_arg Nat.cast (ascPochhammer_nat_eval_succ r n)
+#align pochhammer_eval_succ ascPochhammer_eval_succ
 
 end Factorial
        @@ -6,6 +6,7 @@ Authors: Scott Morrison
 import Mathlib.Tactic.Abel
 import Mathlib.Data.Polynomial.Degree.Definitions
 import Mathlib.Data.Polynomial.Eval
+import Mathlib.Data.Polynomial.Monic
 import Mathlib.Data.Polynomial.RingDivision
 
 #align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"53b216bcc1146df1c4a0a86877890ea9f1f01589"
@@ -61,6 +62,14 @@ theorem pochhammer_succ_left (n : ℕ) : pochhammer S (n + 1) = X * (pochhammer
   by rw [pochhammer]
 #align pochhammer_succ_left pochhammer_succ_left
 
+theorem monic_pochhammer (n : ℕ) [Nontrivial S] [NoZeroDivisors S] :
+    Monic <| pochhammer S n := by
+  induction' n with n hn
+  · simp
+  · have : leadingCoeff (X + 1 : S[X]) = 1 := leadingCoeff_X_add_C 1
+    rw [pochhammer_succ_left, Monic.def, leadingCoeff_mul, leadingCoeff_comp (ne_zero_of_eq_one <|
+        natDegree_X_add_C 1 : natDegree (X + 1) ≠ 0), hn, monic_X, one_mul, one_mul, this, one_pow]
+
 section
 
 variable {S} {T : Type v} [Semiring T]
        @@ -4,7 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
 import Mathlib.Tactic.Abel
+import Mathlib.Data.Polynomial.Degree.Definitions
 import Mathlib.Data.Polynomial.Eval
+import Mathlib.Data.Polynomial.RingDivision
 
 #align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"53b216bcc1146df1c4a0a86877890ea9f1f01589"
 
@@ -160,6 +162,18 @@ theorem pochhammer_nat_eq_descFactorial (a b : ℕ) :
       pochhammer_nat_eq_ascFactorial]
 #align pochhammer_nat_eq_desc_factorial pochhammer_nat_eq_descFactorial
 
+@[simp]
+theorem pochhammer_natDegree (n : ℕ) [NoZeroDivisors S] [Nontrivial S] :
+    (pochhammer S n).natDegree = n := by
+  induction' n with n hn
+  · simp
+  · have : natDegree (X + (n : S[X])) = 1 := natDegree_X_add_C (n : S)
+    rw [pochhammer_succ_right,
+        natDegree_mul _ (ne_zero_of_natDegree_gt <| this.symm ▸ Nat.zero_lt_one), hn, this]
+    cases n
+    · simp
+    · refine' ne_zero_of_natDegree_gt <| hn.symm ▸ Nat.succ_pos _
+
 end Semiring
 
 section StrictOrderedSemiring
        @@ -119,7 +119,6 @@ theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
       pochhammer ℕ (n + 1) + (n + 1) * (pochhammer ℕ n).comp (X + 1)
     by simpa [map_comp] using congr_arg (Polynomial.map (Nat.castRingHom S)) this
   nth_rw 2 [pochhammer_succ_left]
-  simp only
   rw [← add_mul, pochhammer_succ_right ℕ n, mul_comp, mul_comm, add_comp, X_comp, nat_cast_comp,
     add_comm, ← add_assoc]
   ring
        Type _ and Sort _ (#6499)
We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.
This has nice performance benefits.
@@ -106,7 +106,7 @@ theorem pochhammer_succ_right (n : ℕ) :
         nat_cast_comp, add_assoc, add_comm (1 : ℕ[X]), ← Nat.cast_succ]
 #align pochhammer_succ_right pochhammer_succ_right
 
-theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
+theorem pochhammer_succ_eval {S : Type*} [Semiring S] (n : ℕ) (k : S) :
     (pochhammer S (n + 1)).eval k = (pochhammer S n).eval k * (k + n) := by
   rw [pochhammer_succ_right, mul_add, eval_add, eval_mul_X, ← Nat.cast_comm, ← C_eq_nat_cast,
     eval_C_mul, Nat.cast_comm, ← mul_add]
@@ -165,7 +165,7 @@ end Semiring
 
 section StrictOrderedSemiring
 
-variable {S : Type _} [StrictOrderedSemiring S]
+variable {S : Type*} [StrictOrderedSemiring S]
 
 theorem pochhammer_pos (n : ℕ) (s : S) (h : 0 < s) : 0 < (pochhammer S n).eval s := by
   induction' n with n ih
@@ -182,15 +182,15 @@ section Factorial
 
 open Nat
 
-variable (S : Type _) [Semiring S] (r n : ℕ)
+variable (S : Type*) [Semiring S] (r n : ℕ)
 
 @[simp]
-theorem pochhammer_eval_one (S : Type _) [Semiring S] (n : ℕ) :
+theorem pochhammer_eval_one (S : Type*) [Semiring S] (n : ℕ) :
     (pochhammer S n).eval (1 : S) = (n ! : S) := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.zero_ascFactorial]
 #align pochhammer_eval_one pochhammer_eval_one
 
-theorem factorial_mul_pochhammer (S : Type _) [Semiring S] (r n : ℕ) :
+theorem factorial_mul_pochhammer (S : Type*) [Semiring S] (r n : ℕ) :
     (r ! : S) * (pochhammer S n).eval (r + 1 : S) = (r + n)! := by
   rw_mod_cast [pochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
 #align factorial_mul_pochhammer factorial_mul_pochhammer
        @@ -2,15 +2,12 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module ring_theory.polynomial.pochhammer
-! leanprover-community/mathlib commit 53b216bcc1146df1c4a0a86877890ea9f1f01589
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Tactic.Abel
 import Mathlib.Data.Polynomial.Eval
 
+#align_import ring_theory.polynomial.pochhammer from "leanprover-community/mathlib"@"53b216bcc1146df1c4a0a86877890ea9f1f01589"
+
 /-!
 # The Pochhammer polynomials
 
        @@ -143,7 +143,7 @@ theorem pochhammer_mul (n m : ℕ) :
       Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul pochhammer_mul
 
-theorem pochhammer_nat_eq_ascFactorial (n : ℕ):
+theorem pochhammer_nat_eq_ascFactorial (n : ℕ) :
     ∀ k, (pochhammer ℕ k).eval (n + 1) = n.ascFactorial k
   | 0 => by rw [pochhammer_zero, eval_one, Nat.ascFactorial_zero]
   | t + 1 => by
        bys! (#3825)
This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".
@@ -96,8 +96,8 @@ theorem pochhammer_ne_zero_eval_zero {n : ℕ} (h : n ≠ 0) : (pochhammer S n).
   simp [pochhammer_eval_zero, h]
 #align pochhammer_ne_zero_eval_zero pochhammer_ne_zero_eval_zero
 
-theorem pochhammer_succ_right (n : ℕ) : pochhammer S (n + 1) = pochhammer S n * (X + (n : S[X])) :=
-  by
+theorem pochhammer_succ_right (n : ℕ) :
+    pochhammer S (n + 1) = pochhammer S n * (X + (n : S[X])) := by
   suffices h : pochhammer ℕ (n + 1) = pochhammer ℕ n * (X + (n : ℕ[X]))
   · apply_fun Polynomial.map (algebraMap ℕ S) at h
     simpa only [pochhammer_map, Polynomial.map_mul, Polynomial.map_add, map_X,
        @@ -17,12 +17,12 @@ import Mathlib.Data.Polynomial.Eval
 We define and prove some basic relations about
 `pochhammer S n : S[X] := X * (X + 1) * ... * (X + n - 1)`
 which is also known as the rising factorial. A version of this definition
-that is focused on `nat` can be found in `data.nat.factorial` as `nat.asc_factorial`.
+that is focused on `Nat` can be found in `Data.Nat.Factorial` as `Nat.ascFactorial`.
 
 ## Implementation
 
 As with many other families of polynomials, even though the coefficients are always in `ℕ`,
-we define the polynomial with coefficients in any `[semiring S]`.
+we define the polynomial with coefficients in any `[Semiring S]`.
 
 ## TODO
 
@@ -77,8 +77,7 @@ end
 
 @[simp, norm_cast]
 theorem pochhammer_eval_cast (n k : ℕ) :
-    (((pochhammer ℕ n).eval k : ℕ) : S) = ((pochhammer S n).eval k : S):=
-  by
+    (((pochhammer ℕ n).eval k : ℕ) : S) = ((pochhammer S n).eval k : S) := by
   rw [← pochhammer_map (algebraMap ℕ S), eval_map, ← eq_natCast (algebraMap ℕ S), eval₂_at_nat_cast,
     Nat.cast_id, eq_natCast]
 #align pochhammer_eval_cast pochhammer_eval_cast
@@ -116,7 +115,7 @@ theorem pochhammer_succ_eval {S : Type _} [Semiring S] (n : ℕ) (k : S) :
     eval_C_mul, Nat.cast_comm, ← mul_add]
 #align pochhammer_succ_eval pochhammer_succ_eval
 
-theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
+theorem pochhammer_succ_comp_X_add_one (n : ℕ) :
     (pochhammer S (n + 1)).comp (X + 1) =
       pochhammer S (n + 1) + (n + 1) • (pochhammer S n).comp (X + 1) := by
   suffices (pochhammer ℕ (n + 1)).comp (X + 1) =
@@ -128,28 +127,28 @@ theorem pochhammer_succ_comp_x_add_one (n : ℕ) :
     add_comm, ← add_assoc]
   ring
 set_option linter.uppercaseLean3 false in
-#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_x_add_one
+#align pochhammer_succ_comp_X_add_one pochhammer_succ_comp_X_add_one
 
-theorem Polynomial.mul_x_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
+theorem Polynomial.mul_X_add_nat_cast_comp {p q : S[X]} {n : ℕ} :
     (p * (X + (n : S[X]))).comp q = p.comp q * (q + n) := by
   rw [mul_add, add_comp, mul_X_comp, ← Nat.cast_comm, nat_cast_mul_comp, Nat.cast_comm, mul_add]
 set_option linter.uppercaseLean3 false in
-#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_x_add_nat_cast_comp
+#align polynomial.mul_X_add_nat_cast_comp Polynomial.mul_X_add_nat_cast_comp
 
 theorem pochhammer_mul (n m : ℕ) :
     pochhammer S n * (pochhammer S m).comp (X + (n : S[X])) = pochhammer S (n + m) := by
   induction' m with m ih
   · simp
-  · rw [pochhammer_succ_right, Polynomial.mul_x_add_nat_cast_comp, ← mul_assoc, ih,
+  · rw [pochhammer_succ_right, Polynomial.mul_X_add_nat_cast_comp, ← mul_assoc, ih,
       Nat.succ_eq_add_one, ← add_assoc, pochhammer_succ_right, Nat.cast_add, add_assoc]
 #align pochhammer_mul pochhammer_mul
 
 theorem pochhammer_nat_eq_ascFactorial (n : ℕ):
     ∀ k, (pochhammer ℕ k).eval (n + 1) = n.ascFactorial k
-  | 0 => (by erw [eval_one]; rfl)
+  | 0 => by rw [pochhammer_zero, eval_one, Nat.ascFactorial_zero]
   | t + 1 => by
     rw [pochhammer_succ_right, eval_mul, pochhammer_nat_eq_ascFactorial n t]
-    suffices n.ascFactorial t * (n + 1 + t) = n.ascFactorial (t + 1) by simpa
+    simp only [eval_add, eval_X, eval_nat_cast, Nat.cast_id]
     rw [Nat.ascFactorial_succ, add_right_comm, mul_comm]
 #align pochhammer_nat_eq_asc_factorial pochhammer_nat_eq_ascFactorial
 
        The unported dependencies are