topology.algebra.continuous_monoid_homMathlib.Topology.Algebra.PontryaginDual

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -348,10 +348,11 @@ theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
                 {f | f '' {x} ⊆ U} ∩ {f | f '' {y} ⊆ V} ∩ {f | f '' {x * y} ⊆ W})ᶜ
         by
         rw [this, compl_compl]
-        refine' (ContinuousMap.isOpen_gen isCompact_singleton isOpen_compl_singleton).union _
+        refine'
+          (ContinuousMap.isOpen_setOf_mapsTo isCompact_singleton isOpen_compl_singleton).union _
         repeat' apply isOpen_iUnion; intro
         repeat' apply IsOpen.inter
-        all_goals apply ContinuousMap.isOpen_gen isCompact_singleton; assumption
+        all_goals apply ContinuousMap.isOpen_setOf_mapsTo isCompact_singleton; assumption
       simp_rw [Set.compl_union, Set.compl_iUnion, Set.image_singleton, Set.singleton_subset_iff,
         Set.ext_iff, Set.mem_inter_iff, Set.mem_iInter, Set.mem_compl_iff]
       refine' fun f => ⟨_, _⟩
Diff
@@ -123,12 +123,12 @@ directly. -/
 @[to_additive
       "Helper instance for when there's too many metavariables to apply\n`fun_like.has_coe_to_fun` directly."]
 instance : CoeFun (ContinuousMonoidHom A B) fun _ => A → B :=
-  FunLike.hasCoeToFun
+  DFunLike.hasCoeToFun
 
 #print ContinuousMonoidHom.ext /-
 @[to_additive, ext]
 theorem ext {f g : ContinuousMonoidHom A B} (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align continuous_monoid_hom.ext ContinuousMonoidHom.ext
 #align continuous_add_monoid_hom.ext ContinuousAddMonoidHom.ext
 -/
@@ -145,7 +145,7 @@ def toContinuousMap (f : ContinuousMonoidHom A B) : C(A, B) :=
 #print ContinuousMonoidHom.toContinuousMap_injective /-
 @[to_additive]
 theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B)) := fun f g h =>
-  ext <| by convert FunLike.ext_iff.1 h
+  ext <| by convert DFunLike.ext_iff.1 h
 #align continuous_monoid_hom.to_continuous_map_injective ContinuousMonoidHom.toContinuousMap_injective
 #align continuous_add_monoid_hom.to_continuous_map_injective ContinuousAddMonoidHom.toContinuousMap_injective
 -/
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2022 Thomas Browning. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Thomas Browning
 -/
-import Mathbin.Analysis.Complex.Circle
-import Mathbin.Topology.ContinuousFunction.Algebra
+import Analysis.Complex.Circle
+import Topology.ContinuousFunction.Algebra
 
 #align_import topology.algebra.continuous_monoid_hom from "leanprover-community/mathlib"@"61b5e2755ccb464b68d05a9acf891ae04992d09d"
 
Diff
@@ -114,7 +114,7 @@ instance : ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B
     where
   coe f := f.toFun
   coe_injective' f g h := by obtain ⟨⟨_, _⟩, _⟩ := f; obtain ⟨⟨_, _⟩, _⟩ := g; congr
-  map_mul f := f.map_mul'
+  map_hMul f := f.map_mul'
   map_one f := f.map_one'
   map_continuous f := f.continuous_toFun
 
@@ -307,7 +307,7 @@ instance : CommGroup (ContinuousMonoidHom A E)
   one_mul f := ext fun x => one_mul (f x)
   mul_one f := ext fun x => mul_one (f x)
   inv f := (inv E).comp f
-  mul_left_inv f := ext fun x => mul_left_inv (f x)
+  hMul_left_inv f := ext fun x => mul_left_inv (f x)
 
 @[to_additive]
 instance : TopologicalSpace (ContinuousMonoidHom A B) :=
@@ -390,7 +390,7 @@ instance [T2Space B] : T2Space (ContinuousMonoidHom A B) :=
 instance : TopologicalGroup (ContinuousMonoidHom A E) :=
   let hi := inducing_toContinuousMap A E
   let hc := hi.Continuous
-  { continuous_mul := hi.continuous_iff.mpr (continuous_mul.comp (Continuous.prod_map hc hc))
+  { continuous_hMul := hi.continuous_iff.mpr (continuous_mul.comp (Continuous.prod_map hc hc))
     continuous_inv := hi.continuous_iff.mpr (continuous_inv.comp hc) }
 
 #print ContinuousMonoidHom.continuous_of_continuous_uncurry /-
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Thomas Browning. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module topology.algebra.continuous_monoid_hom
-! leanprover-community/mathlib commit 61b5e2755ccb464b68d05a9acf891ae04992d09d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.Complex.Circle
 import Mathbin.Topology.ContinuousFunction.Algebra
 
+#align_import topology.algebra.continuous_monoid_hom from "leanprover-community/mathlib"@"61b5e2755ccb464b68d05a9acf891ae04992d09d"
+
 /-!
 
 # Continuous Monoid Homs
Diff
@@ -128,11 +128,13 @@ directly. -/
 instance : CoeFun (ContinuousMonoidHom A B) fun _ => A → B :=
   FunLike.hasCoeToFun
 
+#print ContinuousMonoidHom.ext /-
 @[to_additive, ext]
 theorem ext {f g : ContinuousMonoidHom A B} (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align continuous_monoid_hom.ext ContinuousMonoidHom.ext
 #align continuous_add_monoid_hom.ext ContinuousAddMonoidHom.ext
+-/
 
 #print ContinuousMonoidHom.toContinuousMap /-
 /-- Reinterpret a `continuous_monoid_hom` as a `continuous_map`. -/
@@ -143,12 +145,15 @@ def toContinuousMap (f : ContinuousMonoidHom A B) : C(A, B) :=
 #align continuous_add_monoid_hom.to_continuous_map ContinuousAddMonoidHom.toContinuousMap
 -/
 
+#print ContinuousMonoidHom.toContinuousMap_injective /-
 @[to_additive]
 theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B)) := fun f g h =>
   ext <| by convert FunLike.ext_iff.1 h
 #align continuous_monoid_hom.to_continuous_map_injective ContinuousMonoidHom.toContinuousMap_injective
 #align continuous_add_monoid_hom.to_continuous_map_injective ContinuousAddMonoidHom.toContinuousMap_injective
+-/
 
+#print ContinuousMonoidHom.mk' /-
 /-- Construct a `continuous_monoid_hom` from a `continuous` `monoid_hom`. -/
 @[to_additive "Construct a `continuous_add_monoid_hom` from a `continuous` `add_monoid_hom`.",
   simps]
@@ -156,6 +161,7 @@ def mk' (f : A →* B) (hf : Continuous f) : ContinuousMonoidHom A B :=
   { f with continuous_toFun := hf }
 #align continuous_monoid_hom.mk' ContinuousMonoidHom.mk'
 #align continuous_add_monoid_hom.mk' ContinuousAddMonoidHom.mk'
+-/
 
 #print ContinuousMonoidHom.comp /-
 /-- Composition of two continuous homomorphisms. -/
@@ -166,6 +172,7 @@ def comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) : Continuou
 #align continuous_add_monoid_hom.comp ContinuousAddMonoidHom.comp
 -/
 
+#print ContinuousMonoidHom.prod /-
 /-- Product of two continuous homomorphisms on the same space. -/
 @[to_additive "Product of two continuous homomorphisms on the same space.", simps]
 def prod (f : ContinuousMonoidHom A B) (g : ContinuousMonoidHom A C) :
@@ -173,7 +180,9 @@ def prod (f : ContinuousMonoidHom A B) (g : ContinuousMonoidHom A C) :
   mk' (f.toMonoidHom.Prod g.toMonoidHom) (f.continuous_toFun.prod_mk g.continuous_toFun)
 #align continuous_monoid_hom.prod ContinuousMonoidHom.prod
 #align continuous_add_monoid_hom.sum ContinuousAddMonoidHom.sum
+-/
 
+#print ContinuousMonoidHom.prod_map /-
 /-- Product of two continuous homomorphisms on different spaces. -/
 @[to_additive "Product of two continuous homomorphisms on different spaces.", simps]
 def prod_map (f : ContinuousMonoidHom A C) (g : ContinuousMonoidHom B D) :
