group_theory.free_abelian_group_finsuppMathlib.GroupTheory.FreeAbelianGroupFinsupp

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
-import Algebra.Hom.Equiv.TypeTags
+import Algebra.Group.Equiv.TypeTags
 import Algebra.Module.Equiv
 import Data.Finsupp.Defs
 import GroupTheory.FreeAbelianGroup
-import GroupTheory.IsFreeGroup
-import LinearAlgebra.Dimension
+import GroupTheory.FreeGroup.IsFreeGroup
+import LinearAlgebra.Dimension.Basic
 
 #align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"ce38d86c0b2d427ce208c3cee3159cb421d2b3c4"
 
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
-import Mathbin.Algebra.Hom.Equiv.TypeTags
-import Mathbin.Algebra.Module.Equiv
-import Mathbin.Data.Finsupp.Defs
-import Mathbin.GroupTheory.FreeAbelianGroup
-import Mathbin.GroupTheory.IsFreeGroup
-import Mathbin.LinearAlgebra.Dimension
+import Algebra.Hom.Equiv.TypeTags
+import Algebra.Module.Equiv
+import Data.Finsupp.Defs
+import GroupTheory.FreeAbelianGroup
+import GroupTheory.IsFreeGroup
+import LinearAlgebra.Dimension
 
 #align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"ce38d86c0b2d427ce208c3cee3159cb421d2b3c4"
 
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module group_theory.free_abelian_group_finsupp
-! leanprover-community/mathlib commit ce38d86c0b2d427ce208c3cee3159cb421d2b3c4
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Hom.Equiv.TypeTags
 import Mathbin.Algebra.Module.Equiv
@@ -15,6 +10,8 @@ import Mathbin.GroupTheory.FreeAbelianGroup
 import Mathbin.GroupTheory.IsFreeGroup
 import Mathbin.LinearAlgebra.Dimension
 
+#align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"ce38d86c0b2d427ce208c3cee3159cb421d2b3c4"
+
 /-!
 # Isomorphism between `free_abelian_group X` and `X →₀ ℤ`
 
Diff
@@ -72,7 +72,7 @@ theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
 theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) :=
   by
-  ext (x y); simp only [AddMonoidHom.id_comp]
+  ext x y; simp only [AddMonoidHom.id_comp]
   rw [AddMonoidHom.comp_assoc, Finsupp.toFreeAbelianGroup_comp_singleAddHom]
   simp only [to_finsupp, AddMonoidHom.coe_comp, Finsupp.singleAddHom_apply, Function.comp_apply,
     one_smul, lift.of, AddMonoidHom.flip_apply, smulAddHom_apply, AddMonoidHom.id_apply]
Diff
@@ -39,18 +39,23 @@ open scoped BigOperators
 
 variable {X : Type _}
 
+#print FreeAbelianGroup.toFinsupp /-
 /-- The group homomorphism `free_abelian_group X →+ (X →₀ ℤ)`. -/
 def FreeAbelianGroup.toFinsupp : FreeAbelianGroup X →+ X →₀ ℤ :=
   FreeAbelianGroup.lift fun x => Finsupp.single x (1 : ℤ)
 #align free_abelian_group.to_finsupp FreeAbelianGroup.toFinsupp
+-/
 
+#print Finsupp.toFreeAbelianGroup /-
 /-- The group homomorphism `(X →₀ ℤ) →+ free_abelian_group X`. -/
 def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
   Finsupp.liftAddHom fun x => (smulAddHom ℤ (FreeAbelianGroup X)).flip (FreeAbelianGroup.of x)
 #align finsupp.to_free_abelian_group Finsupp.toFreeAbelianGroup
+-/
 
 open Finsupp FreeAbelianGroup
 
+#print Finsupp.toFreeAbelianGroup_comp_singleAddHom /-
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
     Finsupp.toFreeAbelianGroup.comp (Finsupp.singleAddHom x) =
@@ -60,7 +65,9 @@ theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
   simp only [AddMonoidHom.coe_comp, Finsupp.singleAddHom_apply, Function.comp_apply, one_smul,
     to_free_abelian_group, Finsupp.liftAddHom_apply_single]
 #align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHom
+-/
 
+#print FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup /-
 @[simp]
 theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) :=
@@ -70,6 +77,7 @@ theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
   simp only [to_finsupp, AddMonoidHom.coe_comp, Finsupp.singleAddHom_apply, Function.comp_apply,
     one_smul, lift.of, AddMonoidHom.flip_apply, smulAddHom_apply, AddMonoidHom.id_apply]
 #align free_abelian_group.to_finsupp_comp_to_free_abelian_group FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup
+-/
 
 #print Finsupp.toFreeAbelianGroup_comp_toFinsupp /-
 @[simp]
@@ -83,11 +91,13 @@ theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
 #align finsupp.to_free_abelian_group_comp_to_finsupp Finsupp.toFreeAbelianGroup_comp_toFinsupp
 -/
 
+#print Finsupp.toFreeAbelianGroup_toFinsupp /-
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_toFinsupp {X} (x : FreeAbelianGroup X) :
     x.toFinsupp.toFreeAbelianGroup = x := by
   rw [← AddMonoidHom.comp_apply, Finsupp.toFreeAbelianGroup_comp_toFinsupp, AddMonoidHom.id_apply]
 #align finsupp.to_free_abelian_group_to_finsupp Finsupp.toFreeAbelianGroup_toFinsupp
+-/
 
 namespace FreeAbelianGroup
 
@@ -95,18 +105,23 @@ open Finsupp
 
 variable {X}
 
+#print FreeAbelianGroup.toFinsupp_of /-
 @[simp]
 theorem toFinsupp_of (x : X) : toFinsupp (of x) = Finsupp.single x 1 := by
   simp only [to_finsupp, lift.of]
 #align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_of
+-/
 
+#print FreeAbelianGroup.toFinsupp_toFreeAbelianGroup /-
 @[simp]
 theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.toFinsupp = f := by
   rw [← AddMonoidHom.comp_apply, to_finsupp_comp_to_free_abelian_group, AddMonoidHom.id_apply]
 #align free_abelian_group.to_finsupp_to_free_abelian_group FreeAbelianGroup.toFinsupp_toFreeAbelianGroup
+-/
 
 variable (X)
 
+#print FreeAbelianGroup.equivFinsupp /-
 /-- The additive equivalence between `free_abelian_group X` and `(X →₀ ℤ)`. -/
 @[simps]
 def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
@@ -117,45 +132,58 @@ def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
   right_inv := toFinsupp_toFreeAbelianGroup
   map_add' := toFinsupp.map_add
 #align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsupp
+-/
 
+#print FreeAbelianGroup.basis /-
 /-- `A` is a basis of the ℤ-module `free_abelian_group A`. -/
 noncomputable def basis (α : Type _) : Basis α ℤ (FreeAbelianGroup α) :=
   ⟨(FreeAbelianGroup.equivFinsupp α).toIntLinearEquiv⟩
 #align free_abelian_group.basis FreeAbelianGroup.basis
+-/
 
+#print FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv /-
 /-- Isomorphic free ablian groups (as modules) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
     (e : FreeAbelianGroup α ≃ₗ[ℤ] FreeAbelianGroup β) : α ≃ β :=
   let t : Basis α ℤ (FreeAbelianGroup β) := (FreeAbelianGroup.basis α).map e
   t.indexEquiv <| FreeAbelianGroup.basis _
 #align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv
+-/
 
+#print FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv /-
 /-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupEquiv {α β : Type _} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
     α ≃ β :=
   Equiv.ofFreeAbelianGroupLinearEquiv e.toIntLinearEquiv
 #align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv
+-/
 
+#print FreeAbelianGroup.Equiv.ofFreeGroupEquiv /-
 /-- Isomorphic free groups have equivalent bases. -/
 def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β :=
   Equiv.ofFreeAbelianGroupEquiv e.abelianizationCongr.toAdditive
 #align free_abelian_group.equiv.of_free_group_equiv FreeAbelianGroup.Equiv.ofFreeGroupEquiv
+-/
 
 open IsFreeGroup
 
