topology.algebra.continuous_monoid_hom
⟷
Mathlib.Topology.Algebra.PontryaginDual
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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 => ⟨_, _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -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 /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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 _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -24,7 +24,7 @@ This file defines the space of continuous homomorphisms between two topological
-/
-open Pointwise
+open scoped Pointwise
open Function
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -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 ↦ ?_
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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))
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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 :=
@@ -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
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.
@@ -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]
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>
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>
@@ -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
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.
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]
.
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_param
s, [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 sometimesThis 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.
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 outParam
s 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.)
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>
@@ -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
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>
@@ -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
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
@@ -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
@@ -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
@@ -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
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file