@@ -181,6 +190,7 @@ def prod_map (f : ContinuousMonoidHom A C) (g : ContinuousMonoidHom B D) :
   mk' (f.toMonoidHom.Prod_map g.toMonoidHom) (f.continuous_toFun.Prod_map g.continuous_toFun)
 #align continuous_monoid_hom.prod_map ContinuousMonoidHom.prod_map
 #align continuous_add_monoid_hom.sum_map ContinuousAddMonoidHom.sum_map
+-/
 
 variable (A B C D E)
 
@@ -206,54 +216,68 @@ def id : ContinuousMonoidHom A A :=
 #align continuous_add_monoid_hom.id ContinuousAddMonoidHom.id
 -/
 
+#print ContinuousMonoidHom.fst /-
 /-- The continuous homomorphism given by projection onto the first factor. -/
 @[to_additive "The continuous homomorphism given by projection onto the first factor.", simps]
 def fst : ContinuousMonoidHom (A × B) A :=
   mk' (MonoidHom.fst A B) continuous_fst
 #align continuous_monoid_hom.fst ContinuousMonoidHom.fst
 #align continuous_add_monoid_hom.fst ContinuousAddMonoidHom.fst
+-/
 
+#print ContinuousMonoidHom.snd /-
 /-- The continuous homomorphism given by projection onto the second factor. -/
 @[to_additive "The continuous homomorphism given by projection onto the second factor.", simps]
 def snd : ContinuousMonoidHom (A × B) B :=
   mk' (MonoidHom.snd A B) continuous_snd
 #align continuous_monoid_hom.snd ContinuousMonoidHom.snd
 #align continuous_add_monoid_hom.snd ContinuousAddMonoidHom.snd
+-/
 
+#print ContinuousMonoidHom.inl /-
 /-- The continuous homomorphism given by inclusion of the first factor. -/
 @[to_additive "The continuous homomorphism given by inclusion of the first factor.", simps]
 def inl : ContinuousMonoidHom A (A × B) :=
   prod (id A) (one A B)
 #align continuous_monoid_hom.inl ContinuousMonoidHom.inl
 #align continuous_add_monoid_hom.inl ContinuousAddMonoidHom.inl
+-/
 
+#print ContinuousMonoidHom.inr /-
 /-- The continuous homomorphism given by inclusion of the second factor. -/
 @[to_additive "The continuous homomorphism given by inclusion of the second factor.", simps]
 def inr : ContinuousMonoidHom B (A × B) :=
   prod (one B A) (id B)
 #align continuous_monoid_hom.inr ContinuousMonoidHom.inr
 #align continuous_add_monoid_hom.inr ContinuousAddMonoidHom.inr
+-/
 
+#print ContinuousMonoidHom.diag /-
 /-- The continuous homomorphism given by the diagonal embedding. -/
 @[to_additive "The continuous homomorphism given by the diagonal embedding.", simps]
 def diag : ContinuousMonoidHom A (A × A) :=
   prod (id A) (id A)
 #align continuous_monoid_hom.diag ContinuousMonoidHom.diag
 #align continuous_add_monoid_hom.diag ContinuousAddMonoidHom.diag
+-/
 
+#print ContinuousMonoidHom.swap /-
 /-- The continuous homomorphism given by swapping components. -/
 @[to_additive "The continuous homomorphism given by swapping components.", simps]
 def swap : ContinuousMonoidHom (A × B) (B × A) :=
   prod (snd A B) (fst A B)
 #align continuous_monoid_hom.swap ContinuousMonoidHom.swap
 #align continuous_add_monoid_hom.swap ContinuousAddMonoidHom.swap
+-/
 
+#print ContinuousMonoidHom.mul /-
 /-- The continuous homomorphism given by multiplication. -/
 @[to_additive "The continuous homomorphism given by addition.", simps]
 def mul : ContinuousMonoidHom (E × E) E :=
   mk' mulMonoidHom continuous_mul
 #align continuous_monoid_hom.mul ContinuousMonoidHom.mul
 #align continuous_add_monoid_hom.add ContinuousAddMonoidHom.add
+-/
 
 #print ContinuousMonoidHom.inv /-
 /-- The continuous homomorphism given by inversion. -/
@@ -266,6 +290,7 @@ def inv : ContinuousMonoidHom E E :=
 
 variable {A B C D E}
 
+#print ContinuousMonoidHom.coprod /-
 /-- Coproduct of two continuous homomorphisms to the same space. -/
 @[to_additive "Coproduct of two continuous homomorphisms to the same space.", simps]
 def coprod (f : ContinuousMonoidHom A E) (g : ContinuousMonoidHom B E) :
@@ -273,6 +298,7 @@ def coprod (f : ContinuousMonoidHom A E) (g : ContinuousMonoidHom B E) :
   (mul E).comp (f.Prod_map g)
 #align continuous_monoid_hom.coprod ContinuousMonoidHom.coprod
 #align continuous_add_monoid_hom.coprod ContinuousAddMonoidHom.coprod
+-/
 
 @[to_additive]
 instance : CommGroup (ContinuousMonoidHom A E)
@@ -292,21 +318,26 @@ instance : TopologicalSpace (ContinuousMonoidHom A B) :=
 
 variable (A B C D E)
 
+#print ContinuousMonoidHom.inducing_toContinuousMap /-
 @[to_additive]
 theorem inducing_toContinuousMap : Inducing (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
   ⟨rfl⟩
 #align continuous_monoid_hom.inducing_to_continuous_map ContinuousMonoidHom.inducing_toContinuousMap
 #align continuous_add_monoid_hom.inducing_to_continuous_map ContinuousAddMonoidHom.inducing_toContinuousMap
+-/
 
+#print ContinuousMonoidHom.embedding_toContinuousMap /-
 @[to_additive]
 theorem embedding_toContinuousMap :
     Embedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
   ⟨inducing_toContinuousMap A B, toContinuousMap_injective⟩
 #align continuous_monoid_hom.embedding_to_continuous_map ContinuousMonoidHom.embedding_toContinuousMap
 #align continuous_add_monoid_hom.embedding_to_continuous_map ContinuousAddMonoidHom.embedding_toContinuousMap
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (x y) -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (U V W) -/
+#print ContinuousMonoidHom.closedEmbedding_toContinuousMap /-
 @[to_additive]
 theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
     ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
@@ -350,6 +381,7 @@ theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
         exact h' ⟨hx, hy⟩⟩⟩
 #align continuous_monoid_hom.closed_embedding_to_continuous_map ContinuousMonoidHom.closedEmbedding_toContinuousMap
 #align continuous_add_monoid_hom.closed_embedding_to_continuous_map ContinuousAddMonoidHom.closedEmbedding_toContinuousMap
+-/
 
 variable {A B C D E}
 
@@ -364,6 +396,7 @@ instance : TopologicalGroup (ContinuousMonoidHom A E) :=
   { continuous_mul := hi.continuous_iff.mpr (continuous_mul.comp (Continuous.prod_map hc hc))
     continuous_inv := hi.continuous_iff.mpr (continuous_inv.comp hc) }
 
+#print ContinuousMonoidHom.continuous_of_continuous_uncurry /-
 @[to_additive]
 theorem continuous_of_continuous_uncurry {A : Type _} [TopologicalSpace A]
     (f : A → ContinuousMonoidHom B C) (h : Continuous (Function.uncurry fun x y => f x y)) :
@@ -372,7 +405,9 @@ theorem continuous_of_continuous_uncurry {A : Type _} [TopologicalSpace A]
     (ContinuousMap.continuous_of_continuous_uncurry _ h)
 #align continuous_monoid_hom.continuous_of_continuous_uncurry ContinuousMonoidHom.continuous_of_continuous_uncurry
 #align continuous_add_monoid_hom.continuous_of_continuous_uncurry ContinuousAddMonoidHom.continuous_of_continuous_uncurry
+-/
 
+#print ContinuousMonoidHom.continuous_comp /-
 @[to_additive]
 theorem continuous_comp [LocallyCompactSpace B] :
     Continuous fun f : ContinuousMonoidHom A B × ContinuousMonoidHom B C => f.2.comp f.1 :=
@@ -381,7 +416,9 @@ theorem continuous_comp [LocallyCompactSpace B] :
       ((inducing_toContinuousMap A B).prod_mk (inducing_toContinuousMap B C)).Continuous
 #align continuous_monoid_hom.continuous_comp ContinuousMonoidHom.continuous_comp
 #align continuous_add_monoid_hom.continuous_comp ContinuousAddMonoidHom.continuous_comp
+-/
 
+#print ContinuousMonoidHom.continuous_comp_left /-
 @[to_additive]
 theorem continuous_comp_left (f : ContinuousMonoidHom A B) :
     Continuous fun g : ContinuousMonoidHom B C => g.comp f :=
@@ -389,7 +426,9 @@ theorem continuous_comp_left (f : ContinuousMonoidHom A B) :
     f.toContinuousMap.continuous_comp_left.comp (inducing_toContinuousMap B C).Continuous
 #align continuous_monoid_hom.continuous_comp_left ContinuousMonoidHom.continuous_comp_left
 #align continuous_add_monoid_hom.continuous_comp_left ContinuousAddMonoidHom.continuous_comp_left
+-/
 
+#print ContinuousMonoidHom.continuous_comp_right /-
 @[to_additive]
 theorem continuous_comp_right (f : ContinuousMonoidHom B C) :
     Continuous fun g : ContinuousMonoidHom A B => f.comp g :=
@@ -397,9 +436,11 @@ theorem continuous_comp_right (f : ContinuousMonoidHom B C) :
     f.toContinuousMap.continuous_comp.comp (inducing_toContinuousMap A B).Continuous
 #align continuous_monoid_hom.continuous_comp_right ContinuousMonoidHom.continuous_comp_right
 #align continuous_add_monoid_hom.continuous_comp_right ContinuousAddMonoidHom.continuous_comp_right
+-/
 
 variable (E)
 
+#print ContinuousMonoidHom.compLeft /-
 /-- `continuous_monoid_hom _ f` is a functor. -/
 @[to_additive "`continuous_add_monoid_hom _ f` is a functor."]
 def compLeft (f : ContinuousMonoidHom A B) :
@@ -411,9 +452,11 @@ def compLeft (f : ContinuousMonoidHom A B) :
   continuous_toFun := f.continuous_comp_left
 #align continuous_monoid_hom.comp_left ContinuousMonoidHom.compLeft
 #align continuous_add_monoid_hom.comp_left ContinuousAddMonoidHom.compLeft
+-/
 
 variable (A) {E}
 
+#print ContinuousMonoidHom.compRight /-
 /-- `continuous_monoid_hom f _` is a functor. -/
 @[to_additive "`continuous_add_monoid_hom f _` is a functor."]
 def compRight {B : Type _} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B]