+#print FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv /-
 /-- Isomorphic free groups have equivalent bases (`is_free_group` variant`). -/
 def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
     (e : G ≃* H) : Generators G ≃ Generators H :=
   Equiv.ofFreeGroupEquiv <| MulEquiv.trans (toFreeGroup G).symm <| MulEquiv.trans e <| toFreeGroup H
 #align free_abelian_group.equiv.of_is_free_group_equiv FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv
+-/
 
 variable {X}
 
+#print FreeAbelianGroup.coeff /-
 /-- `coeff x` is the additive group homomorphism `free_abelian_group X →+ ℤ`
 that sends `a` to the multiplicity of `x : X` in `a`. -/
 def coeff (x : X) : FreeAbelianGroup X →+ ℤ :=
   (Finsupp.applyAddHom x).comp toFinsupp
 #align free_abelian_group.coeff FreeAbelianGroup.coeff
+-/
 
 #print FreeAbelianGroup.support /-
 /-- `support a` for `a : free_abelian_group X` is the finite set of `x : X`
@@ -165,18 +193,24 @@ def support (a : FreeAbelianGroup X) : Finset X :=
 #align free_abelian_group.support FreeAbelianGroup.support
 -/
 
+#print FreeAbelianGroup.mem_support_iff /-
 theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 := by
   rw [support, Finsupp.mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iff
+-/
 
+#print FreeAbelianGroup.not_mem_support_iff /-
 theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 := by
   rw [support, Finsupp.not_mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iff
+-/
 
+#print FreeAbelianGroup.support_zero /-
 @[simp]
 theorem support_zero : support (0 : FreeAbelianGroup X) = ∅ := by
   simp only [support, Finsupp.support_zero, AddMonoidHom.map_zero]
 #align free_abelian_group.support_zero FreeAbelianGroup.support_zero
+-/
 
 #print FreeAbelianGroup.support_of /-
 @[simp]
@@ -185,10 +219,12 @@ theorem support_of (x : X) : support (of x) = {x} := by
 #align free_abelian_group.support_of FreeAbelianGroup.support_of
 -/
 
+#print FreeAbelianGroup.support_neg /-
 @[simp]
 theorem support_neg (a : FreeAbelianGroup X) : support (-a) = support a := by
   simp only [support, AddMonoidHom.map_neg, Finsupp.support_neg]
 #align free_abelian_group.support_neg FreeAbelianGroup.support_neg
+-/
 
 #print FreeAbelianGroup.support_zsmul /-
 @[simp]
@@ -209,11 +245,13 @@ theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support
 
 open scoped Classical
 
+#print FreeAbelianGroup.support_add /-
 theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support :=
   by
   simp only [support, AddMonoidHom.map_add]
   apply Finsupp.support_add
 #align free_abelian_group.support_add FreeAbelianGroup.support_add
+-/
 
 end FreeAbelianGroup
 
Diff
@@ -35,7 +35,7 @@ We use this to transport the notion of `support` from `finsupp` to `free_abelian
 
 noncomputable section
 
-open BigOperators
+open scoped BigOperators
 
 variable {X : Type _}
 
@@ -207,7 +207,7 @@ theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support
 #align free_abelian_group.support_nsmul FreeAbelianGroup.support_nsmul
 -/
 
-open Classical
+open scoped Classical
 
 theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support :=
   by
Diff
@@ -39,23 +39,11 @@ open BigOperators
 
 variable {X : Type _}
 
-/- warning: free_abelian_group.to_finsupp -> FreeAbelianGroup.toFinsupp is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
-but is expected to have type
-  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp FreeAbelianGroup.toFinsuppₓ'. -/
 /-- The group homomorphism `free_abelian_group X →+ (X →₀ ℤ)`. -/
 def FreeAbelianGroup.toFinsupp : FreeAbelianGroup X →+ X →₀ ℤ :=
   FreeAbelianGroup.lift fun x => Finsupp.single x (1 : ℤ)
 #align free_abelian_group.to_finsupp FreeAbelianGroup.toFinsupp
 
-/- warning: finsupp.to_free_abelian_group -> Finsupp.toFreeAbelianGroup is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))
-but is expected to have type
-  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))
-Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group Finsupp.toFreeAbelianGroupₓ'. -/
 /-- The group homomorphism `(X →₀ ℤ) →+ free_abelian_group X`. -/
 def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
   Finsupp.liftAddHom fun x => (smulAddHom ℤ (FreeAbelianGroup X)).flip (FreeAbelianGroup.of x)
@@ -63,9 +51,6 @@ def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
 
 open Finsupp FreeAbelianGroup
 
-/- warning: finsupp.to_free_abelian_group_comp_single_add_hom -> Finsupp.toFreeAbelianGroup_comp_singleAddHom is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHomₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
     Finsupp.toFreeAbelianGroup.comp (Finsupp.singleAddHom x) =
@@ -76,12 +61,6 @@ theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
     to_free_abelian_group, Finsupp.liftAddHom_apply_single]
 #align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHom
 
-/- warning: free_abelian_group.to_finsupp_comp_to_free_abelian_group -> FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}}, Eq.{succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (AddMonoidHom.comp.{u1, u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.toFinsupp.{u1} X) (Finsupp.toFreeAbelianGroup.{u1} X)) (AddMonoidHom.id.{u1} (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)))
-but is expected to have type
-  forall {X : Type.{u1}}, Eq.{succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHom.comp.{u1, u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.toFinsupp.{u1} X) (Finsupp.toFreeAbelianGroup.{u1} X)) (AddMonoidHom.id.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_comp_to_free_abelian_group FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroupₓ'. -/
 @[simp]
 theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) :=
@@ -104,9 +83,6 @@ theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
 #align finsupp.to_free_abelian_group_comp_to_finsupp Finsupp.toFreeAbelianGroup_comp_toFinsupp
 -/
 
-/- warning: finsupp.to_free_abelian_group_to_finsupp -> Finsupp.toFreeAbelianGroup_toFinsupp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_to_finsupp Finsupp.toFreeAbelianGroup_toFinsuppₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_toFinsupp {X} (x : FreeAbelianGroup X) :
     x.toFinsupp.toFreeAbelianGroup = x := by
@@ -119,20 +95,11 @@ open Finsupp
 
 variable {X}
 
-/- warning: free_abelian_group.to_finsupp_of -> FreeAbelianGroup.toFinsupp_of is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (Finsupp.{u1, 0} X Int Int.hasZero) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) (FreeAbelianGroup.of.{u1} X x)) (Finsupp.single.{u1, 0} X Int Int.hasZero x (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))
-but is expected to have type
-  forall {X : Type.{u1}} (x : X), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.of.{u1} X x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) (FreeAbelianGroup.of.{u1} X x)) (Finsupp.single.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))) x (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_ofₓ'. -/
 @[simp]
 theorem toFinsupp_of (x : X) : toFinsupp (of x) = Finsupp.single x 1 := by
   simp only [to_finsupp, lift.of]
 #align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_of
 
-/- warning: free_abelian_group.to_finsupp_to_free_abelian_group -> FreeAbelianGroup.toFinsupp_toFreeAbelianGroup is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_to_free_abelian_group FreeAbelianGroup.toFinsupp_toFreeAbelianGroupₓ'. -/
 @[simp]
 theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.toFinsupp = f := by
   rw [← AddMonoidHom.comp_apply, to_finsupp_comp_to_free_abelian_group, AddMonoidHom.id_apply]
@@ -140,12 +107,6 @@ theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.t
 
 variable (X)
 
-/- warning: free_abelian_group.equiv_finsupp -> FreeAbelianGroup.equivFinsupp is a dubious translation:
-lean 3 declaration is
-  forall (X : Type.{u1}), AddEquiv.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddZeroClass.toHasAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.add.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
-but is expected to have type
-  forall (X : Type.{u1}), AddEquiv.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.add.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsuppₓ'. -/
 /-- The additive equivalence between `free_abelian_group X` and `(X →₀ ℤ)`. -/
 @[simps]
 def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
@@ -157,23 +118,11 @@ def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
   map_add' := toFinsupp.map_add
 #align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsupp
 
-/- warning: free_abelian_group.basis -> FreeAbelianGroup.basis is a dubious translation:
-lean 3 declaration is
-  forall (α : Type.{u1}), Basis.{u1, 0, u1} α Int (FreeAbelianGroup.{u1} α) Int.semiring (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α))
-but is expected to have type
-  forall (α : Type.{u1}), Basis.{u1, 0, u1} α Int (FreeAbelianGroup.{u1} α) Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.basis FreeAbelianGroup.basisₓ'. -/
 /-- `A` is a basis of the ℤ-module `free_abelian_group A`. -/
 noncomputable def basis (α : Type _) : Basis α ℤ (FreeAbelianGroup α) :=
   ⟨(FreeAbelianGroup.equivFinsupp α).toIntLinearEquiv⟩
 #align free_abelian_group.basis FreeAbelianGroup.basis
 
-/- warning: free_abelian_group.equiv.of_free_abelian_group_linear_equiv -> FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.semiring Int.semiring (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHomInvPair.ids.{0} Int Int.semiring) (RingHomInvPair.ids.{0} Int Int.semiring) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.instSemiringInt Int.instSemiringInt (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquivₓ'. -/
 /-- Isomorphic free ablian groups (as modules) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
     (e : FreeAbelianGroup α ≃ₗ[ℤ] FreeAbelianGroup β) : α ≃ β :=
@@ -181,24 +130,12 @@ def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
   t.indexEquiv <| FreeAbelianGroup.basis _
 #align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv
 
-/- warning: free_abelian_group.equiv.of_free_abelian_group_equiv -> FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (AddEquiv.{u_1, u_2} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddZeroClass.toHasAdd.{u_1} (FreeAbelianGroup.{u_1} α) (AddMonoid.toAddZeroClass.{u_1} (FreeAbelianGroup.{u_1} α) (SubNegMonoid.toAddMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddGroup.toSubNegMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddCommGroup.toAddGroup.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)))))) (AddZeroClass.toHasAdd.{u_2} (FreeAbelianGroup.{u_2} β) (AddMonoid.toAddZeroClass.{u_2} (FreeAbelianGroup.{u_2} β) (SubNegMonoid.toAddMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddGroup.toSubNegMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddGroup.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))))))) -> (Equiv.{succ u_1, succ u_2} α β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (AddEquiv.{u_1, u_2} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddZeroClass.toAdd.{u_1} (FreeAbelianGroup.{u_1} α) (AddMonoid.toAddZeroClass.{u_1} (FreeAbelianGroup.{u_1} α) (SubNegMonoid.toAddMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddGroup.toSubNegMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddCommGroup.toAddGroup.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)))))) (AddZeroClass.toAdd.{u_2} (FreeAbelianGroup.{u_2} β) (AddMonoid.toAddZeroClass.{u_2} (FreeAbelianGroup.{u_2} β) (SubNegMonoid.toAddMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddGroup.toSubNegMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddGroup.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))))))) -> (Equiv.{succ u_1, succ u_2} α β)
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquivₓ'. -/
 /-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupEquiv {α β : Type _} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
     α ≃ β :=
   Equiv.ofFreeAbelianGroupLinearEquiv e.toIntLinearEquiv
 #align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv
 
-/- warning: free_abelian_group.equiv.of_free_group_equiv -> FreeAbelianGroup.Equiv.ofFreeGroupEquiv is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (MulEquiv.{u_1, u_2} (FreeGroup.{u_1} α) (FreeGroup.{u_2} β) (FreeGroup.hasMul.{u_1} α) (FreeGroup.hasMul.{u_2} β)) -> (Equiv.{succ u_1, succ u_2} α β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (MulEquiv.{u_1, u_2} (FreeGroup.{u_1} α) (FreeGroup.{u_2} β) (FreeGroup.instMulFreeGroup.{u_1} α) (FreeGroup.instMulFreeGroup.{u_2} β)) -> (Equiv.{succ u_1, succ u_2} α β)
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_group_equiv FreeAbelianGroup.Equiv.ofFreeGroupEquivₓ'. -/
 /-- Isomorphic free groups have equivalent bases. -/
 def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β :=
   Equiv.ofFreeAbelianGroupEquiv e.abelianizationCongr.toAdditive
@@ -206,12 +143,6 @@ def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β)
 
 open IsFreeGroup
 