@@ -426,6 +469,7 @@ def compRight {B : Type _} [CommGroup B] [TopologicalSpace B] [TopologicalGroup
   continuous_toFun := f.continuous_comp_right
 #align continuous_monoid_hom.comp_right ContinuousMonoidHom.compRight
 #align continuous_add_monoid_hom.comp_right ContinuousAddMonoidHom.compRight
+-/
 
 end ContinuousMonoidHom
 
@@ -446,36 +490,47 @@ open ContinuousMonoidHom
 noncomputable instance : ContinuousMonoidHomClass (PontryaginDual A) A circle :=
   ContinuousMonoidHom.continuousMonoidHomClass
 
+#print PontryaginDual.map /-
 /-- `pontryagin_dual` is a functor. -/
 noncomputable def map (f : ContinuousMonoidHom A B) :
     ContinuousMonoidHom (PontryaginDual B) (PontryaginDual A) :=
   f.compLeft circle
 #align pontryagin_dual.map PontryaginDual.map
+-/
 
+#print PontryaginDual.map_apply /-
 @[simp]
 theorem map_apply (f : ContinuousMonoidHom A B) (x : PontryaginDual B) (y : A) :
     map f x y = x (f y) :=
   rfl
 #align pontryagin_dual.map_apply PontryaginDual.map_apply
+-/
 
+#print PontryaginDual.map_one /-
 @[simp]
 theorem map_one : map (one A B) = one (PontryaginDual B) (PontryaginDual A) :=
   ext fun x => ext fun y => map_one x
 #align pontryagin_dual.map_one PontryaginDual.map_one
+-/
 
+#print PontryaginDual.map_comp /-
 @[simp]
 theorem map_comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) :
     map (comp g f) = comp (map f) (map g) :=
   ext fun x => ext fun y => rfl
 #align pontryagin_dual.map_comp PontryaginDual.map_comp
+-/
 
+#print PontryaginDual.map_mul /-
 @[simp]
 theorem map_mul (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
   ext fun x => ext fun y => map_mul x (f y) (g y)
 #align pontryagin_dual.map_mul PontryaginDual.map_mul
+-/
 
 variable (A B C D E)
 
+#print PontryaginDual.mapHom /-
 /-- `continuous_monoid_hom.dual` as a `continuous_monoid_hom`. -/
 noncomputable def mapHom [LocallyCompactSpace E] :
     ContinuousMonoidHom (ContinuousMonoidHom A E)
@@ -486,6 +541,7 @@ noncomputable def mapHom [LocallyCompactSpace E] :
   map_mul' := map_mul
   continuous_toFun := continuous_of_continuous_uncurry _ continuous_comp
 #align pontryagin_dual.map_hom PontryaginDual.mapHom
+-/
 
 end PontryaginDual
 
Diff
@@ -470,9 +470,9 @@ theorem map_comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) :
 #align pontryagin_dual.map_comp PontryaginDual.map_comp
 
 @[simp]