-/- warning: free_abelian_group.equiv.of_is_free_group_equiv -> FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u_1}} {H : Type.{u_2}} [_inst_1 : Group.{u_1} G] [_inst_2 : Group.{u_2} H] [_inst_3 : IsFreeGroup.{u_1} G _inst_1] [_inst_4 : IsFreeGroup.{u_2} H _inst_2], (MulEquiv.{u_1, u_2} G H (MulOneClass.toHasMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_1)))) (MulOneClass.toHasMul.{u_2} H (Monoid.toMulOneClass.{u_2} H (DivInvMonoid.toMonoid.{u_2} H (Group.toDivInvMonoid.{u_2} H _inst_2))))) -> (Equiv.{succ u_1, succ u_2} (IsFreeGroup.Generators.{u_1} G _inst_1 _inst_3) (IsFreeGroup.Generators.{u_2} H _inst_2 _inst_4))
-but is expected to have type
-  forall {G : Type.{u_1}} {H : Type.{u_2}} [_inst_1 : Group.{u_1} G] [_inst_2 : Group.{u_2} H] [_inst_3 : IsFreeGroup.{u_1} G _inst_1] [_inst_4 : IsFreeGroup.{u_2} H _inst_2], (MulEquiv.{u_1, u_2} G H (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_1)))) (MulOneClass.toMul.{u_2} H (Monoid.toMulOneClass.{u_2} H (DivInvMonoid.toMonoid.{u_2} H (Group.toDivInvMonoid.{u_2} H _inst_2))))) -> (Equiv.{succ u_1, succ u_2} (IsFreeGroup.Generators.{u_1} G _inst_1 _inst_3) (IsFreeGroup.Generators.{u_2} H _inst_2 _inst_4))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_is_free_group_equiv FreeAbelianGroup.Equiv.ofIsFreeGroupEquivₓ'. -/
 /-- Isomorphic free groups have equivalent bases (`is_free_group` variant`). -/
 def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
     (e : G ≃* H) : Generators G ≃ Generators H :=
@@ -220,12 +151,6 @@ def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G]
 
 variable {X}
 
-/- warning: free_abelian_group.coeff -> FreeAbelianGroup.coeff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}}, X -> (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
-but is expected to have type
-  forall {X : Type.{u1}}, X -> (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.coeff FreeAbelianGroup.coeffₓ'. -/
 /-- `coeff x` is the additive group homomorphism `free_abelian_group X →+ ℤ`
 that sends `a` to the multiplicity of `x : X` in `a`. -/
 def coeff (x : X) : FreeAbelianGroup X →+ ℤ :=
@@ -240,32 +165,14 @@ def support (a : FreeAbelianGroup X) : Finset X :=
 #align free_abelian_group.support FreeAbelianGroup.support
 -/
 
-/- warning: free_abelian_group.mem_support_iff -> FreeAbelianGroup.mem_support_iff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Membership.Mem.{u1, u1} X (Finset.{u1} X) (Finset.hasMem.{u1} X) x (FreeAbelianGroup.support.{u1} X a)) (Ne.{1} Int (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) => (FreeAbelianGroup.{u1} X) -> Int) (AddMonoidHom.hasCoeToFun.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))))
-but is expected to have type
-  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a)) (Ne.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iffₓ'. -/
 theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 := by
   rw [support, Finsupp.mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iff
 
-/- warning: free_abelian_group.not_mem_support_iff -> FreeAbelianGroup.not_mem_support_iff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Not (Membership.Mem.{u1, u1} X (Finset.{u1} X) (Finset.hasMem.{u1} X) x (FreeAbelianGroup.support.{u1} X a))) (Eq.{1} Int (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) => (FreeAbelianGroup.{u1} X) -> Int) (AddMonoidHom.hasCoeToFun.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))))
-but is expected to have type
-  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Not (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a))) (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iffₓ'. -/
 theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 := by
   rw [support, Finsupp.not_mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iff
 
-/- warning: free_abelian_group.support_zero -> FreeAbelianGroup.support_zero is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}}, Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (OfNat.ofNat.{u1} (FreeAbelianGroup.{u1} X) 0 (OfNat.mk.{u1} (FreeAbelianGroup.{u1} X) 0 (Zero.zero.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toHasZero.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} X) (Finset.hasEmptyc.{u1} X))
-but is expected to have type
-  forall {X : Type.{u1}}, Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (OfNat.ofNat.{u1} (FreeAbelianGroup.{u1} X) 0 (Zero.toOfNat0.{u1} (FreeAbelianGroup.{u1} X) (NegZeroClass.toZero.{u1} (FreeAbelianGroup.{u1} X) (SubNegZeroMonoid.toNegZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (FreeAbelianGroup.{u1} X) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toDivisionAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} X) (Finset.instEmptyCollectionFinset.{u1} X))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_zero FreeAbelianGroup.support_zeroₓ'. -/
 @[simp]
 theorem support_zero : support (0 : FreeAbelianGroup X) = ∅ := by
   simp only [support, Finsupp.support_zero, AddMonoidHom.map_zero]
@@ -278,12 +185,6 @@ theorem support_of (x : X) : support (of x) = {x} := by
 #align free_abelian_group.support_of FreeAbelianGroup.support_of
 -/
 
-/- warning: free_abelian_group.support_neg -> FreeAbelianGroup.support_neg is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X), Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (Neg.neg.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toHasNeg.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) a)) (FreeAbelianGroup.support.{u1} X a)
-but is expected to have type
-  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X), Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (Neg.neg.{u1} (FreeAbelianGroup.{u1} X) (NegZeroClass.toNeg.{u1} (FreeAbelianGroup.{u1} X) (SubNegZeroMonoid.toNegZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (FreeAbelianGroup.{u1} X) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toDivisionAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) a)) (FreeAbelianGroup.support.{u1} X a)
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_neg FreeAbelianGroup.support_negₓ'. -/
 @[simp]
 theorem support_neg (a : FreeAbelianGroup X) : support (-a) = support a := by
   simp only [support, AddMonoidHom.map_neg, Finsupp.support_neg]
@@ -308,12 +209,6 @@ theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support
 
 open Classical
 
-/- warning: free_abelian_group.support_add -> FreeAbelianGroup.support_add is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X) (b : FreeAbelianGroup.{u1} X), HasSubset.Subset.{u1} (Finset.{u1} X) (Finset.hasSubset.{u1} X) (FreeAbelianGroup.support.{u1} X (HAdd.hAdd.{u1, u1, u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (instHAdd.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toHasAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))) a b)) (Union.union.{u1} (Finset.{u1} X) (Finset.hasUnion.{u1} X (fun (a : X) (b : X) => Classical.propDecidable (Eq.{succ u1} X a b))) (FreeAbelianGroup.support.{u1} X a) (FreeAbelianGroup.support.{u1} X b))
-but is expected to have type
-  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X) (b : FreeAbelianGroup.{u1} X), HasSubset.Subset.{u1} (Finset.{u1} X) (Finset.instHasSubsetFinset.{u1} X) (FreeAbelianGroup.support.{u1} X (HAdd.hAdd.{u1, u1, u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (instHAdd.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))) a b)) (Union.union.{u1} (Finset.{u1} X) (Finset.instUnionFinset.{u1} X (fun (a : X) (b : X) => Classical.propDecidable (Eq.{succ u1} X a b))) (FreeAbelianGroup.support.{u1} X a) (FreeAbelianGroup.support.{u1} X b))
-Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_add FreeAbelianGroup.support_addₓ'. -/
 theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support :=
   by
   simp only [support, AddMonoidHom.map_add]
Diff
@@ -246,10 +246,8 @@ lean 3 declaration is
 but is expected to have type
   forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a)) (Ne.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
 Case conversion may be inaccurate. Consider using '#align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iffₓ'. -/
-theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 :=
-  by
-  rw [support, Finsupp.mem_support_iff]
-  exact Iff.rfl
+theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 := by
+  rw [support, Finsupp.mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iff
 
 /- warning: free_abelian_group.not_mem_support_iff -> FreeAbelianGroup.not_mem_support_iff is a dubious translation:
@@ -258,10 +256,8 @@ lean 3 declaration is
 but is expected to have type
   forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Not (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a))) (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
 Case conversion may be inaccurate. Consider using '#align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iffₓ'. -/
-theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 :=
-  by
-  rw [support, Finsupp.not_mem_support_iff]
-  exact Iff.rfl
+theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 := by
+  rw [support, Finsupp.not_mem_support_iff]; exact Iff.rfl
 #align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iff
 
 /- warning: free_abelian_group.support_zero -> FreeAbelianGroup.support_zero is a dubious translation:
@@ -306,9 +302,7 @@ theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support
 #print FreeAbelianGroup.support_nsmul /-
 @[simp]
 theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support (k • a) = support a :=
-  by
-  apply support_zsmul k _ a
-  exact_mod_cast h
+  by apply support_zsmul k _ a; exact_mod_cast h
 #align free_abelian_group.support_nsmul FreeAbelianGroup.support_nsmul
 -/
 
Diff
@@ -64,10 +64,7 @@ def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
 open Finsupp FreeAbelianGroup
 
 /- warning: finsupp.to_free_abelian_group_comp_single_add_hom -> Finsupp.toFreeAbelianGroup_comp_singleAddHom is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.comp.{0, u1, u1} Int (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.toFreeAbelianGroup.{u1} X) (Finsupp.singleAddHom.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) x)) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (FreeAbelianGroup.{u1} X) -> (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.flip.{0, u1, u1} Int (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (smulAddHom.{0, u1} Int (FreeAbelianGroup.{u1} X) Int.semiring (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (FreeAbelianGroup.of.{u1} X x))
-but is expected to have type
-  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.comp.{0, u1, u1} Int (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.toFreeAbelianGroup.{u1} X) (Finsupp.singleAddHom.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddZeroClass.toAdd.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (AddMonoidHom.flip.{0, u1, u1} Int (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (smulAddHom.{0, u1} Int (FreeAbelianGroup.{u1} X) Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (FreeAbelianGroup.of.{u1} X x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHomₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
@@ -108,10 +105,7 @@ theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
 -/
 
 /- warning: finsupp.to_free_abelian_group_to_finsupp -> Finsupp.toFreeAbelianGroup_toFinsupp is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (x : FreeAbelianGroup.{u1} X), Eq.{succ u1} (FreeAbelianGroup.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (Finsupp.{u1, 0} X Int Int.hasZero) -> (FreeAbelianGroup.{u1} X)) (AddMonoidHom.hasCoeToFun.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.toFreeAbelianGroup.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) x
-but is expected to have type
-  forall {X : Type.{u1}} (x : FreeAbelianGroup.{u1} X), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (a : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) a) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (_x : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) x
+<too large>
 Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_to_finsupp Finsupp.toFreeAbelianGroup_toFinsuppₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_toFinsupp {X} (x : FreeAbelianGroup X) :
@@ -137,10 +131,7 @@ theorem toFinsupp_of (x : X) : toFinsupp (of x) = Finsupp.single x 1 := by
 #align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_of
 
 /- warning: free_abelian_group.to_finsupp_to_free_abelian_group -> FreeAbelianGroup.toFinsupp_toFreeAbelianGroup is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (f : Finsupp.{u1, 0} X Int Int.hasZero), Eq.{succ u1} (Finsupp.{u1, 0} X Int Int.hasZero) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (Finsupp.{u1, 0} X Int Int.hasZero) -> (FreeAbelianGroup.{u1} X)) (AddMonoidHom.hasCoeToFun.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) f
-but is expected to have type
-  forall {X : Type.{u1}} (f : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (a : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) a) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (_x : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) f
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_to_free_abelian_group FreeAbelianGroup.toFinsupp_toFreeAbelianGroupₓ'. -/
 @[simp]
 theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.toFinsupp = f := by
Diff
@@ -181,7 +181,7 @@ noncomputable def basis (α : Type _) : Basis α ℤ (FreeAbelianGroup α) :=
 lean 3 declaration is
   forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.semiring Int.semiring (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHomInvPair.ids.{0} Int Int.semiring) (RingHomInvPair.ids.{0} Int Int.semiring) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
 but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.instSemiringInt Int.instSemiringInt (RingHom.id.{0} Int (NonAssocRing.toNonAssocSemiring.{0} Int (Ring.toNonAssocRing.{0} Int Int.instRingInt))) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.instSemiringInt Int.instSemiringInt (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
 Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquivₓ'. -/
 /-- Isomorphic free ablian groups (as modules) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 
 ! This file was ported from Lean 3 source module group_theory.free_abelian_group_finsupp
-! leanprover-community/mathlib commit 47b51515e69f59bca5cf34ef456e6000fe205a69
+! leanprover-community/mathlib commit ce38d86c0b2d427ce208c3cee3159cb421d2b3c4
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -18,6 +18,9 @@ import Mathbin.LinearAlgebra.Dimension
 /-!
 # Isomorphism between `free_abelian_group X` and `X →₀ ℤ`
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file we construct the canonical isomorphism between `free_abelian_group X` and `X →₀ ℤ`.
 We use this to transport the notion of `support` from `finsupp` to `free_abelian_group`.
 
Diff
@@ -36,11 +36,23 @@ open BigOperators
 
 variable {X : Type _}
 
+/- warning: free_abelian_group.to_finsupp -> FreeAbelianGroup.toFinsupp is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
+but is expected to have type
+  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp FreeAbelianGroup.toFinsuppₓ'. -/
 /-- The group homomorphism `free_abelian_group X →+ (X →₀ ℤ)`. -/
 def FreeAbelianGroup.toFinsupp : FreeAbelianGroup X →+ X →₀ ℤ :=
   FreeAbelianGroup.lift fun x => Finsupp.single x (1 : ℤ)
 #align free_abelian_group.to_finsupp FreeAbelianGroup.toFinsupp
 
+/- warning: finsupp.to_free_abelian_group -> Finsupp.toFreeAbelianGroup is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))
+but is expected to have type
+  forall {X : Type.{u1}}, AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))
+Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group Finsupp.toFreeAbelianGroupₓ'. -/
 /-- The group homomorphism `(X →₀ ℤ) →+ free_abelian_group X`. -/
 def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
   Finsupp.liftAddHom fun x => (smulAddHom ℤ (FreeAbelianGroup X)).flip (FreeAbelianGroup.of x)
@@ -48,6 +60,12 @@ def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X :=
 
 open Finsupp FreeAbelianGroup
 
+/- warning: finsupp.to_free_abelian_group_comp_single_add_hom -> Finsupp.toFreeAbelianGroup_comp_singleAddHom is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.comp.{0, u1, u1} Int (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.toFreeAbelianGroup.{u1} X) (Finsupp.singleAddHom.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid) x)) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (FreeAbelianGroup.{u1} X) -> (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.flip.{0, u1, u1} Int (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (smulAddHom.{0, u1} Int (FreeAbelianGroup.{u1} X) Int.semiring (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (FreeAbelianGroup.of.{u1} X x))
+but is expected to have type
+  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHom.comp.{0, u1, u1} Int (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.toFreeAbelianGroup.{u1} X) (Finsupp.singleAddHom.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddZeroClass.toAdd.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddMonoid.toAddZeroClass.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddCommMonoid.toAddMonoid.{u1} (AddMonoidHom.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addCommMonoid.{0, u1} Int (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (AddMonoidHom.flip.{0, u1, u1} Int (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{0} Int (AddMonoidWithOne.toAddMonoid.{0} Int (AddCommMonoidWithOne.toAddMonoidWithOne.{0} Int (NonAssocSemiring.toAddCommMonoidWithOne.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (AddCommMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (smulAddHom.{0, u1} Int (FreeAbelianGroup.{u1} X) Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) (FreeAbelianGroup.of.{u1} X x))
+Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHomₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
     Finsupp.toFreeAbelianGroup.comp (Finsupp.singleAddHom x) =
@@ -58,6 +76,12 @@ theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
     to_free_abelian_group, Finsupp.liftAddHom_apply_single]
 #align finsupp.to_free_abelian_group_comp_single_add_hom Finsupp.toFreeAbelianGroup_comp_singleAddHom
 
+/- warning: free_abelian_group.to_finsupp_comp_to_free_abelian_group -> FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}}, Eq.{succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (AddMonoidHom.comp.{u1, u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.toFinsupp.{u1} X) (Finsupp.toFreeAbelianGroup.{u1} X)) (AddMonoidHom.id.{u1} (Finsupp.{u1, 0} X Int Int.hasZero) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)))
+but is expected to have type
+  forall {X : Type.{u1}}, Eq.{succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHom.comp.{u1, u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.toFinsupp.{u1} X) (Finsupp.toFreeAbelianGroup.{u1} X)) (AddMonoidHom.id.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_comp_to_free_abelian_group FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroupₓ'. -/
 @[simp]
 theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) :=
@@ -68,6 +92,7 @@ theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     one_smul, lift.of, AddMonoidHom.flip_apply, smulAddHom_apply, AddMonoidHom.id_apply]
 #align free_abelian_group.to_finsupp_comp_to_free_abelian_group FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup
 
+#print Finsupp.toFreeAbelianGroup_comp_toFinsupp /-
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
     toFreeAbelianGroup.comp toFinsupp = AddMonoidHom.id (FreeAbelianGroup X) :=
@@ -77,7 +102,14 @@ theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
     lift_add_hom_apply_single, AddMonoidHom.flip_apply, smulAddHom_apply, one_smul,
     AddMonoidHom.id_apply]
 #align finsupp.to_free_abelian_group_comp_to_finsupp Finsupp.toFreeAbelianGroup_comp_toFinsupp
+-/
 
+/- warning: finsupp.to_free_abelian_group_to_finsupp -> Finsupp.toFreeAbelianGroup_toFinsupp is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (x : FreeAbelianGroup.{u1} X), Eq.{succ u1} (FreeAbelianGroup.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (Finsupp.{u1, 0} X Int Int.hasZero) -> (FreeAbelianGroup.{u1} X)) (AddMonoidHom.hasCoeToFun.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.toFreeAbelianGroup.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) x
+but is expected to have type
+  forall {X : Type.{u1}} (x : FreeAbelianGroup.{u1} X), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (a : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) a) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (_x : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) x)) x
+Case conversion may be inaccurate. Consider using '#align finsupp.to_free_abelian_group_to_finsupp Finsupp.toFreeAbelianGroup_toFinsuppₓ'. -/
 @[simp]
 theorem Finsupp.toFreeAbelianGroup_toFinsupp {X} (x : FreeAbelianGroup X) :
     x.toFinsupp.toFreeAbelianGroup = x := by
@@ -90,11 +122,23 @@ open Finsupp
 
 variable {X}
 
+/- warning: free_abelian_group.to_finsupp_of -> FreeAbelianGroup.toFinsupp_of is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (x : X), Eq.{succ u1} (Finsupp.{u1, 0} X Int Int.hasZero) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) (FreeAbelianGroup.of.{u1} X x)) (Finsupp.single.{u1, 0} X Int Int.hasZero x (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))
+but is expected to have type
+  forall {X : Type.{u1}} (x : X), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.of.{u1} X x)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) (FreeAbelianGroup.of.{u1} X x)) (Finsupp.single.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))) x (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_ofₓ'. -/
 @[simp]
 theorem toFinsupp_of (x : X) : toFinsupp (of x) = Finsupp.single x 1 := by
   simp only [to_finsupp, lift.of]
 #align free_abelian_group.to_finsupp_of FreeAbelianGroup.toFinsupp_of
 
+/- warning: free_abelian_group.to_finsupp_to_free_abelian_group -> FreeAbelianGroup.toFinsupp_toFreeAbelianGroup is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (f : Finsupp.{u1, 0} X Int Int.hasZero), Eq.{succ u1} (Finsupp.{u1, 0} X Int Int.hasZero) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (fun (_x : AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) => (FreeAbelianGroup.{u1} X) -> (Finsupp.{u1, 0} X Int Int.hasZero)) (AddMonoidHom.hasCoeToFun.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))) (FreeAbelianGroup.toFinsupp.{u1} X) (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (fun (_x : AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) => (Finsupp.{u1, 0} X Int Int.hasZero) -> (FreeAbelianGroup.{u1} X)) (AddMonoidHom.hasCoeToFun.{u1, u1} (Finsupp.{u1, 0} X Int Int.hasZero) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) f
+but is expected to have type
+  forall {X : Type.{u1}} (f : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (a : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) a) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHom.addMonoidHomClass.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))))) (FreeAbelianGroup.toFinsupp.{u1} X) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (fun (_x : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) => FreeAbelianGroup.{u1} X) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoidHom.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoidHom.addMonoidHomClass.{u1, u1} (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (FreeAbelianGroup.{u1} X) (Finsupp.addZeroClass.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))) (Finsupp.toFreeAbelianGroup.{u1} X) f)) f
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.to_finsupp_to_free_abelian_group FreeAbelianGroup.toFinsupp_toFreeAbelianGroupₓ'. -/
 @[simp]
 theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.toFinsupp = f := by
   rw [← AddMonoidHom.comp_apply, to_finsupp_comp_to_free_abelian_group, AddMonoidHom.id_apply]
@@ -102,6 +146,12 @@ theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) : f.toFreeAbelianGroup.t
 
 variable (X)
 
+/- warning: free_abelian_group.equiv_finsupp -> FreeAbelianGroup.equivFinsupp is a dubious translation:
+lean 3 declaration is
+  forall (X : Type.{u1}), AddEquiv.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int Int.hasZero) (AddZeroClass.toHasAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.add.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
+but is expected to have type
+  forall (X : Type.{u1}), AddEquiv.{u1, u1} (FreeAbelianGroup.{u1} X) (Finsupp.{u1, 0} X Int (CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (Finsupp.add.{u1, 0} X Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsuppₓ'. -/
 /-- The additive equivalence between `free_abelian_group X` and `(X →₀ ℤ)`. -/
 @[simps]
 def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
@@ -113,11 +163,23 @@ def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ)
   map_add' := toFinsupp.map_add
 #align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsupp
 
+/- warning: free_abelian_group.basis -> FreeAbelianGroup.basis is a dubious translation:
+lean 3 declaration is
+  forall (α : Type.{u1}), Basis.{u1, 0, u1} α Int (FreeAbelianGroup.{u1} α) Int.semiring (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α))
+but is expected to have type
+  forall (α : Type.{u1}), Basis.{u1, 0, u1} α Int (FreeAbelianGroup.{u1} α) Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α)) (AddCommGroup.intModule.{u1} (FreeAbelianGroup.{u1} α) (FreeAbelianGroup.addCommGroup.{u1} α))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.basis FreeAbelianGroup.basisₓ'. -/
 /-- `A` is a basis of the ℤ-module `free_abelian_group A`. -/
 noncomputable def basis (α : Type _) : Basis α ℤ (FreeAbelianGroup α) :=
   ⟨(FreeAbelianGroup.equivFinsupp α).toIntLinearEquiv⟩
 #align free_abelian_group.basis FreeAbelianGroup.basis
 
+/- warning: free_abelian_group.equiv.of_free_abelian_group_linear_equiv -> FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.semiring Int.semiring (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.semiring)) (RingHomInvPair.ids.{0} Int Int.semiring) (RingHomInvPair.ids.{0} Int Int.semiring) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
+but is expected to have type
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (LinearEquiv.{0, 0, u_1, u_2} Int Int Int.instSemiringInt Int.instSemiringInt (RingHom.id.{0} Int (NonAssocRing.toNonAssocSemiring.{0} Int (Ring.toNonAssocRing.{0} Int Int.instRingInt))) (RingHom.id.{0} Int (Semiring.toNonAssocSemiring.{0} Int Int.instSemiringInt)) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (RingHomInvPair.ids.{0} Int Int.instSemiringInt) (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddCommMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.toAddCommMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β)) (AddCommGroup.intModule.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)) (AddCommGroup.intModule.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))) -> (Equiv.{succ u_1, succ u_2} α β)
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquivₓ'. -/
 /-- Isomorphic free ablian groups (as modules) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
     (e : FreeAbelianGroup α ≃ₗ[ℤ] FreeAbelianGroup β) : α ≃ β :=
@@ -125,12 +187,24 @@ def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
   t.indexEquiv <| FreeAbelianGroup.basis _
 #align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv
 
+/- warning: free_abelian_group.equiv.of_free_abelian_group_equiv -> FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (AddEquiv.{u_1, u_2} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddZeroClass.toHasAdd.{u_1} (FreeAbelianGroup.{u_1} α) (AddMonoid.toAddZeroClass.{u_1} (FreeAbelianGroup.{u_1} α) (SubNegMonoid.toAddMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddGroup.toSubNegMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddCommGroup.toAddGroup.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)))))) (AddZeroClass.toHasAdd.{u_2} (FreeAbelianGroup.{u_2} β) (AddMonoid.toAddZeroClass.{u_2} (FreeAbelianGroup.{u_2} β) (SubNegMonoid.toAddMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddGroup.toSubNegMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddGroup.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))))))) -> (Equiv.{succ u_1, succ u_2} α β)
+but is expected to have type
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (AddEquiv.{u_1, u_2} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.{u_2} β) (AddZeroClass.toAdd.{u_1} (FreeAbelianGroup.{u_1} α) (AddMonoid.toAddZeroClass.{u_1} (FreeAbelianGroup.{u_1} α) (SubNegMonoid.toAddMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddGroup.toSubNegMonoid.{u_1} (FreeAbelianGroup.{u_1} α) (AddCommGroup.toAddGroup.{u_1} (FreeAbelianGroup.{u_1} α) (FreeAbelianGroup.addCommGroup.{u_1} α)))))) (AddZeroClass.toAdd.{u_2} (FreeAbelianGroup.{u_2} β) (AddMonoid.toAddZeroClass.{u_2} (FreeAbelianGroup.{u_2} β) (SubNegMonoid.toAddMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddGroup.toSubNegMonoid.{u_2} (FreeAbelianGroup.{u_2} β) (AddCommGroup.toAddGroup.{u_2} (FreeAbelianGroup.{u_2} β) (FreeAbelianGroup.addCommGroup.{u_2} β))))))) -> (Equiv.{succ u_1, succ u_2} α β)
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquivₓ'. -/
 /-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
 def Equiv.ofFreeAbelianGroupEquiv {α β : Type _} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
     α ≃ β :=
   Equiv.ofFreeAbelianGroupLinearEquiv e.toIntLinearEquiv
 #align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv
 
+/- warning: free_abelian_group.equiv.of_free_group_equiv -> FreeAbelianGroup.Equiv.ofFreeGroupEquiv is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (MulEquiv.{u_1, u_2} (FreeGroup.{u_1} α) (FreeGroup.{u_2} β) (FreeGroup.hasMul.{u_1} α) (FreeGroup.hasMul.{u_2} β)) -> (Equiv.{succ u_1, succ u_2} α β)
+but is expected to have type
+  forall {α : Type.{u_1}} {β : Type.{u_2}}, (MulEquiv.{u_1, u_2} (FreeGroup.{u_1} α) (FreeGroup.{u_2} β) (FreeGroup.instMulFreeGroup.{u_1} α) (FreeGroup.instMulFreeGroup.{u_2} β)) -> (Equiv.{succ u_1, succ u_2} α β)
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_free_group_equiv FreeAbelianGroup.Equiv.ofFreeGroupEquivₓ'. -/
 /-- Isomorphic free groups have equivalent bases. -/
 def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β :=
   Equiv.ofFreeAbelianGroupEquiv e.abelianizationCongr.toAdditive
@@ -138,6 +212,12 @@ def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β)
 
 open IsFreeGroup
 
+/- warning: free_abelian_group.equiv.of_is_free_group_equiv -> FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv is a dubious translation:
+lean 3 declaration is
+  forall {G : Type.{u_1}} {H : Type.{u_2}} [_inst_1 : Group.{u_1} G] [_inst_2 : Group.{u_2} H] [_inst_3 : IsFreeGroup.{u_1} G _inst_1] [_inst_4 : IsFreeGroup.{u_2} H _inst_2], (MulEquiv.{u_1, u_2} G H (MulOneClass.toHasMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_1)))) (MulOneClass.toHasMul.{u_2} H (Monoid.toMulOneClass.{u_2} H (DivInvMonoid.toMonoid.{u_2} H (Group.toDivInvMonoid.{u_2} H _inst_2))))) -> (Equiv.{succ u_1, succ u_2} (IsFreeGroup.Generators.{u_1} G _inst_1 _inst_3) (IsFreeGroup.Generators.{u_2} H _inst_2 _inst_4))
+but is expected to have type
+  forall {G : Type.{u_1}} {H : Type.{u_2}} [_inst_1 : Group.{u_1} G] [_inst_2 : Group.{u_2} H] [_inst_3 : IsFreeGroup.{u_1} G _inst_1] [_inst_4 : IsFreeGroup.{u_2} H _inst_2], (MulEquiv.{u_1, u_2} G H (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_1)))) (MulOneClass.toMul.{u_2} H (Monoid.toMulOneClass.{u_2} H (DivInvMonoid.toMonoid.{u_2} H (Group.toDivInvMonoid.{u_2} H _inst_2))))) -> (Equiv.{succ u_1, succ u_2} (IsFreeGroup.Generators.{u_1} G _inst_1 _inst_3) (IsFreeGroup.Generators.{u_2} H _inst_2 _inst_4))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.equiv.of_is_free_group_equiv FreeAbelianGroup.Equiv.ofIsFreeGroupEquivₓ'. -/
 /-- Isomorphic free groups have equivalent bases (`is_free_group` variant`). -/
 def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
     (e : G ≃* H) : Generators G ≃ Generators H :=
@@ -146,45 +226,80 @@ def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G]
 
 variable {X}
 
+/- warning: free_abelian_group.coeff -> FreeAbelianGroup.coeff is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}}, X -> (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid))
+but is expected to have type
+  forall {X : Type.{u1}}, X -> (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.coeff FreeAbelianGroup.coeffₓ'. -/
 /-- `coeff x` is the additive group homomorphism `free_abelian_group X →+ ℤ`
 that sends `a` to the multiplicity of `x : X` in `a`. -/
 def coeff (x : X) : FreeAbelianGroup X →+ ℤ :=
   (Finsupp.applyAddHom x).comp toFinsupp
 #align free_abelian_group.coeff FreeAbelianGroup.coeff
 
+#print FreeAbelianGroup.support /-
 /-- `support a` for `a : free_abelian_group X` is the finite set of `x : X`
 that occur in the formal sum `a`. -/
 def support (a : FreeAbelianGroup X) : Finset X :=
   a.toFinsupp.support
 #align free_abelian_group.support FreeAbelianGroup.support
+-/
 
+/- warning: free_abelian_group.mem_support_iff -> FreeAbelianGroup.mem_support_iff is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Membership.Mem.{u1, u1} X (Finset.{u1} X) (Finset.hasMem.{u1} X) x (FreeAbelianGroup.support.{u1} X a)) (Ne.{1} Int (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) => (FreeAbelianGroup.{u1} X) -> Int) (AddMonoidHom.hasCoeToFun.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))))
+but is expected to have type
+  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a)) (Ne.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iffₓ'. -/
 theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 :=
   by
   rw [support, Finsupp.mem_support_iff]
   exact Iff.rfl
 #align free_abelian_group.mem_support_iff FreeAbelianGroup.mem_support_iff
 
+/- warning: free_abelian_group.not_mem_support_iff -> FreeAbelianGroup.not_mem_support_iff is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Not (Membership.Mem.{u1, u1} X (Finset.{u1} X) (Finset.hasMem.{u1} X) x (FreeAbelianGroup.support.{u1} X a))) (Eq.{1} Int (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) => (FreeAbelianGroup.{u1} X) -> Int) (AddMonoidHom.hasCoeToFun.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.addMonoid)) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))))
+but is expected to have type
+  forall {X : Type.{u1}} (x : X) (a : FreeAbelianGroup.{u1} X), Iff (Not (Membership.mem.{u1, u1} X (Finset.{u1} X) (Finset.instMembershipFinset.{u1} X) x (FreeAbelianGroup.support.{u1} X a))) (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) (FunLike.coe.{succ u1, succ u1, 1} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) (fun (_x : FreeAbelianGroup.{u1} X) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) _x) (AddHomClass.toFunLike.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) (AddZeroClass.toAdd.{0} Int (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (AddMonoidHomClass.toAddHomClass.{u1, u1, 0} (AddMonoidHom.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)) (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt) (AddMonoidHom.addMonoidHomClass.{u1, 0} (FreeAbelianGroup.{u1} X) Int (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))) (AddMonoid.toAddZeroClass.{0} Int Int.instAddMonoidInt)))) (FreeAbelianGroup.coeff.{u1} X x) a) (OfNat.ofNat.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : FreeAbelianGroup.{u1} X) => Int) a) 0 (instOfNatInt 0)))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iffₓ'. -/
 theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 :=
   by
   rw [support, Finsupp.not_mem_support_iff]
   exact Iff.rfl
 #align free_abelian_group.not_mem_support_iff FreeAbelianGroup.not_mem_support_iff
 