-theorem map_mul' (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
+theorem map_mul (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
   ext fun x => ext fun y => map_mul x (f y) (g y)
-#align pontryagin_dual.map_mul PontryaginDual.map_mul'
+#align pontryagin_dual.map_mul PontryaginDual.map_mul
 
 variable (A B C D E)
 
@@ -483,7 +483,7 @@ noncomputable def mapHom [LocallyCompactSpace E] :
     where
   toFun := map
   map_one' := map_one
-  map_mul' := map_mul'
+  map_mul' := map_mul
   continuous_toFun := continuous_of_continuous_uncurry _ continuous_comp
 #align pontryagin_dual.map_hom PontryaginDual.mapHom
 
Diff
@@ -314,10 +314,10 @@ theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
     ⟨by
       suffices
         Set.range (to_continuous_map : ContinuousMonoidHom A B → C(A, B)) =
-          ({ f | f '' {1} ⊆ {1}ᶜ } ∪
+          ({f | f '' {1} ⊆ {1}ᶜ} ∪
               ⋃ (x) (y) (U) (V) (W) (hU : IsOpen U) (hV : IsOpen V) (hW : IsOpen W) (h :
                 Disjoint (U * V) W),
-                { f | f '' {x} ⊆ U } ∩ { f | f '' {y} ⊆ V } ∩ { f | f '' {x * y} ⊆ W })ᶜ
+                {f | f '' {x} ⊆ U} ∩ {f | f '' {y} ⊆ V} ∩ {f | f '' {x * y} ⊆ W})ᶜ
         by
         rw [this, compl_compl]
         refine' (ContinuousMap.isOpen_gen isCompact_singleton isOpen_compl_singleton).union _
Diff
@@ -43,7 +43,7 @@ you should parametrize over `(F : Type*) [continuous_add_monoid_hom_class F A B]
 
 When you extend this structure, make sure to extend `continuous_add_monoid_hom_class`. -/
 structure ContinuousAddMonoidHom (A B : Type _) [AddMonoid A] [AddMonoid B] [TopologicalSpace A]
-  [TopologicalSpace B] extends A →+ B where
+    [TopologicalSpace B] extends A →+ B where
   continuous_toFun : Continuous to_fun
 #align continuous_add_monoid_hom ContinuousAddMonoidHom
 -/
@@ -70,7 +70,7 @@ homomorphisms.
 
 You should also extend this typeclass when you extend `continuous_add_monoid_hom`. -/
 class ContinuousAddMonoidHomClass (A B : Type _) [AddMonoid A] [AddMonoid B] [TopologicalSpace A]
-  [TopologicalSpace B] extends AddMonoidHomClass F A B where
+    [TopologicalSpace B] extends AddMonoidHomClass F A B where
   map_continuous (f : F) : Continuous f
 #align continuous_add_monoid_hom_class ContinuousAddMonoidHomClass
 -/
@@ -432,8 +432,8 @@ end ContinuousMonoidHom
 #print PontryaginDual /-
 /-- The Pontryagin dual of `A` is the group of continuous homomorphism `A → circle`. -/
 def PontryaginDual :=
-  ContinuousMonoidHom A circle deriving TopologicalSpace, T2Space, CommGroup, TopologicalGroup,
-  Inhabited
+  ContinuousMonoidHom A circle
+deriving TopologicalSpace, T2Space, CommGroup, TopologicalGroup, Inhabited
 #align pontryagin_dual PontryaginDual
 -/
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Thomas Browning
 
 ! This file was ported from Lean 3 source module topology.algebra.continuous_monoid_hom
-! leanprover-community/mathlib commit 6ca1a09bc9aa75824bf97388c9e3b441fc4ccf3f
+! leanprover-community/mathlib commit 61b5e2755ccb464b68d05a9acf891ae04992d09d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -15,6 +15,9 @@ import Mathbin.Topology.ContinuousFunction.Algebra
 
 # Continuous Monoid Homs
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file defines the space of continuous homomorphisms between two topological groups.
 
 ## Main definitions
@@ -32,6 +35,7 @@ variable (F A B C D E : Type _) [Monoid A] [Monoid B] [Monoid C] [Monoid D] [Com
   [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C] [TopologicalSpace D]
   [TopologicalSpace E] [TopologicalGroup E]
 
+#print ContinuousAddMonoidHom /-
 /-- The type of continuous additive monoid homomorphisms from `A` to `B`.
 
 When possible, instead of parametrizing results over `(f : continuous_add_monoid_hom A B)`,
@@ -42,7 +46,9 @@ structure ContinuousAddMonoidHom (A B : Type _) [AddMonoid A] [AddMonoid B] [Top
   [TopologicalSpace B] extends A →+ B where
   continuous_toFun : Continuous to_fun
 #align continuous_add_monoid_hom ContinuousAddMonoidHom
+-/
 
+#print ContinuousMonoidHom /-
 /-- The type of continuous monoid homomorphisms from `A` to `B`.
 
 When possible, instead of parametrizing results over `(f : continuous_monoid_hom A B)`,
@@ -54,9 +60,11 @@ structure ContinuousMonoidHom extends A →* B where
   continuous_toFun : Continuous to_fun
 #align continuous_monoid_hom ContinuousMonoidHom
 #align continuous_add_monoid_hom ContinuousAddMonoidHom
+-/
 
 section
 
+#print ContinuousAddMonoidHomClass /-
 /-- `continuous_add_monoid_hom_class F A B` states that `F` is a type of continuous additive monoid
 homomorphisms.
 
@@ -65,7 +73,9 @@ class ContinuousAddMonoidHomClass (A B : Type _) [AddMonoid A] [AddMonoid B] [To
   [TopologicalSpace B] extends AddMonoidHomClass F A B where
   map_continuous (f : F) : Continuous f
 #align continuous_add_monoid_hom_class ContinuousAddMonoidHomClass
+-/
 
+#print ContinuousMonoidHomClass /-
 /-- `continuous_monoid_hom_class F A B` states that `F` is a type of continuous additive monoid
 homomorphisms.
 
@@ -75,6 +85,7 @@ class ContinuousMonoidHomClass extends MonoidHomClass F A B where
   map_continuous (f : F) : Continuous f
 #align continuous_monoid_hom_class ContinuousMonoidHomClass
 #align continuous_add_monoid_hom_class ContinuousAddMonoidHomClass
+-/
 
 attribute [to_additive ContinuousAddMonoidHomClass.toAddMonoidHomClass]
   ContinuousMonoidHomClass.toMonoidHomClass
@@ -87,13 +98,15 @@ add_decl_doc ContinuousMonoidHom.toMonoidHom
 /-- Reinterpret a `continuous_add_monoid_hom` as an `add_monoid_hom`. -/
 add_decl_doc ContinuousAddMonoidHom.toAddMonoidHom
 
+#print ContinuousMonoidHomClass.toContinuousMapClass /-
 -- See note [lower instance priority]
 @[to_additive]
 instance (priority := 100) ContinuousMonoidHomClass.toContinuousMapClass
     [ContinuousMonoidHomClass F A B] : ContinuousMapClass F A B :=
   { ‹ContinuousMonoidHomClass F A B› with }
 #align continuous_monoid_hom_class.to_continuous_map_class ContinuousMonoidHomClass.toContinuousMapClass
-#align continuous_add_monoid_hom_class.to_continuous_map_class ContinuousAddMonoidHomClass.to_continuous_map_class
+#align continuous_add_monoid_hom_class.to_continuous_map_class ContinuousAddMonoidHomClass.toContinuousMapClass
+-/
 
 namespace ContinuousMonoidHom
 
@@ -121,12 +134,14 @@ theorem ext {f g : ContinuousMonoidHom A B} (h : ∀ x, f x = g x) : f = g :=
 #align continuous_monoid_hom.ext ContinuousMonoidHom.ext
 #align continuous_add_monoid_hom.ext ContinuousAddMonoidHom.ext
 
+#print ContinuousMonoidHom.toContinuousMap /-
 /-- Reinterpret a `continuous_monoid_hom` as a `continuous_map`. -/
 @[to_additive "Reinterpret a `continuous_add_monoid_hom` as a `continuous_map`."]
 def toContinuousMap (f : ContinuousMonoidHom A B) : C(A, B) :=
   { f with }
 #align continuous_monoid_hom.to_continuous_map ContinuousMonoidHom.toContinuousMap
 #align continuous_add_monoid_hom.to_continuous_map ContinuousAddMonoidHom.toContinuousMap
+-/
 
 @[to_additive]
 theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B)) := fun f g h =>
@@ -142,12 +157,14 @@ def mk' (f : A →* B) (hf : Continuous f) : ContinuousMonoidHom A B :=
 #align continuous_monoid_hom.mk' ContinuousMonoidHom.mk'
 #align continuous_add_monoid_hom.mk' ContinuousAddMonoidHom.mk'
 
+#print ContinuousMonoidHom.comp /-
 /-- Composition of two continuous homomorphisms. -/
 @[to_additive "Composition of two continuous homomorphisms.", simps]
 def comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) : ContinuousMonoidHom A C :=
   mk' (g.toMonoidHom.comp f.toMonoidHom) (g.continuous_toFun.comp f.continuous_toFun)
 #align continuous_monoid_hom.comp ContinuousMonoidHom.comp
 #align continuous_add_monoid_hom.comp ContinuousAddMonoidHom.comp
+-/
 
 /-- Product of two continuous homomorphisms on the same space. -/
 @[to_additive "Product of two continuous homomorphisms on the same space.", simps]
@@ -159,31 +176,35 @@ def prod (f : ContinuousMonoidHom A B) (g : ContinuousMonoidHom A C) :
 
 /-- Product of two continuous homomorphisms on different spaces. -/
 @[to_additive "Product of two continuous homomorphisms on different spaces.", simps]
-def prodMap (f : ContinuousMonoidHom A C) (g : ContinuousMonoidHom B D) :
+def prod_map (f : ContinuousMonoidHom A C) (g : ContinuousMonoidHom B D) :
     ContinuousMonoidHom (A × B) (C × D) :=
   mk' (f.toMonoidHom.Prod_map g.toMonoidHom) (f.continuous_toFun.Prod_map g.continuous_toFun)
-#align continuous_monoid_hom.prod_map ContinuousMonoidHom.prodMap
-#align continuous_add_monoid_hom.sum_map ContinuousAddMonoidHom.sumMap
+#align continuous_monoid_hom.prod_map ContinuousMonoidHom.prod_map
+#align continuous_add_monoid_hom.sum_map ContinuousAddMonoidHom.sum_map
 
 variable (A B C D E)
 
+#print ContinuousMonoidHom.one /-
 /-- The trivial continuous homomorphism. -/
 @[to_additive "The trivial continuous homomorphism.", simps]
 def one : ContinuousMonoidHom A B :=
   mk' 1 continuous_const
 #align continuous_monoid_hom.one ContinuousMonoidHom.one
 #align continuous_add_monoid_hom.zero ContinuousAddMonoidHom.zero
+-/
 
 @[to_additive]
 instance : Inhabited (ContinuousMonoidHom A B) :=
   ⟨one A B⟩
 
+#print ContinuousMonoidHom.id /-
 /-- The identity continuous homomorphism. -/
 @[to_additive "The identity continuous homomorphism.", simps]
 def id : ContinuousMonoidHom A A :=
   mk' (MonoidHom.id A) continuous_id
 #align continuous_monoid_hom.id ContinuousMonoidHom.id
 #align continuous_add_monoid_hom.id ContinuousAddMonoidHom.id
+-/
 
 /-- The continuous homomorphism given by projection onto the first factor. -/
 @[to_additive "The continuous homomorphism given by projection onto the first factor.", simps]
@@ -234,12 +255,14 @@ def mul : ContinuousMonoidHom (E × E) E :=
 #align continuous_monoid_hom.mul ContinuousMonoidHom.mul
 #align continuous_add_monoid_hom.add ContinuousAddMonoidHom.add
 
+#print ContinuousMonoidHom.inv /-
 /-- The continuous homomorphism given by inversion. -/
 @[to_additive "The continuous homomorphism given by negation.", simps]
 def inv : ContinuousMonoidHom E E :=
   mk' invMonoidHom continuous_inv
 #align continuous_monoid_hom.inv ContinuousMonoidHom.inv
 #align continuous_add_monoid_hom.neg ContinuousAddMonoidHom.neg
+-/
 
 variable {A B C D E}
 
@@ -406,11 +429,13 @@ def compRight {B : Type _} [CommGroup B] [TopologicalSpace B] [TopologicalGroup
 
 end ContinuousMonoidHom
 
+#print PontryaginDual /-
 /-- The Pontryagin dual of `A` is the group of continuous homomorphism `A → circle`. -/
 def PontryaginDual :=
   ContinuousMonoidHom A circle deriving TopologicalSpace, T2Space, CommGroup, TopologicalGroup,
   Inhabited
 #align pontryagin_dual PontryaginDual
+-/
 
 variable {A B C D E}
 
@@ -445,9 +470,9 @@ theorem map_comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) :
 #align pontryagin_dual.map_comp PontryaginDual.map_comp
 
 @[simp]
-theorem map_mul (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
+theorem map_mul' (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
   ext fun x => ext fun y => map_mul x (f y) (g y)
-#align pontryagin_dual.map_mul PontryaginDual.map_mul
+#align pontryagin_dual.map_mul PontryaginDual.map_mul'
 
 variable (A B C D E)
 
@@ -458,7 +483,7 @@ noncomputable def mapHom [LocallyCompactSpace E] :
     where
   toFun := map
   map_one' := map_one
-  map_mul' := map_mul
+  map_mul' := map_mul'
   continuous_toFun := continuous_of_continuous_uncurry _ continuous_comp
 #align pontryagin_dual.map_hom PontryaginDual.mapHom
 
Diff
@@ -24,7 +24,7 @@ This file defines the space of continuous homomorphisms between two topological
 -/
 
 
-open Pointwise
+open scoped Pointwise
 
 open Function
 
Diff
@@ -103,10 +103,7 @@ variable {A B C D E}
 instance : ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B
     where
   coe f := f.toFun
-  coe_injective' f g h := by
-    obtain ⟨⟨_, _⟩, _⟩ := f
-    obtain ⟨⟨_, _⟩, _⟩ := g
-    congr
+  coe_injective' f g h := by obtain ⟨⟨_, _⟩, _⟩ := f; obtain ⟨⟨_, _⟩, _⟩ := g; congr
   map_mul f := f.map_mul'
   map_one f := f.map_one'
   map_continuous f := f.continuous_toFun
Diff
@@ -301,11 +301,11 @@ theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
         by
         rw [this, compl_compl]
         refine' (ContinuousMap.isOpen_gen isCompact_singleton isOpen_compl_singleton).union _
-        repeat' apply isOpen_unionᵢ; intro
+        repeat' apply isOpen_iUnion; intro
         repeat' apply IsOpen.inter
         all_goals apply ContinuousMap.isOpen_gen isCompact_singleton; assumption
-      simp_rw [Set.compl_union, Set.compl_unionᵢ, Set.image_singleton, Set.singleton_subset_iff,
-        Set.ext_iff, Set.mem_inter_iff, Set.mem_interᵢ, Set.mem_compl_iff]
+      simp_rw [Set.compl_union, Set.compl_iUnion, Set.image_singleton, Set.singleton_subset_iff,
+        Set.ext_iff, Set.mem_inter_iff, Set.mem_iInter, Set.mem_compl_iff]
       refine' fun f => ⟨_, _⟩
       · rintro ⟨f, rfl⟩
         exact

Changes in mathlib4

mathlib3
mathlib4
chore: rename open_range to isOpen_range, closed_range to isClosed_range (#11438)

All these lemmas refer to the range of some function being open/range (i.e. isOpen or isClosed).

Diff
@@ -293,7 +293,7 @@ lemma range_toContinuousMap :
 theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
     ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) where
   toEmbedding := embedding_toContinuousMap A B
-  closed_range := by
+  isClosed_range := by
     simp only [range_toContinuousMap, Set.setOf_and, Set.setOf_forall]
     refine .inter (isClosed_singleton.preimage (ContinuousMap.continuous_eval_const 1)) <|
       isClosed_iInter fun x ↦ isClosed_iInter fun y ↦ ?_
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -33,21 +33,21 @@ def PontryaginDual :=
   ContinuousMonoidHom A circle
 #align pontryagin_dual PontryaginDual
 
--- porting note: `deriving` doesn't derive these instances
+-- Porting note: `deriving` doesn't derive these instances
 instance : TopologicalSpace (PontryaginDual A) :=
   (inferInstance : TopologicalSpace (ContinuousMonoidHom A circle))
 
 instance : T2Space (PontryaginDual A) :=
   (inferInstance : T2Space (ContinuousMonoidHom A circle))
 
--- porting note: instance is now noncomputable
+-- Porting note: instance is now noncomputable
 noncomputable instance : CommGroup (PontryaginDual A) :=
   (inferInstance : CommGroup (ContinuousMonoidHom A circle))
 
 instance : TopologicalGroup (PontryaginDual A) :=
   (inferInstance : TopologicalGroup (ContinuousMonoidHom A circle))
 
--- porting note: instance is now noncomputable
+-- Porting note: instance is now noncomputable
 noncomputable instance : Inhabited (PontryaginDual A) :=
   (inferInstance : Inhabited (ContinuousMonoidHom A circle))
 
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -130,7 +130,7 @@ theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B))
 #align continuous_monoid_hom.to_continuous_map_injective ContinuousMonoidHom.toContinuousMap_injective
 #align continuous_add_monoid_hom.to_continuous_map_injective ContinuousAddMonoidHom.toContinuousMap_injective
 
--- porting note: Removed simps because given definition is not a constructor application
+-- Porting note: Removed simps because given definition is not a constructor application
 /-- Construct a `ContinuousMonoidHom` from a `Continuous` `MonoidHom`. -/
 @[to_additive "Construct a `ContinuousAddMonoidHom` from a `Continuous` `AddMonoidHom`."]
 def mk' (f : A →* B) (hf : Continuous f) : ContinuousMonoidHom A B :=
chore: remove duplicated namespaces from instances (#10899)
Diff
@@ -98,8 +98,7 @@ namespace ContinuousMonoidHom
 variable {A B C D E}
 
 @[to_additive]
-instance ContinuousMonoidHom.funLike :
-    FunLike (ContinuousMonoidHom A B) A B where
+instance funLike : FunLike (ContinuousMonoidHom A B) A B where
   coe f := f.toFun
   coe_injective' f g h := by
     obtain ⟨⟨⟨ _ , _ ⟩, _⟩, _⟩ := f
@@ -107,8 +106,7 @@ instance ContinuousMonoidHom.funLike :
     congr
 
 @[to_additive]
-instance ContinuousMonoidHom.ContinuousMonoidHomClass :
-    ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B where
+instance ContinuousMonoidHomClass : ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B where
   map_mul f := f.map_mul'
   map_one f := f.map_one'
   map_continuous f := f.continuous_toFun
style: reduce spacing variation in "porting note" comments (#10886)

In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.

Diff
@@ -56,7 +56,7 @@ section
 homomorphisms.
 
 You should also extend this typeclass when you extend `ContinuousAddMonoidHom`. -/
--- porting note : Changed A B to outParam to help synthesizing order
+-- Porting note: Changed A B to outParam to help synthesizing order
 class ContinuousAddMonoidHomClass (A B : outParam (Type*)) [AddMonoid A] [AddMonoid B]
     [TopologicalSpace A] [TopologicalSpace B] [FunLike F A B]
     extends AddMonoidHomClass F A B : Prop where
@@ -68,7 +68,7 @@ class ContinuousAddMonoidHomClass (A B : outParam (Type*)) [AddMonoid A] [AddMon
 homomorphisms.
 
 You should also extend this typeclass when you extend `ContinuousMonoidHom`. -/
--- porting note : Changed A B to outParam to help synthesizing order
+-- Porting note: Changed A B to outParam to help synthesizing order
 @[to_additive]
 class ContinuousMonoidHomClass (A B : outParam (Type*)) [Monoid A] [Monoid B]
     [TopologicalSpace A] [TopologicalSpace B] [FunLike F A B]
refactor: Split off the Pontryagin dual into separate file (#10620)

This PR splits off the Pontryagin dual to a separate file to avoid unnecessary imports in ContinuousMonoidHom.lean. For instance, local compactness of the Pontryagin dual will require some heavy imports such as Arzela-Ascoli and the fact that the exponential map is a covering map.

Co-authored-by: Thomas Browning <tb65536@users.noreply.github.com>

refactor: Split off the Pontryagin dual into separate file (#10620)

This PR splits off the Pontryagin dual to a separate file to avoid unnecessary imports in ContinuousMonoidHom.lean. For instance, local compactness of the Pontryagin dual will require some heavy imports such as Arzela-Ascoli and the fact that the exponential map is a covering map.

Co-authored-by: Thomas Browning <tb65536@users.noreply.github.com>

Diff
@@ -3,7 +3,6 @@ Copyright (c) 2022 Thomas Browning. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Thomas Browning
 -/
-import Mathlib.Analysis.Complex.Circle
 import Mathlib.Topology.ContinuousFunction.Algebra
 
 #align_import topology.algebra.continuous_monoid_hom from "leanprover-community/mathlib"@"6ca1a09bc9aa75824bf97388c9e3b441fc4ccf3f"
@@ -380,84 +379,3 @@ def compRight {B : Type*} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B
 #align continuous_add_monoid_hom.comp_right ContinuousAddMonoidHom.compRight
 
 end ContinuousMonoidHom
-
-
-
-/-- The Pontryagin dual of `A` is the group of continuous homomorphism `A → circle`. -/
-def PontryaginDual :=
-  ContinuousMonoidHom A circle
-#align pontryagin_dual PontryaginDual
-
--- porting note: `deriving` doesn't derive these instances
-instance : TopologicalSpace (PontryaginDual A) :=
-  (inferInstance : TopologicalSpace (ContinuousMonoidHom A circle))
-
-instance : T2Space (PontryaginDual A) :=
-  (inferInstance : T2Space (ContinuousMonoidHom A circle))
-
--- porting note: instance is now noncomputable
-noncomputable instance : CommGroup (PontryaginDual A) :=
-  (inferInstance : CommGroup (ContinuousMonoidHom A circle))
-
-instance : TopologicalGroup (PontryaginDual A) :=
-  (inferInstance : TopologicalGroup (ContinuousMonoidHom A circle))
-
--- porting note: instance is now noncomputable
-noncomputable instance : Inhabited (PontryaginDual A) :=
-  (inferInstance : Inhabited (ContinuousMonoidHom A circle))
-
-
-variable {A B C D E}
-
-namespace PontryaginDual
-
-open ContinuousMonoidHom
-
-instance : FunLike (PontryaginDual A) A circle :=
-  ContinuousMonoidHom.funLike
-
-noncomputable instance : ContinuousMonoidHomClass (PontryaginDual A) A circle :=
-  ContinuousMonoidHom.ContinuousMonoidHomClass
-
-/-- `PontryaginDual` is a functor. -/
-noncomputable def map (f : ContinuousMonoidHom A B) :
-    ContinuousMonoidHom (PontryaginDual B) (PontryaginDual A) :=
-  f.compLeft circle
-#align pontryagin_dual.map PontryaginDual.map
-
-@[simp]
-theorem map_apply (f : ContinuousMonoidHom A B) (x : PontryaginDual B) (y : A) :
-    map f x y = x (f y) :=
-  rfl
-#align pontryagin_dual.map_apply PontryaginDual.map_apply
-
-@[simp]
-theorem map_one : map (one A B) = one (PontryaginDual B) (PontryaginDual A) :=
-  ext fun x => ext (fun _y => OneHomClass.map_one x)
-#align pontryagin_dual.map_one PontryaginDual.map_one
-
-@[simp]
-theorem map_comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) :
-    map (comp g f) = ContinuousMonoidHom.comp (map f) (map g) :=
-  ext fun _x => ext fun _y => rfl
-#align pontryagin_dual.map_comp PontryaginDual.map_comp
-
-
-@[simp]
-nonrec theorem map_mul (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
-  ext fun x => ext fun y => map_mul x (f y) (g y)
-#align pontryagin_dual.map_mul PontryaginDual.map_mul
-
-variable (A B C D E)
-
-/-- `ContinuousMonoidHom.dual` as a `ContinuousMonoidHom`. -/
-noncomputable def mapHom [LocallyCompactSpace E] :
-    ContinuousMonoidHom (ContinuousMonoidHom A E)
-      (ContinuousMonoidHom (PontryaginDual E) (PontryaginDual A)) where
-  toFun := map
-  map_one' := map_one
-  map_mul' := map_mul
-  continuous_toFun := continuous_of_continuous_uncurry _ continuous_comp
-#align pontryagin_dual.map_hom PontryaginDual.mapHom
-
-end PontryaginDual
refactor(Data/FunLike): use unbundled inheritance from FunLike (#8386)

The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike is EquivLike, since that has a custom coe_injective' field that is easier to implement. All other classes should take FunLike or EquivLike as a parameter.

Zulip thread

Important changes

Previously, morphism classes would be Type-valued and extend FunLike:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

After this PR, they should be Prop-valued and take FunLike as a parameter:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  [FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

(Note that A B stay marked as outParam even though they are not purely required to be so due to the FunLike parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam is slightly faster.)

Similarly, MyEquivClass should take EquivLike as a parameter.

As a result, every mention of [MyHomClass F A B] should become [FunLike F A B] [MyHomClass F A B].

Remaining issues

Slower (failing) search

While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul is more expensive. This is due to suboptimal processing of arguments. For example:

variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)

theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y

example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _

Before this PR, applying map_mul f gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Since M and N are out_params, [MulHomClass F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found.

After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Now [FunLike F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found, before trying MulHomClass F M N which fails. Since the Mul hierarchy is very big, this can be slow to fail, especially when there is no such Mul instance.

A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N] because MulHomClass fails or succeeds much faster than the others.

As a consequence, the simpNF linter is much slower since by design it tries and fails to apply many map_ lemmas. The same issue occurs a few times in existing calls to simp [map_mul], where map_mul is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.

simp not firing sometimes

This affects map_smulₛₗ and related definitions. For simp lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw can find every argument to map_smulₛₗ successfully but simp can't: leanprover/lean4#3701.

Missing instances due to unification failing

Especially in the category theory library, we might sometimes have a type A which is also accessible as a synonym (Bundled A hA).1. Instance synthesis doesn't always work if we have f : A →* B but x * y : (Bundled A hA).1 or vice versa. This seems to be mostly fixed by keeping A B as outParams in MulHomClass F A B. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1 instead of using the syntax in the discrimination tree.)

Workaround for issues

The timeouts can be worked around for now by specifying which map_mul we mean, either as map_mul f for some explicit f, or as e.g. MonoidHomClass.map_mul.

map_smulₛₗ not firing as simp lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ a simp lemma instead of the generic map_smulₛₗ. Writing simp [map_smulₛₗ _] also works.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -59,7 +59,8 @@ homomorphisms.
 You should also extend this typeclass when you extend `ContinuousAddMonoidHom`. -/
 -- porting note : Changed A B to outParam to help synthesizing order
 class ContinuousAddMonoidHomClass (A B : outParam (Type*)) [AddMonoid A] [AddMonoid B]
-  [TopologicalSpace A] [TopologicalSpace B] extends AddMonoidHomClass F A B where
+    [TopologicalSpace A] [TopologicalSpace B] [FunLike F A B]
+    extends AddMonoidHomClass F A B : Prop where
   /-- Proof of the continuity of the map. -/
   map_continuous (f : F) : Continuous f
 #align continuous_add_monoid_hom_class ContinuousAddMonoidHomClass
@@ -71,7 +72,8 @@ You should also extend this typeclass when you extend `ContinuousMonoidHom`. -/
 -- porting note : Changed A B to outParam to help synthesizing order
 @[to_additive]
 class ContinuousMonoidHomClass (A B : outParam (Type*)) [Monoid A] [Monoid B]
-    [TopologicalSpace A] [TopologicalSpace B] extends MonoidHomClass F A B where
+    [TopologicalSpace A] [TopologicalSpace B] [FunLike F A B]
+    extends MonoidHomClass F A B : Prop where
   /-- Proof of the continuity of the map. -/
   map_continuous (f : F) : Continuous f
 #align continuous_monoid_hom_class ContinuousMonoidHomClass
@@ -87,7 +89,7 @@ add_decl_doc ContinuousAddMonoidHom.toAddMonoidHom
 -- See note [lower instance priority]
 @[to_additive]
 instance (priority := 100) ContinuousMonoidHomClass.toContinuousMapClass
-    [ContinuousMonoidHomClass F A B] : ContinuousMapClass F A B :=
+    [FunLike F A B] [ContinuousMonoidHomClass F A B] : ContinuousMapClass F A B :=
   { ‹ContinuousMonoidHomClass F A B› with }
 #align continuous_monoid_hom_class.to_continuous_map_class ContinuousMonoidHomClass.toContinuousMapClass
 #align continuous_add_monoid_hom_class.to_continuous_map_class ContinuousAddMonoidHomClass.toContinuousMapClass
@@ -97,25 +99,21 @@ namespace ContinuousMonoidHom
 variable {A B C D E}
 
 @[to_additive]
-instance ContinuousMonoidHom.ContinuousMonoidHomClass :
-  ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B where
+instance ContinuousMonoidHom.funLike :
+    FunLike (ContinuousMonoidHom A B) A B where
   coe f := f.toFun
   coe_injective' f g h := by
     obtain ⟨⟨⟨ _ , _ ⟩, _⟩, _⟩ := f
     obtain ⟨⟨⟨ _ , _ ⟩, _⟩, _⟩ := g
     congr
 
+@[to_additive]
+instance ContinuousMonoidHom.ContinuousMonoidHomClass :
+    ContinuousMonoidHomClass (ContinuousMonoidHom A B) A B where
   map_mul f := f.map_mul'
   map_one f := f.map_one'
   map_continuous f := f.continuous_toFun
 
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
-directly. -/
-@[to_additive
-      "Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`."]
-instance : CoeFun (ContinuousMonoidHom A B) fun _ => A → B :=
-  DFunLike.hasCoeToFun
-
 @[to_additive (attr := ext)]
 theorem ext {f g : ContinuousMonoidHom A B} (h : ∀ x, f x = g x) : f = g :=
   DFunLike.ext _ _ h
@@ -415,6 +413,9 @@ namespace PontryaginDual
 
 open ContinuousMonoidHom
 
+instance : FunLike (PontryaginDual A) A circle :=
+  ContinuousMonoidHom.funLike
+
 noncomputable instance : ContinuousMonoidHomClass (PontryaginDual A) A circle :=
   ContinuousMonoidHom.ContinuousMonoidHomClass
 
chore(*): rename FunLike to DFunLike (#9785)

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

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

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

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

Diff
@@ -109,16 +109,16 @@ instance ContinuousMonoidHom.ContinuousMonoidHomClass :
   map_one f := f.map_one'
   map_continuous f := f.continuous_toFun
 
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
 directly. -/
 @[to_additive
-      "Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`."]
+      "Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`."]
 instance : CoeFun (ContinuousMonoidHom A B) fun _ => A → B :=
-  FunLike.hasCoeToFun
+  DFunLike.hasCoeToFun
 
 @[to_additive (attr := ext)]
 theorem ext {f g : ContinuousMonoidHom A B} (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align continuous_monoid_hom.ext ContinuousMonoidHom.ext
 #align continuous_add_monoid_hom.ext ContinuousAddMonoidHom.ext
 
@@ -131,7 +131,7 @@ def toContinuousMap (f : ContinuousMonoidHom A B) : C(A, B) :=
 
 @[to_additive]
 theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B)) := fun f g h =>