+/- warning: free_abelian_group.support_zero -> FreeAbelianGroup.support_zero is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}}, Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (OfNat.ofNat.{u1} (FreeAbelianGroup.{u1} X) 0 (OfNat.mk.{u1} (FreeAbelianGroup.{u1} X) 0 (Zero.zero.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toHasZero.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))))))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} X) (Finset.hasEmptyc.{u1} X))
+but is expected to have type
+  forall {X : Type.{u1}}, Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (OfNat.ofNat.{u1} (FreeAbelianGroup.{u1} X) 0 (Zero.toOfNat0.{u1} (FreeAbelianGroup.{u1} X) (NegZeroClass.toZero.{u1} (FreeAbelianGroup.{u1} X) (SubNegZeroMonoid.toNegZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (FreeAbelianGroup.{u1} X) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toDivisionAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} X) (Finset.instEmptyCollectionFinset.{u1} X))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_zero FreeAbelianGroup.support_zeroₓ'. -/
 @[simp]
 theorem support_zero : support (0 : FreeAbelianGroup X) = ∅ := by
   simp only [support, Finsupp.support_zero, AddMonoidHom.map_zero]
 #align free_abelian_group.support_zero FreeAbelianGroup.support_zero
 
+#print FreeAbelianGroup.support_of /-
 @[simp]
 theorem support_of (x : X) : support (of x) = {x} := by
   simp only [support, to_finsupp_of, Finsupp.support_single_ne_zero _ one_ne_zero]
 #align free_abelian_group.support_of FreeAbelianGroup.support_of
+-/
 
+/- warning: free_abelian_group.support_neg -> FreeAbelianGroup.support_neg is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X), Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (Neg.neg.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toHasNeg.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))) a)) (FreeAbelianGroup.support.{u1} X a)
+but is expected to have type
+  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X), Eq.{succ u1} (Finset.{u1} X) (FreeAbelianGroup.support.{u1} X (Neg.neg.{u1} (FreeAbelianGroup.{u1} X) (NegZeroClass.toNeg.{u1} (FreeAbelianGroup.{u1} X) (SubNegZeroMonoid.toNegZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (FreeAbelianGroup.{u1} X) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toDivisionAddCommMonoid.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X)))))) a)) (FreeAbelianGroup.support.{u1} X a)
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_neg FreeAbelianGroup.support_negₓ'. -/
 @[simp]
 theorem support_neg (a : FreeAbelianGroup X) : support (-a) = support a := by
   simp only [support, AddMonoidHom.map_neg, Finsupp.support_neg]
 #align free_abelian_group.support_neg FreeAbelianGroup.support_neg
 