-  ext <| by convert FunLike.ext_iff.1 h
+  ext <| by convert DFunLike.ext_iff.1 h
 #align continuous_monoid_hom.to_continuous_map_injective ContinuousMonoidHom.toContinuousMap_injective
 #align continuous_add_monoid_hom.to_continuous_map_injective ContinuousAddMonoidHom.toContinuousMap_injective
 
chore(ContinuousMonoidHom): golf (#9189)
Diff
@@ -286,47 +286,24 @@ theorem embedding_toContinuousMap :
 #align continuous_monoid_hom.embedding_to_continuous_map ContinuousMonoidHom.embedding_toContinuousMap
 #align continuous_add_monoid_hom.embedding_to_continuous_map ContinuousAddMonoidHom.embedding_toContinuousMap
 
+@[to_additive]
+lemma range_toContinuousMap :
+    Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
+      {f : C(A, B) | f 1 = 1 ∧ ∀ x y, f (x * y) = f x * f y} := by
+  refine Set.Subset.antisymm (Set.range_subset_iff.2 fun f ↦ ⟨map_one f, map_mul f⟩) ?_
+  rintro f ⟨h1, hmul⟩
+  exact ⟨{ f with map_one' := h1, map_mul' := hmul }, rfl⟩
+
 @[to_additive]
 theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
-    ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
-  ⟨embedding_toContinuousMap A B,
-    ⟨by
-      suffices
-        Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
-          ({ f | f '' {1} ⊆ {1}ᶜ } ∪
-              ⋃ (x) (y) (U) (V) (W) (_ : IsOpen U) (_ : IsOpen V) (_ : IsOpen W) (_ :
-                Disjoint (U * V) W),
-                { f | f '' {x} ⊆ U } ∩ { f | f '' {y} ⊆ V } ∩ { f | f '' {x * y} ⊆ W } :
-                  Set C(A , B))ᶜ by
-        rw [this, compl_compl]
-        refine' (ContinuousMap.isOpen_gen isCompact_singleton isOpen_compl_singleton).union _
-        repeat' apply isOpen_iUnion; intro
-        repeat' apply IsOpen.inter
-        all_goals apply ContinuousMap.isOpen_gen isCompact_singleton; assumption
-      simp_rw [Set.compl_union, Set.compl_iUnion, Set.image_singleton, Set.singleton_subset_iff,
-        Set.ext_iff, Set.mem_inter_iff, Set.mem_iInter, Set.mem_compl_iff]
-      refine' fun f => ⟨_, _⟩
-      · rintro ⟨f, rfl⟩
-        exact
-          ⟨fun h => h (map_one f), fun x y U V W _hU _hV _hW h ⟨⟨hfU, hfV⟩, hfW⟩ =>
-            h.le_bot ⟨Set.mul_mem_mul hfU hfV, (congr_arg (· ∈ W) (map_mul f x y)).mp hfW⟩⟩
-      · rintro ⟨hf1, hf2⟩
-        suffices ∀ x y, f (x * y) = f x * f y by
-          refine'
-            ⟨({ f with
-                  map_one' := of_not_not hf1
-                  map_mul' := this } :
-                ContinuousMonoidHom A B),
-              ContinuousMap.ext fun _ => rfl⟩
-        intro x y
-        contrapose! hf2
-        obtain ⟨UV, W, hUV, hW, hfUV, hfW, h⟩ := t2_separation hf2.symm
-        have hB := @continuous_mul B _ _ _
-        obtain ⟨U, V, hU, hV, hfU, hfV, h'⟩ :=
-          isOpen_prod_iff.mp (hUV.preimage hB) (f x) (f y) hfUV
-        refine' ⟨x, y, U, V, W, hU, hV, hW, h.mono_left _, ⟨hfU, hfV⟩, hfW⟩
-        rintro _ ⟨x, y, hx : (x, y).1 ∈ U, hy : (x, y).2 ∈ V, rfl⟩
-        exact h' ⟨hx, hy⟩⟩⟩
+    ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) where
+  toEmbedding := embedding_toContinuousMap A B
+  closed_range := by
+    simp only [range_toContinuousMap, Set.setOf_and, Set.setOf_forall]
+    refine .inter (isClosed_singleton.preimage (ContinuousMap.continuous_eval_const 1)) <|
+      isClosed_iInter fun x ↦ isClosed_iInter fun y ↦ ?_
+    exact isClosed_eq (ContinuousMap.continuous_eval_const (x * y)) <|
+      .mul (ContinuousMap.continuous_eval_const x) (ContinuousMap.continuous_eval_const y)
 #align continuous_monoid_hom.closed_embedding_to_continuous_map ContinuousMonoidHom.closedEmbedding_toContinuousMap
 #align continuous_add_monoid_hom.closed_embedding_to_continuous_map ContinuousAddMonoidHom.closedEmbedding_toContinuousMap
 
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
@@ -23,7 +23,7 @@ This file defines the space of continuous homomorphisms between two topological
 
 open Pointwise Function
 
-variable (F A B C D E : Type _) [Monoid A] [Monoid B] [Monoid C] [Monoid D] [CommGroup E]
+variable (F A B C D E : Type*) [Monoid A] [Monoid B] [Monoid C] [Monoid D] [CommGroup E]
   [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C] [TopologicalSpace D]
   [TopologicalSpace E] [TopologicalGroup E]
 
@@ -33,7 +33,7 @@ When possible, instead of parametrizing results over `(f : ContinuousAddMonoidHo
 you should parametrize over `(F : Type*) [ContinuousAddMonoidHomClass F A B] (f : F)`.
 
 When you extend this structure, make sure to extend `ContinuousAddMonoidHomClass`. -/
-structure ContinuousAddMonoidHom (A B : Type _) [AddMonoid A] [AddMonoid B] [TopologicalSpace A]
+structure ContinuousAddMonoidHom (A B : Type*) [AddMonoid A] [AddMonoid B] [TopologicalSpace A]
   [TopologicalSpace B] extends A →+ B where
   /-- Proof of continuity of the Hom. -/
   continuous_toFun : @Continuous A B _ _ toFun
@@ -58,7 +58,7 @@ homomorphisms.
 
 You should also extend this typeclass when you extend `ContinuousAddMonoidHom`. -/
 -- porting note : Changed A B to outParam to help synthesizing order
-class ContinuousAddMonoidHomClass (A B : outParam (Type _)) [AddMonoid A] [AddMonoid B]
+class ContinuousAddMonoidHomClass (A B : outParam (Type*)) [AddMonoid A] [AddMonoid B]
   [TopologicalSpace A] [TopologicalSpace B] extends AddMonoidHomClass F A B where
   /-- Proof of the continuity of the map. -/
   map_continuous (f : F) : Continuous f
@@ -70,7 +70,7 @@ homomorphisms.
 You should also extend this typeclass when you extend `ContinuousMonoidHom`. -/
 -- porting note : Changed A B to outParam to help synthesizing order
 @[to_additive]
-class ContinuousMonoidHomClass (A B : outParam (Type _)) [Monoid A] [Monoid B]
+class ContinuousMonoidHomClass (A B : outParam (Type*)) [Monoid A] [Monoid B]
     [TopologicalSpace A] [TopologicalSpace B] extends MonoidHomClass F A B where
   /-- Proof of the continuity of the map. -/
   map_continuous (f : F) : Continuous f
@@ -344,7 +344,7 @@ instance : TopologicalGroup (ContinuousMonoidHom A E) :=
     continuous_inv := hi.continuous_iff.mpr (continuous_inv.comp hc) }
 
 @[to_additive]
-theorem continuous_of_continuous_uncurry {A : Type _} [TopologicalSpace A]
+theorem continuous_of_continuous_uncurry {A : Type*} [TopologicalSpace A]
     (f : A → ContinuousMonoidHom B C) (h : Continuous (Function.uncurry fun x y => f x y)) :
     Continuous f :=
   (inducing_toContinuousMap _ _).continuous_iff.mpr
@@ -394,7 +394,7 @@ variable (A) {E}
 
 /-- `ContinuousMonoidHom f _` is a functor. -/
 @[to_additive "`ContinuousAddMonoidHom f _` is a functor."]
-def compRight {B : Type _} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B]
+def compRight {B : Type*} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B]
     (f : ContinuousMonoidHom B E) :
     ContinuousMonoidHom (ContinuousMonoidHom A B) (ContinuousMonoidHom A E) where
   toFun g := f.comp g
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,15 +2,12 @@
 Copyright (c) 2022 Thomas Browning. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module topology.algebra.continuous_monoid_hom
-! leanprover-community/mathlib commit 6ca1a09bc9aa75824bf97388c9e3b441fc4ccf3f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.Complex.Circle
 import Mathlib.Topology.ContinuousFunction.Algebra
 
+#align_import topology.algebra.continuous_monoid_hom from "leanprover-community/mathlib"@"6ca1a09bc9aa75824bf97388c9e3b441fc4ccf3f"
+
 /-!
 
 # Continuous Monoid Homs
chore: tidy various files (#4757)
Diff
@@ -24,9 +24,7 @@ This file defines the space of continuous homomorphisms between two topological
 -/
 
 
-open Pointwise
-
-open Function
+open Pointwise Function
 
 variable (F A B C D E : Type _) [Monoid A] [Monoid B] [Monoid C] [Monoid D] [CommGroup E]
   [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C] [TopologicalSpace D]
@@ -117,7 +115,7 @@ instance ContinuousMonoidHom.ContinuousMonoidHomClass :
 /-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`
 directly. -/
 @[to_additive
-      "Helper instance for when there's too many metavariables to apply\n`FunLike.hasCoeToFun`."]
+      "Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`."]
 instance : CoeFun (ContinuousMonoidHom A B) fun _ => A → B :=
   FunLike.hasCoeToFun
 
@@ -142,7 +140,7 @@ theorem toContinuousMap_injective : Injective (toContinuousMap : _ → C(A, B))
 
 -- porting note: Removed simps because given definition is not a constructor application
 /-- Construct a `ContinuousMonoidHom` from a `Continuous` `MonoidHom`. -/
-@[to_additive "Construct a `ContinuousAddMonoidHom` from a `continuous` `AddMonoidHom`."]
+@[to_additive "Construct a `ContinuousAddMonoidHom` from a `Continuous` `AddMonoidHom`."]
 def mk' (f : A →* B) (hf : Continuous f) : ContinuousMonoidHom A B :=
   { f with continuous_toFun := (hf : Continuous f.toFun)}
 #align continuous_monoid_hom.mk' ContinuousMonoidHom.mk'
@@ -385,7 +383,7 @@ theorem continuous_comp_right (f : ContinuousMonoidHom B C) :
 variable (E)
 
 /-- `ContinuousMonoidHom _ f` is a functor. -/
-@[to_additive "`continuous_add_monoid_hom _ f` is a functor."]
+@[to_additive "`ContinuousAddMonoidHom _ f` is a functor."]
 def compLeft (f : ContinuousMonoidHom A B) :
     ContinuousMonoidHom (ContinuousMonoidHom B E) (ContinuousMonoidHom A E) where
   toFun g := g.comp f