+#print FreeAbelianGroup.support_zsmul /-
 @[simp]
 theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support (k • a) = support a :=
   by
@@ -192,16 +307,25 @@ theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support
   simp only [mem_support_iff, AddMonoidHom.map_zsmul]
   simp only [h, zsmul_int_int, false_or_iff, Ne.def, mul_eq_zero]
 #align free_abelian_group.support_zsmul FreeAbelianGroup.support_zsmul
+-/
 
+#print FreeAbelianGroup.support_nsmul /-
 @[simp]
 theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) : support (k • a) = support a :=
   by
   apply support_zsmul k _ a
   exact_mod_cast h
 #align free_abelian_group.support_nsmul FreeAbelianGroup.support_nsmul
+-/
 
 open Classical
 
+/- warning: free_abelian_group.support_add -> FreeAbelianGroup.support_add is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X) (b : FreeAbelianGroup.{u1} X), HasSubset.Subset.{u1} (Finset.{u1} X) (Finset.hasSubset.{u1} X) (FreeAbelianGroup.support.{u1} X (HAdd.hAdd.{u1, u1, u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (instHAdd.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toHasAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))) a b)) (Union.union.{u1} (Finset.{u1} X) (Finset.hasUnion.{u1} X (fun (a : X) (b : X) => Classical.propDecidable (Eq.{succ u1} X a b))) (FreeAbelianGroup.support.{u1} X a) (FreeAbelianGroup.support.{u1} X b))
+but is expected to have type
+  forall {X : Type.{u1}} (a : FreeAbelianGroup.{u1} X) (b : FreeAbelianGroup.{u1} X), HasSubset.Subset.{u1} (Finset.{u1} X) (Finset.instHasSubsetFinset.{u1} X) (FreeAbelianGroup.support.{u1} X (HAdd.hAdd.{u1, u1, u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.{u1} X) (instHAdd.{u1} (FreeAbelianGroup.{u1} X) (AddZeroClass.toAdd.{u1} (FreeAbelianGroup.{u1} X) (AddMonoid.toAddZeroClass.{u1} (FreeAbelianGroup.{u1} X) (SubNegMonoid.toAddMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddGroup.toSubNegMonoid.{u1} (FreeAbelianGroup.{u1} X) (AddCommGroup.toAddGroup.{u1} (FreeAbelianGroup.{u1} X) (FreeAbelianGroup.addCommGroup.{u1} X))))))) a b)) (Union.union.{u1} (Finset.{u1} X) (Finset.instUnionFinset.{u1} X (fun (a : X) (b : X) => Classical.propDecidable (Eq.{succ u1} X a b))) (FreeAbelianGroup.support.{u1} X a) (FreeAbelianGroup.support.{u1} X b))
+Case conversion may be inaccurate. Consider using '#align free_abelian_group.support_add FreeAbelianGroup.support_addₓ'. -/
 theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support :=
   by
   simp only [support, AddMonoidHom.map_add]

Changes in mathlib4

mathlib3
mathlib4
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -178,7 +178,7 @@ theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
     support (k • a) = support a := by
   ext x
   simp only [mem_support_iff, AddMonoidHom.map_zsmul]
-  simp only [h, zsmul_int_int, false_or_iff, Ne.def, mul_eq_zero]
+  simp only [h, zsmul_int_int, false_or_iff, Ne, mul_eq_zero]
 #align free_abelian_group.support_zsmul FreeAbelianGroup.support_zsmul
 
 @[simp]