@@ -398,7 +396,7 @@ def compLeft (f : ContinuousMonoidHom A B) :
 variable (A) {E}
 
 /-- `ContinuousMonoidHom f _` is a functor. -/
-@[to_additive "`continuous_add_monoid_hom f _` is a functor."]
+@[to_additive "`ContinuousAddMonoidHom f _` is a functor."]
 def compRight {B : Type _} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B]
     (f : ContinuousMonoidHom B E) :
     ContinuousMonoidHom (ContinuousMonoidHom A B) (ContinuousMonoidHom A E) where
@@ -471,20 +469,19 @@ theorem map_comp (g : ContinuousMonoidHom B C) (f : ContinuousMonoidHom A B) :
 
 
 @[simp]
--- porting note: Renamed to map_mul', since it shadows the underlying lemma used.
-theorem map_mul' (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
+nonrec theorem map_mul (f g : ContinuousMonoidHom A E) : map (f * g) = map f * map g :=
   ext fun x => ext fun y => map_mul x (f y) (g y)
-#align pontryagin_dual.map_mul PontryaginDual.map_mul'
+#align pontryagin_dual.map_mul PontryaginDual.map_mul
 
 variable (A B C D E)
 
-/-- `continuous_monoid_hom.dual` as a `ContinuousMonoidHom`. -/
+/-- `ContinuousMonoidHom.dual` as a `ContinuousMonoidHom`. -/
 noncomputable def mapHom [LocallyCompactSpace E] :
     ContinuousMonoidHom (ContinuousMonoidHom A E)
       (ContinuousMonoidHom (PontryaginDual E) (PontryaginDual A)) where
   toFun := map
   map_one' := map_one
-  map_mul' := map_mul'
+  map_mul' := map_mul
   continuous_toFun := continuous_of_continuous_uncurry _ continuous_comp
 #align pontryagin_dual.map_hom PontryaginDual.mapHom
 
style: allow _ for an argument in notation3 & replace _foo with _ in notation3 (#4652)
Diff
@@ -299,7 +299,7 @@ theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
       suffices
         Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
           ({ f | f '' {1} ⊆ {1}ᶜ } ∪
-              ⋃ (x) (y) (U) (V) (W) (_hU : IsOpen U) (_hV : IsOpen V) (_hW : IsOpen W) (_h :
+              ⋃ (x) (y) (U) (V) (W) (_ : IsOpen U) (_ : IsOpen V) (_ : IsOpen W) (_ :
                 Disjoint (U * V) W),
                 { f | f '' {x} ⊆ U } ∩ { f | f '' {y} ⊆ V } ∩ { f | f '' {x * y} ⊆ W } :
                   Set C(A , B))ᶜ by
feat: port Topology.Algebra.ContinuousMonoidHom (#4162)

Dependencies 12 + 719

720 files ported (98.4%)
316326 lines ported (98.3%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file