chore: scope open Classical (#11199)

We remove all but one open Classicals, instead preferring to use open scoped Classical. The only real side-effect this led to is moving a couple declarations to use Exists.choose instead of Classical.choose.

The first few commits are explicitly labelled regex replaces for ease of review.

Diff
@@ -188,7 +188,7 @@ theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
   exact mod_cast h
 #align free_abelian_group.support_nsmul FreeAbelianGroup.support_nsmul
 
-open Classical
+open scoped Classical
 
 theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support := by
   simp only [support, AddMonoidHom.map_add]
chore: Reorganize results about rank and finrank. (#9349)

The files Mathlib.LinearAlgebra.FreeModule.Rank, Mathlib.LinearAlgebra.FreeModule.Finite.Rank, Mathlib.LinearAlgebra.Dimension and Mathlib.LinearAlgebra.Finrank were reorganized into a folder Mathlib.LinearAlgebra.Dimension, containing the following files

  • Basic.lean: Contains the definition of Module.rank.
  • Finrank.lean: Contains the definition of FiniteDimensional.finrank.
  • StrongRankCondition.lean: Contains results about rank and finrank over rings satisfying strong rank condition
  • Free.lean: Contains results about rank and finrank of free modules
  • Finite.lean: Contains conditions or consequences for rank to be finite or zero
  • Constructions.lean: Contains the calculation of the rank of various constructions.
  • DivisionRing.lean: Contains results about rank and finrank of spaces over division rings.
  • LinearMap.lean: Contains results about LinearMap.rank

API changes: IsNoetherian.rank_lt_aleph0 and FiniteDimensional.rank_lt_aleph0 are replaced with rank_lt_aleph0. Module.Free.finite_basis was renamed to Module.Finite.finite_basis. FiniteDimensional.finrank_eq_rank was renamed to finrank_eq_rank. rank_eq_cardinal_basis and rank_eq_cardinal_basis' were removed in favour of Basis.mk_eq_mk and Basis.mk_eq_mk''.

Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>

Diff
@@ -4,11 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
 import Mathlib.Algebra.Group.Equiv.TypeTags
-import Mathlib.Algebra.Module.Equiv
-import Mathlib.Data.Finsupp.Defs
 import Mathlib.GroupTheory.FreeAbelianGroup
 import Mathlib.GroupTheory.FreeGroup.IsFreeGroup
-import Mathlib.LinearAlgebra.Dimension
+import Mathlib.LinearAlgebra.Dimension.StrongRankCondition
 
 #align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"47b51515e69f59bca5cf34ef456e6000fe205a69"
 
chore: replace exact_mod_cast tactic with mod_cast elaborator where possible (#8404)

We still have the exact_mod_cast tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast are the ones that don't work using the term elaborator by itself.

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

Diff
@@ -187,7 +187,7 @@ theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
 theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
     support (k • a) = support a := by
   apply support_zsmul k _ a
-  exact_mod_cast h
+  exact mod_cast h
 #align free_abelian_group.support_nsmul FreeAbelianGroup.support_nsmul
 
 open Classical
refactor(Algebra/Hom): transpose Hom and file name (#8095)

I believe the file defining a type of morphisms belongs alongside the file defining the structure this morphism works on. So I would like to reorganize the files in the Mathlib.Algebra.Hom folder so that e.g. Mathlib.Algebra.Hom.Ring becomes Mathlib.Algebra.Ring.Hom and Mathlib.Algebra.Hom.NonUnitalAlg becomes Mathlib.Algebra.Algebra.NonUnitalHom.

While fixing the imports I went ahead and sorted them for good luck.

The full list of changes is: renamed: Mathlib/Algebra/Hom/NonUnitalAlg.lean -> Mathlib/Algebra/Algebra/NonUnitalHom.lean renamed: Mathlib/Algebra/Hom/Aut.lean -> Mathlib/Algebra/Group/Aut.lean renamed: Mathlib/Algebra/Hom/Commute.lean -> Mathlib/Algebra/Group/Commute/Hom.lean renamed: Mathlib/Algebra/Hom/Embedding.lean -> Mathlib/Algebra/Group/Embedding.lean renamed: Mathlib/Algebra/Hom/Equiv/Basic.lean -> Mathlib/Algebra/Group/Equiv/Basic.lean renamed: Mathlib/Algebra/Hom/Equiv/TypeTags.lean -> Mathlib/Algebra/Group/Equiv/TypeTags.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/Basic.lean -> Mathlib/Algebra/Group/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/GroupWithZero.lean -> Mathlib/Algebra/GroupWithZero/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Freiman.lean -> Mathlib/Algebra/Group/Freiman.lean renamed: Mathlib/Algebra/Hom/Group/Basic.lean -> Mathlib/Algebra/Group/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Group/Defs.lean -> Mathlib/Algebra/Group/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/GroupAction.lean -> Mathlib/GroupTheory/GroupAction/Hom.lean renamed: Mathlib/Algebra/Hom/GroupInstances.lean -> Mathlib/Algebra/Group/Hom/Instances.lean renamed: Mathlib/Algebra/Hom/Iterate.lean -> Mathlib/Algebra/GroupPower/IterateHom.lean renamed: Mathlib/Algebra/Hom/Centroid.lean -> Mathlib/Algebra/Ring/CentroidHom.lean renamed: Mathlib/Algebra/Hom/Ring/Basic.lean -> Mathlib/Algebra/Ring/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Ring/Defs.lean -> Mathlib/Algebra/Ring/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/Units.lean -> Mathlib/Algebra/Group/Units/Hom.lean

Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Reorganizing.20.60Mathlib.2EAlgebra.2EHom.60

Diff
@@ -3,7 +3,7 @@ Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
-import Mathlib.Algebra.Hom.Equiv.TypeTags
+import Mathlib.Algebra.Group.Equiv.TypeTags
 import Mathlib.Algebra.Module.Equiv
 import Mathlib.Data.Finsupp.Defs
 import Mathlib.GroupTheory.FreeAbelianGroup
refactor: Create FreeGroup folder in GroupTheory (#7334)
Diff
@@ -7,7 +7,7 @@ import Mathlib.Algebra.Hom.Equiv.TypeTags
 import Mathlib.Algebra.Module.Equiv
 import Mathlib.Data.Finsupp.Defs
 import Mathlib.GroupTheory.FreeAbelianGroup
-import Mathlib.GroupTheory.IsFreeGroup
+import Mathlib.GroupTheory.FreeGroup.IsFreeGroup
 import Mathlib.LinearAlgebra.Dimension
 
 #align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"47b51515e69f59bca5cf34ef456e6000fe205a69"
chore: banish Type _ and Sort _ (#6499)

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

This has nice performance benefits.

Diff
@@ -31,7 +31,7 @@ noncomputable section
 
 open BigOperators
 
-variable {X : Type _}
+variable {X : Type*}
 
 /-- The group homomorphism `FreeAbelianGroup X →+ (X →₀ ℤ)`. -/
 def FreeAbelianGroup.toFinsupp : FreeAbelianGroup X →+ X →₀ ℤ :=
@@ -106,32 +106,32 @@ def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ) where
 #align free_abelian_group.equiv_finsupp FreeAbelianGroup.equivFinsupp
 
 /-- `A` is a basis of the ℤ-module `FreeAbelianGroup A`. -/
-noncomputable def basis (α : Type _) : Basis α ℤ (FreeAbelianGroup α) :=
+noncomputable def basis (α : Type*) : Basis α ℤ (FreeAbelianGroup α) :=
   ⟨(FreeAbelianGroup.equivFinsupp α).toIntLinearEquiv⟩
 #align free_abelian_group.basis FreeAbelianGroup.basis
 
 /-- Isomorphic free abelian groups (as modules) have equivalent bases. -/
-def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type _}
+def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type*}
     (e : FreeAbelianGroup α ≃ₗ[ℤ] FreeAbelianGroup β) : α ≃ β :=
   let t : Basis α ℤ (FreeAbelianGroup β) := (FreeAbelianGroup.basis α).map e
   t.indexEquiv <| FreeAbelianGroup.basis _
 #align free_abelian_group.equiv.of_free_abelian_group_linear_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv
 
 /-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
-def Equiv.ofFreeAbelianGroupEquiv {α β : Type _} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
+def Equiv.ofFreeAbelianGroupEquiv {α β : Type*} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
     α ≃ β :=
   Equiv.ofFreeAbelianGroupLinearEquiv e.toIntLinearEquiv
 #align free_abelian_group.equiv.of_free_abelian_group_equiv FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv
 
 /-- Isomorphic free groups have equivalent bases. -/
-def Equiv.ofFreeGroupEquiv {α β : Type _} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β :=
+def Equiv.ofFreeGroupEquiv {α β : Type*} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β :=
   Equiv.ofFreeAbelianGroupEquiv (MulEquiv.toAdditive e.abelianizationCongr)
 #align free_abelian_group.equiv.of_free_group_equiv FreeAbelianGroup.Equiv.ofFreeGroupEquiv
 
 open IsFreeGroup
 
 /-- Isomorphic free groups have equivalent bases (`IsFreeGroup` variant). -/
-def Equiv.ofIsFreeGroupEquiv {G H : Type _} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
+def Equiv.ofIsFreeGroupEquiv {G H : Type*} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
     (e : G ≃* H) : Generators G ≃ Generators H :=
   Equiv.ofFreeGroupEquiv <| MulEquiv.trans (toFreeGroup G).symm <| MulEquiv.trans e <| toFreeGroup H
 #align free_abelian_group.equiv.of_is_free_group_equiv FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module group_theory.free_abelian_group_finsupp
-! leanprover-community/mathlib commit 47b51515e69f59bca5cf34ef456e6000fe205a69
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Hom.Equiv.TypeTags
 import Mathlib.Algebra.Module.Equiv
@@ -15,6 +10,8 @@ import Mathlib.GroupTheory.FreeAbelianGroup
 import Mathlib.GroupTheory.IsFreeGroup
 import Mathlib.LinearAlgebra.Dimension
 
+#align_import group_theory.free_abelian_group_finsupp from "leanprover-community/mathlib"@"47b51515e69f59bca5cf34ef456e6000fe205a69"
+
 /-!
 # Isomorphism between `FreeAbelianGroup X` and `X →₀ ℤ`
 
chore: remove superfluous parentheses in calls to ext (#5258)

Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -60,7 +60,7 @@ theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
 @[simp]
 theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
     toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) := by
-  ext (x y); simp only [AddMonoidHom.id_comp]
+  ext x y; simp only [AddMonoidHom.id_comp]
   rw [AddMonoidHom.comp_assoc, Finsupp.toFreeAbelianGroup_comp_singleAddHom]
   simp only [toFinsupp, AddMonoidHom.coe_comp, Finsupp.singleAddHom_apply, Function.comp_apply,
     one_smul, lift.of, AddMonoidHom.flip_apply, smulAddHom_apply, AddMonoidHom.id_apply]
feat: port GroupTheory.FreeAbelianGroupFinsupp (#3441)

Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Dependencies 8 + 516

517 files ported (98.5%)
214757 lines ported (98.6%)
Show graph

The unported dependencies are