topology.sheaves.sheaf_condition.equalizer_products
⟷
Mathlib.Topology.Sheaves.SheafCondition.EqualizerProducts
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -254,13 +254,13 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.left i j))
- dsimp at h
+ dsimp at h
simpa using h
· ext ⟨i, j⟩; dsimp [sheaf_condition_equalizer_products.right_res]
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.right i j))
- dsimp at h
+ dsimp at h
simpa using h
· ext i; dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app, CategoryTheory.Functor.map_id,
@@ -318,16 +318,16 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
· dsimp; erw [F.map_id]; simp
· dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.left
- dsimp [sheaf_condition_equalizer_products.left_res] at h
- simp only [category.id_comp] at h
+ dsimp [sheaf_condition_equalizer_products.left_res] at h
+ simp only [category.id_comp] at h
have h' := h =≫ pi.π _ (i, j)
rw [h']
simp only [category.assoc, limit.lift_π, fan.mk_π_app]
rfl
· dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.right
- dsimp [sheaf_condition_equalizer_products.right_res] at h
- simp only [category.id_comp] at h
+ dsimp [sheaf_condition_equalizer_products.right_res] at h
+ simp only [category.id_comp] at h
have h' := h =≫ pi.π _ (j, i)
rw [h']
simp
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathbin.CategoryTheory.Limits.Shapes.Equalizers
-import Mathbin.CategoryTheory.Limits.Shapes.Products
-import Mathbin.Topology.Sheaves.SheafCondition.PairwiseIntersections
+import CategoryTheory.Limits.Shapes.Equalizers
+import CategoryTheory.Limits.Shapes.Products
+import Topology.Sheaves.SheafCondition.PairwiseIntersections
#align_import topology.sheaves.sheaf_condition.equalizer_products from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module topology.sheaves.sheaf_condition.equalizer_products
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.Shapes.Equalizers
import Mathbin.CategoryTheory.Limits.Shapes.Products
import Mathbin.Topology.Sheaves.SheafCondition.PairwiseIntersections
+#align_import topology.sheaves.sheaf_condition.equalizer_products from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
+
/-!
# The sheaf condition in terms of an equalizer of products
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -87,18 +87,23 @@ def rightRes : piOpens F U ⟶ piInters.{v'} F U :=
#align Top.presheaf.sheaf_condition_equalizer_products.right_res TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes
-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.res /-
/-- The morphism `F.obj U ⟶ Π F.obj (U i)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
def res : F.obj (op (iSup U)) ⟶ piOpens.{v'} F U :=
Pi.lift fun i : ι => F.map (TopologicalSpace.Opens.leSupr U i).op
#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.res
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.res_π /-
@[simp, elementwise]
theorem res_π (i : ι) : res F U ≫ limit.π _ ⟨i⟩ = F.map (Opens.leSupr U i).op := by
rw [res, limit.lift_π, fan.mk_π_app]
#align Top.presheaf.sheaf_condition_equalizer_products.res_π TopCat.Presheaf.SheafConditionEqualizerProducts.res_π
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.w /-
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U :=
by
@@ -109,6 +114,7 @@ theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U :=
rw [← F.map_comp]
congr
#align Top.presheaf.sheaf_condition_equalizer_products.w TopCat.Presheaf.SheafConditionEqualizerProducts.w
+-/
#print TopCat.Presheaf.SheafConditionEqualizerProducts.diagram /-
/-- The equalizer diagram for the sheaf condition.
@@ -128,41 +134,54 @@ def fork : Fork.{v} (leftRes F U) (rightRes F U) :=
#align Top.presheaf.sheaf_condition_equalizer_products.fork TopCat.Presheaf.SheafConditionEqualizerProducts.fork
-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt /-
@[simp]
theorem fork_pt : (fork F U).pt = F.obj (op (iSup U)) :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι /-
@[simp]
theorem fork_ι : (fork F U).ι = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_ι TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero /-
@[simp]
theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallelPair.zero = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_one /-
@[simp]
theorem fork_π_app_walkingParallelPair_one :
(fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_one TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_one
+-/
variable {F} {G : Presheaf C X}
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso /-
/-- Isomorphic presheaves have isomorphic `pi_opens` for any cover `U`. -/
@[simp]
def piOpens.isoOfIso (α : F ≅ G) : piOpens F U ≅ piOpens.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso /-
/-- Isomorphic presheaves have isomorphic `pi_inters` for any cover `U`. -/
@[simp]
def piInters.isoOfIso (α : F ≅ G) : piInters F U ≅ piInters.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso /-
/-- Isomorphic presheaves have isomorphic sheaf condition diagrams. -/
def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
NatIso.ofComponents (by rintro ⟨⟩; exact pi_opens.iso_of_iso U α; exact pi_inters.iso_of_iso U α)
@@ -173,7 +192,9 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
· ext; simp [right_res]
· simp)
#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIso /-
/-- If `F G : presheaf C X` are isomorphic presheaves,
then the `fork F U`, the canonical cone of the sheaf condition diagram for `F`,
is isomorphic to `fork F G` postcomposed with the corresponding isomorphism between
@@ -189,6 +210,7 @@ def fork.isoOfIso (α : F ≅ G) :
-- Ugh, `simp` can't unfold abbreviations.
simp [res, diagram.iso_of_iso]
#align Top.presheaf.sheaf_condition_equalizer_products.fork.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIso
+-/
end SheafConditionEqualizerProducts
@@ -213,6 +235,7 @@ namespace SheafConditionPairwiseIntersections
open CategoryTheory.Pairwise CategoryTheory.Pairwise.Hom
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
@@ -248,11 +271,13 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj
+-/
section
attribute [local tidy] tactic.case_bash
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctor :
@@ -267,9 +292,11 @@ def coneEquivFunctor :
simp only [limits.fan.mk_π_app, limits.cone_morphism.w, limits.limit.lift_π,
category.assoc, cone_equiv_functor_obj_π_app] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor
+-/
end
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
@@ -310,7 +337,9 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
rfl
· dsimp; erw [F.map_id]; simp }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
+-/
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverse :
@@ -329,7 +358,9 @@ def coneEquivInverse :
· dsimp
rw [← f.w walking_parallel_pair.one, category.assoc] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse
+-/
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
@@ -352,13 +383,16 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
ext
simp only [category.comp_id, limits.cone.category_comp_hom, limits.cone.category_id_hom]
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
+-/
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIso :
𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U :=
NatIso.ofComponents (coneEquivUnitIsoApp F U) (by tidy)
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso
+-/
#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@@ -390,6 +424,7 @@ def coneEquivCounitIso :
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_counit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso
-/
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv /-
/--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@@ -402,10 +437,12 @@ def coneEquiv :
unitIso := coneEquivUnitIso F U
counitIso := coneEquivCounitIso F U
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv
+-/
attribute [local reducible] sheaf_condition_equalizer_products.res
sheaf_condition_equalizer_products.left_res
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork /-
/-- If `sheaf_condition_equalizer_products.fork` is an equalizer,
then `F.map_cone (cone U)` is a limit cone.
-/
@@ -439,7 +476,9 @@ def isLimitMapConeOfIsLimitSheafConditionFork
hom_inv_id' := by ext; dsimp; simp only [category.comp_id]
inv_hom_id' := by ext; dsimp; simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
+-/
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone /-
/-- If `F.map_cone (cone U)` is a limit cone,
then `sheaf_condition_equalizer_products.fork` is an equalizer.
-/
@@ -469,6 +508,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
hom_inv_id' := by ext; dsimp; simp only [category.comp_id]
inv_hom_id' := by ext; dsimp; simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone
+-/
end SheafConditionPairwiseIntersections
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -234,13 +234,13 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.left i j))
- dsimp at h
+ dsimp at h
simpa using h
· ext ⟨i, j⟩; dsimp [sheaf_condition_equalizer_products.right_res]
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.right i j))
- dsimp at h
+ dsimp at h
simpa using h
· ext i; dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app, CategoryTheory.Functor.map_id,
@@ -294,16 +294,16 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
· dsimp; erw [F.map_id]; simp
· dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.left
- dsimp [sheaf_condition_equalizer_products.left_res] at h
- simp only [category.id_comp] at h
+ dsimp [sheaf_condition_equalizer_products.left_res] at h
+ simp only [category.id_comp] at h
have h' := h =≫ pi.π _ (i, j)
rw [h']
simp only [category.assoc, limit.lift_π, fan.mk_π_app]
rfl
· dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.right
- dsimp [sheaf_condition_equalizer_products.right_res] at h
- simp only [category.id_comp] at h
+ dsimp [sheaf_condition_equalizer_products.right_res] at h
+ simp only [category.id_comp] at h
have h' := h =≫ pi.π _ (j, i)
rw [h']
simp
@@ -403,8 +403,8 @@ def coneEquiv :
counitIso := coneEquivCounitIso F U
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv
-attribute [local reducible]
- sheaf_condition_equalizer_products.res sheaf_condition_equalizer_products.left_res
+attribute [local reducible] sheaf_condition_equalizer_products.res
+ sheaf_condition_equalizer_products.left_res
/-- If `sheaf_condition_equalizer_products.fork` is an equalizer,
then `F.map_cone (cone U)` is a limit cone.
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -87,12 +87,6 @@ def rightRes : piOpens F U ⟶ piInters.{v'} F U :=
#align Top.presheaf.sheaf_condition_equalizer_products.right_res TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes
-/
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.res -> TopCat.Presheaf.SheafConditionEqualizerProducts.res is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopologicalSpace.Opens.setLike.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))))) C _inst_1 F (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (ConditionallyCompleteLattice.toHasSup.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (TopologicalSpace.Opens.completeLattice.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))) ι U))) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.res._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))) C _inst_1 F) (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (ConditionallyCompleteLattice.toSupSet.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)))) ι U))) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.resₓ'. -/
/-- The morphism `F.obj U ⟶ Π F.obj (U i)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
@@ -100,17 +94,11 @@ def res : F.obj (op (iSup U)) ⟶ piOpens.{v'} F U :=
Pi.lift fun i : ι => F.map (TopologicalSpace.Opens.leSupr U i).op
#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.res
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.res_π -> TopCat.Presheaf.SheafConditionEqualizerProducts.res_π is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.res_π TopCat.Presheaf.SheafConditionEqualizerProducts.res_πₓ'. -/
@[simp, elementwise]
theorem res_π (i : ι) : res F U ≫ limit.π _ ⟨i⟩ = F.map (Opens.leSupr U i).op := by
rw [res, limit.lift_π, fan.mk_π_app]
#align Top.presheaf.sheaf_condition_equalizer_products.res_π TopCat.Presheaf.SheafConditionEqualizerProducts.res_π
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.w -> TopCat.Presheaf.SheafConditionEqualizerProducts.w is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.w TopCat.Presheaf.SheafConditionEqualizerProducts.wₓ'. -/
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U :=
by
@@ -140,36 +128,21 @@ def fork : Fork.{v} (leftRes F U) (rightRes F U) :=
#align Top.presheaf.sheaf_condition_equalizer_products.fork TopCat.Presheaf.SheafConditionEqualizerProducts.fork
-/
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_X -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), Eq.{succ u3} C (CategoryTheory.Limits.Cone.pt.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_1.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_2.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_3.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_4.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U)) (TopCat.Presheaf.SheafConditionEqualizerProducts.fork.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopologicalSpace.Opens.setLike.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))))) C _inst_1 F (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (ConditionallyCompleteLattice.toHasSup.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (TopologicalSpace.Opens.completeLattice.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))) ι U)))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), Eq.{succ u3} C (CategoryTheory.Limits.Cone.pt.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (TopCat.Presheaf.SheafConditionEqualizerProducts.fork.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))) C _inst_1 F) (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (ConditionallyCompleteLattice.toSupSet.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)))) ι U)))
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ptₓ'. -/
@[simp]
theorem fork_pt : (fork F U).pt = F.obj (op (iSup U)) :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_ι -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_ι TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ιₓ'. -/
@[simp]
theorem fork_ι : (fork F U).ι = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_ι TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zeroₓ'. -/
@[simp]
theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallelPair.zero = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_one -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_one is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_one TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_oneₓ'. -/
@[simp]
theorem fork_π_app_walkingParallelPair_one :
(fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U :=
@@ -178,36 +151,18 @@ theorem fork_π_app_walkingParallelPair_one :
variable {F} {G : Presheaf C X}
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic `pi_opens` for any cover `U`. -/
@[simp]
def piOpens.isoOfIso (α : F ≅ G) : piOpens F U ≅ piOpens.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic `pi_inters` for any cover `U`. -/
@[simp]
def piInters.isoOfIso (α : F ≅ G) : piInters F U ≅ piInters.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, max u2 u3} (CategoryTheory.Functor.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, max u3 u2} (CategoryTheory.Functor.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic sheaf condition diagrams. -/
def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
NatIso.ofComponents (by rintro ⟨⟩; exact pi_opens.iso_of_iso U α; exact pi_inters.iso_of_iso U α)
@@ -219,9 +174,6 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
· simp)
#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso
-/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIsoₓ'. -/
/-- If `F G : presheaf C X` are isomorphic presheaves,
then the `fork F U`, the canonical cone of the sheaf condition diagram for `F`,
is isomorphic to `fork F G` postcomposed with the corresponding isomorphism between
@@ -261,9 +213,6 @@ namespace SheafConditionPairwiseIntersections
open CategoryTheory.Pairwise CategoryTheory.Pairwise.Hom
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor_obj -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObjₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
@@ -304,9 +253,6 @@ section
attribute [local tidy] tactic.case_bash
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctor :
@@ -324,9 +270,6 @@ def coneEquivFunctor :
end
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObjₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
@@ -368,9 +311,6 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
· dsimp; erw [F.map_id]; simp }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverse :
@@ -390,9 +330,6 @@ def coneEquivInverse :
rw [← f.w walking_parallel_pair.one, category.assoc] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoAppₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
@@ -416,9 +353,6 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
simp only [category.comp_id, limits.cone.category_comp_hom, limits.cone.category_id_hom]
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIso :
@@ -456,9 +390,6 @@ def coneEquivCounitIso :
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_counit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso
-/
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivₓ'. -/
/--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@@ -475,9 +406,6 @@ def coneEquiv :
attribute [local reducible]
sheaf_condition_equalizer_products.res sheaf_condition_equalizer_products.left_res
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork -> TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionForkₓ'. -/
/-- If `sheaf_condition_equalizer_products.fork` is an equalizer,
then `F.map_cone (cone U)` is a limit cone.
-/
@@ -512,9 +440,6 @@ def isLimitMapConeOfIsLimitSheafConditionFork
inv_hom_id' := by ext; dsimp; simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
-/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone -> TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapConeₓ'. -/
/-- If `F.map_cone (cone U)` is a limit cone,
then `sheaf_condition_equalizer_products.fork` is an equalizer.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -214,10 +214,8 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
(by
rintro ⟨⟩ ⟨⟩ ⟨⟩
· simp
- · ext
- simp [left_res]
- · ext
- simp [right_res]
+ · ext; simp [left_res]
+ · ext; simp [right_res]
· simp)
#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso
@@ -278,28 +276,24 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
(Pi.lift fun b : ι × ι => c.π.app (op (pair b.1 b.2)))
naturality' := fun Y Z f => by
cases Y <;> cases Z <;> cases f
- · ext i
- dsimp
+ · ext i; dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app, CategoryTheory.Functor.map_id,
category.assoc]
dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app]
- · ext ⟨i, j⟩
- dsimp [sheaf_condition_equalizer_products.left_res]
+ · ext ⟨i, j⟩; dsimp [sheaf_condition_equalizer_products.left_res]
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.left i j))
dsimp at h
simpa using h
- · ext ⟨i, j⟩
- dsimp [sheaf_condition_equalizer_products.right_res]
+ · ext ⟨i, j⟩; dsimp [sheaf_condition_equalizer_products.right_res]
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
have h := c.π.naturality (Quiver.Hom.op (hom.right i j))
dsimp at h
simpa using h
- · ext i
- dsimp
+ · ext i; dsimp
simp only [limit.lift_π, category.id_comp, fan.mk_π_app, CategoryTheory.Functor.map_id,
category.assoc]
dsimp
@@ -323,7 +317,7 @@ def coneEquivFunctor :
{ Hom := f.Hom
w' := fun j => by
cases j <;>
- · ext
+ · ext;
simp only [limits.fan.mk_π_app, limits.cone_morphism.w, limits.limit.lift_π,
category.assoc, cone_equiv_functor_obj_π_app] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor
@@ -354,11 +348,8 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
generalize f.unop = f'
rintro rfl
rcases x with (⟨i⟩ | ⟨⟩) <;> rcases y with (⟨⟩ | ⟨j, j⟩) <;> rcases f' with ⟨⟩
- · dsimp
- erw [F.map_id]
- simp
- · dsimp
- simp only [category.id_comp, category.assoc]
+ · dsimp; erw [F.map_id]; simp
+ · dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.left
dsimp [sheaf_condition_equalizer_products.left_res] at h
simp only [category.id_comp] at h
@@ -366,8 +357,7 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
rw [h']
simp only [category.assoc, limit.lift_π, fan.mk_π_app]
rfl
- · dsimp
- simp only [category.id_comp, category.assoc]
+ · dsimp; simp only [category.id_comp, category.assoc]
have h := c.π.naturality walking_parallel_pair_hom.right
dsimp [sheaf_condition_equalizer_products.right_res] at h
simp only [category.id_comp] at h
@@ -375,9 +365,7 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
rw [h']
simp
rfl
- · dsimp
- erw [F.map_id]
- simp }
+ · dsimp; erw [F.map_id]; simp }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse is a dubious translation:
@@ -414,14 +402,12 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
{ Hom := 𝟙 _
w' := fun j => by induction j using Opposite.rec';
rcases j with ⟨⟩ <;>
- · dsimp
- simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
+ · dsimp; simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
inv :=
{ Hom := 𝟙 _
w' := fun j => by induction j using Opposite.rec';
rcases j with ⟨⟩ <;>
- · dsimp
- simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
+ · dsimp; simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
hom_inv_id' := by
ext
simp only [category.comp_id, limits.cone.category_comp_hom, limits.cone.category_id_hom]
@@ -452,34 +438,21 @@ def coneEquivCounitIso :
{ Hom := 𝟙 _
w' := by
rintro ⟨_ | _⟩
- · ext ⟨j⟩
- dsimp
+ · ext ⟨j⟩; dsimp;
simp only [category.id_comp, limits.fan.mk_π_app, limits.limit.lift_π]
- · ext ⟨i, j⟩
- dsimp
+ · ext ⟨i, j⟩; dsimp;
simp only [category.id_comp, limits.fan.mk_π_app, limits.limit.lift_π] }
inv :=
{ Hom := 𝟙 _
w' := by
rintro ⟨_ | _⟩
- · ext ⟨j⟩
- dsimp
+ · ext ⟨j⟩; dsimp;
simp only [category.id_comp, limits.fan.mk_π_app, limits.limit.lift_π]
- · ext ⟨i, j⟩
- dsimp
+ · ext ⟨i, j⟩; dsimp;
simp only [category.id_comp, limits.fan.mk_π_app, limits.limit.lift_π] }
- hom_inv_id' := by
- ext
- dsimp
- simp only [category.comp_id]
- inv_hom_id' := by
- ext
- dsimp
- simp only [category.comp_id] })
- fun c d f => by
- ext
- dsimp
- simp only [category.comp_id, category.id_comp]
+ hom_inv_id' := by ext; dsimp; simp only [category.comp_id]
+ inv_hom_id' := by ext; dsimp; simp only [category.comp_id] })
+ fun c d f => by ext; dsimp; simp only [category.comp_id, category.id_comp]
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_counit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso
-/
@@ -517,9 +490,7 @@ def isLimitMapConeOfIsLimitSheafConditionFork
intro x
induction x using Opposite.rec'
rcases x with ⟨⟩
- · dsimp
- simp
- rfl
+ · dsimp; simp; rfl
· dsimp
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
@@ -531,22 +502,14 @@ def isLimitMapConeOfIsLimitSheafConditionFork
intro x
induction x using Opposite.rec'
rcases x with ⟨⟩
- · dsimp
- simp
- rfl
+ · dsimp; simp; rfl
· dsimp
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
rw [← F.map_comp]
rfl }
- hom_inv_id' := by
- ext
- dsimp
- simp only [category.comp_id]
- inv_hom_id' := by
- ext
- dsimp
- simp only [category.comp_id] }
+ hom_inv_id' := by ext; dsimp; simp only [category.comp_id]
+ inv_hom_id' := by ext; dsimp; simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone -> TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone is a dubious translation:
@@ -562,11 +525,8 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
{ Hom := 𝟙 _
w' := by
rintro ⟨⟩
- · dsimp
- simp
- rfl
- · dsimp
- ext ⟨i, j⟩
+ · dsimp; simp; rfl
+ · dsimp; ext ⟨i, j⟩
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
rw [← F.map_comp]
@@ -575,23 +535,14 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
{ Hom := 𝟙 _
w' := by
rintro ⟨⟩
- · dsimp
- simp
- rfl
- · dsimp
- ext ⟨i, j⟩
+ · dsimp; simp; rfl
+ · dsimp; ext ⟨i, j⟩
simp only [limit.lift_π, limit.lift_π_assoc, category.id_comp, fan.mk_π_app,
category.assoc]
rw [← F.map_comp]
rfl }
- hom_inv_id' := by
- ext
- dsimp
- simp only [category.comp_id]
- inv_hom_id' := by
- ext
- dsimp
- simp only [category.comp_id] }
+ hom_inv_id' := by ext; dsimp; simp only [category.comp_id]
+ inv_hom_id' := by ext; dsimp; simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone
end SheafConditionPairwiseIntersections
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module topology.sheaves.sheaf_condition.equalizer_products
-! leanprover-community/mathlib commit 85d6221d32c37e68f05b2e42cde6cee658dae5e9
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! 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.Sheaves.SheafCondition.PairwiseIntersections
/-!
# The sheaf condition in terms of an equalizer of products
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Here we set up the machinery for the "usual" definition of the sheaf condition,
e.g. as in https://stacks.math.columbia.edu/tag/0072
in terms of an equalizer diagram where the two objects are
@@ -50,32 +53,46 @@ namespace Presheaf
namespace SheafConditionEqualizerProducts
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens /-
/-- The product of the sections of a presheaf over a family of open sets. -/
def piOpens : C :=
∏ fun i : ι => F.obj (op (U i))
#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.piInters /-
/-- The product of the sections of a presheaf over the pairwise intersections of
a family of open sets.
-/
def piInters : C :=
∏ fun p : ι × ι => F.obj (op (U p.1 ⊓ U p.2))
#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters TopCat.Presheaf.SheafConditionEqualizerProducts.piInters
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes /-
/-- The morphism `Π F.obj (U i) ⟶ Π F.obj (U i) ⊓ (U j)` whose components
are given by the restriction maps from `U i` to `U i ⊓ U j`.
-/
def leftRes : piOpens F U ⟶ piInters.{v'} F U :=
Pi.lift fun p : ι × ι => Pi.π _ p.1 ≫ F.map (inf_le_left (U p.1) (U p.2)).op
#align Top.presheaf.sheaf_condition_equalizer_products.left_res TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes /-
/-- The morphism `Π F.obj (U i) ⟶ Π F.obj (U i) ⊓ (U j)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
def rightRes : piOpens F U ⟶ piInters.{v'} F U :=
Pi.lift fun p : ι × ι => Pi.π _ p.2 ≫ F.map (inf_le_right (U p.1) (U p.2)).op
#align Top.presheaf.sheaf_condition_equalizer_products.right_res TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes
+-/
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.res -> TopCat.Presheaf.SheafConditionEqualizerProducts.res is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopologicalSpace.Opens.setLike.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))))) C _inst_1 F (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (ConditionallyCompleteLattice.toHasSup.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (TopologicalSpace.Opens.completeLattice.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))) ι U))) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.res._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))) C _inst_1 F) (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (ConditionallyCompleteLattice.toSupSet.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)))) ι U))) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.resₓ'. -/
/-- The morphism `F.obj U ⟶ Π F.obj (U i)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
@@ -83,11 +100,17 @@ def res : F.obj (op (iSup U)) ⟶ piOpens.{v'} F U :=
Pi.lift fun i : ι => F.map (TopologicalSpace.Opens.leSupr U i).op
#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.res
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.res_π -> TopCat.Presheaf.SheafConditionEqualizerProducts.res_π is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.res_π TopCat.Presheaf.SheafConditionEqualizerProducts.res_πₓ'. -/
@[simp, elementwise]
theorem res_π (i : ι) : res F U ≫ limit.π _ ⟨i⟩ = F.map (Opens.leSupr U i).op := by
rw [res, limit.lift_π, fan.mk_π_app]
#align Top.presheaf.sheaf_condition_equalizer_products.res_π TopCat.Presheaf.SheafConditionEqualizerProducts.res_π
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.w -> TopCat.Presheaf.SheafConditionEqualizerProducts.w is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.w TopCat.Presheaf.SheafConditionEqualizerProducts.wₓ'. -/
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U :=
by
@@ -99,35 +122,54 @@ theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U :=
congr
#align Top.presheaf.sheaf_condition_equalizer_products.w TopCat.Presheaf.SheafConditionEqualizerProducts.w
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.diagram /-
/-- The equalizer diagram for the sheaf condition.
-/
@[reducible]
def diagram : WalkingParallelPair ⥤ C :=
parallelPair (leftRes.{v'} F U) (rightRes F U)
#align Top.presheaf.sheaf_condition_equalizer_products.diagram TopCat.Presheaf.SheafConditionEqualizerProducts.diagram
+-/
+#print TopCat.Presheaf.SheafConditionEqualizerProducts.fork /-
/-- The restriction map `F.obj U ⟶ Π F.obj (U i)` gives a cone over the equalizer diagram
for the sheaf condition. The sheaf condition asserts this cone is a limit cone.
-/
def fork : Fork.{v} (leftRes F U) (rightRes F U) :=
Fork.ofι _ (w F U)
#align Top.presheaf.sheaf_condition_equalizer_products.fork TopCat.Presheaf.SheafConditionEqualizerProducts.fork
+-/
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_X -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), Eq.{succ u3} C (CategoryTheory.Limits.Cone.pt.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_1.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_2.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_3.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.fork._proof_4.{u3, u2, u1} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J)) X F ι U)) (TopCat.Presheaf.SheafConditionEqualizerProducts.fork.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopologicalSpace.Opens.setLike.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))))) C _inst_1 F (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (ConditionallyCompleteLattice.toHasSup.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)) (TopologicalSpace.Opens.completeLattice.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X)))) ι U)))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} (F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), Eq.{succ u3} C (CategoryTheory.Limits.Cone.pt.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.leftRes.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.rightRes.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (TopCat.Presheaf.SheafConditionEqualizerProducts.fork.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (Opposite.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) (CategoryTheory.Category.opposite.{u1, u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (Preorder.smallCategory.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteSemilatticeInf.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))))))) C _inst_1 F) (Opposite.op.{succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (iSup.{u1, succ u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (ConditionallyCompleteLattice.toSupSet.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X)))) ι U)))
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ptₓ'. -/
@[simp]
theorem fork_pt : (fork F U).pt = F.obj (op (iSup U)) :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_ι -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_ι TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ιₓ'. -/
@[simp]
theorem fork_ι : (fork F U).ι = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_ι TopCat.Presheaf.SheafConditionEqualizerProducts.fork_ι
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zeroₓ'. -/
@[simp]
theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallelPair.zero = res F U :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_one -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_one is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_one TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_oneₓ'. -/
@[simp]
theorem fork_π_app_walkingParallelPair_one :
(fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U :=
@@ -136,18 +178,36 @@ theorem fork_π_app_walkingParallelPair_one :
variable {F} {G : Presheaf C X}
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic `pi_opens` for any cover `U`. -/
@[simp]
def piOpens.isoOfIso (α : F ≅ G) : piOpens F U ≅ piOpens.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic `pi_inters` for any cover `U`. -/
@[simp]
def piInters.isoOfIso (α : F ≅ G) : piInters F U ≅ piInters.{v'} G U :=
Pi.mapIso fun X => α.app _
#align Top.presheaf.sheaf_condition_equalizer_products.pi_inters.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piInters.isoOfIso
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u1 u2, max u3 u2 u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.Presheaf.category.{u2, u1, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, max u2 u3} (CategoryTheory.Functor.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso._proof_1.{u3, u2, u1} C _inst_1 _inst_2) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso._proof_2.{u3, u2, u1} C _inst_1 _inst_2) X G ι U))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_2 : CategoryTheory.Limits.HasProducts.{u1, u2, u3} C _inst_1] {X : TopCat.{u1}} {F : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {G : TopCat.Presheaf.{u1, u2, u3} C _inst_1 X}, (CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (TopCat.Presheaf.{u1, u2, u3} C _inst_1 X) (TopCat.instCategoryPresheaf.{u1, u2, u3} C _inst_1 X) F G) -> (CategoryTheory.Iso.{u2, max u3 u2} (CategoryTheory.Functor.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u2, 0, u3} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X F ι U) (TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.{u1, u2, u3} C _inst_1 (fun (J : Type.{u1}) => _inst_2 J) X G ι U))
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIsoₓ'. -/
/-- Isomorphic presheaves have isomorphic sheaf condition diagrams. -/
def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
NatIso.ofComponents (by rintro ⟨⟩; exact pi_opens.iso_of_iso U α; exact pi_inters.iso_of_iso U α)
@@ -161,6 +221,9 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
· simp)
#align Top.presheaf.sheaf_condition_equalizer_products.diagram.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.diagram.isoOfIso
+/- warning: Top.presheaf.sheaf_condition_equalizer_products.fork.iso_of_iso -> TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIso is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_equalizer_products.fork.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.fork.isoOfIsoₓ'. -/
/-- If `F G : presheaf C X` are isomorphic presheaves,
then the `fork F U`, the canonical cone of the sheaf condition diagram for `F`,
is isomorphic to `fork F G` postcomposed with the corresponding isomorphism between
@@ -179,6 +242,7 @@ def fork.isoOfIso (α : F ≅ G) :
end SheafConditionEqualizerProducts
+#print TopCat.Presheaf.IsSheafEqualizerProducts /-
/-- The sheaf condition for a `F : presheaf C X` requires that the morphism
`F.obj U ⟶ ∏ F.obj (U i)` (where `U` is some open set which is the union of the `U i`)
is the equalizer of the two morphisms
@@ -187,6 +251,7 @@ is the equalizer of the two morphisms
def IsSheafEqualizerProducts (F : Presheaf.{v', v, u} C X) : Prop :=
∀ ⦃ι : Type v'⦄ (U : ι → Opens X), Nonempty (IsLimit (SheafConditionEqualizerProducts.fork F U))
#align Top.presheaf.is_sheaf_equalizer_products TopCat.Presheaf.IsSheafEqualizerProducts
+-/
/-!
The remainder of this file shows that the equalizer_products sheaf condition is equivalent
@@ -198,6 +263,9 @@ namespace SheafConditionPairwiseIntersections
open CategoryTheory.Pairwise CategoryTheory.Pairwise.Hom
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor_obj -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObjₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
@@ -242,6 +310,9 @@ section
attribute [local tidy] tactic.case_bash
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctor is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_functor TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivFunctor :
@@ -259,6 +330,9 @@ def coneEquivFunctor :
end
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObjₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
@@ -306,6 +380,9 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
simp }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivInverse :
@@ -325,6 +402,9 @@ def coneEquivInverse :
rw [← f.w walking_parallel_pair.one, category.assoc] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoAppₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
@@ -350,6 +430,9 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
simp only [category.comp_id, limits.cone.category_comp_hom, limits.cone.category_id_hom]
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoₓ'. -/
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivUnitIso :
@@ -357,6 +440,7 @@ def coneEquivUnitIso :
NatIso.ofComponents (coneEquivUnitIsoApp F U) (by tidy)
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso
+#print TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso /-
/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
@[simps]
def coneEquivCounitIso :
@@ -397,7 +481,11 @@ def coneEquivCounitIso :
dsimp
simp only [category.comp_id, category.id_comp]
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_counit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivCounitIso
+-/
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv -> TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquiv is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivₓ'. -/
/--
Cones over `diagram U ⋙ F` are the same as a cones over the usual sheaf condition equalizer diagram.
-/
@@ -414,6 +502,9 @@ def coneEquiv :
attribute [local reducible]
sheaf_condition_equalizer_products.res sheaf_condition_equalizer_products.left_res
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork -> TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionForkₓ'. -/
/-- If `sheaf_condition_equalizer_products.fork` is an equalizer,
then `F.map_cone (cone U)` is a limit cone.
-/
@@ -458,6 +549,9 @@ def isLimitMapConeOfIsLimitSheafConditionFork
simp only [category.comp_id] }
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
+/- warning: Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone -> TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapConeₓ'. -/
/-- If `F.map_cone (cone U)` is a limit cone,
then `sheaf_condition_equalizer_products.fork` is an equalizer.
-/
@@ -504,6 +598,7 @@ end SheafConditionPairwiseIntersections
open SheafConditionPairwiseIntersections
+#print TopCat.Presheaf.isSheaf_iff_isSheafEqualizerProducts /-
/-- The sheaf condition in terms of an equalizer diagram is equivalent
to the default sheaf condition.
-/
@@ -513,6 +608,7 @@ theorem isSheaf_iff_isSheafEqualizerProducts (F : Presheaf C X) :
Iff.intro (fun h ι U => ⟨isLimitSheafConditionForkOfIsLimitMapCone F U (h U).some⟩) fun h ι U =>
⟨isLimitMapConeOfIsLimitSheafConditionFork F U (h U).some⟩
#align Top.presheaf.is_sheaf_iff_is_sheaf_equalizer_products TopCat.Presheaf.isSheaf_iff_isSheafEqualizerProducts
+-/
end Presheaf
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -79,7 +79,7 @@ def rightRes : piOpens F U ⟶ piInters.{v'} F U :=
/-- The morphism `F.obj U ⟶ Π F.obj (U i)` whose components
are given by the restriction maps from `U j` to `U i ⊓ U j`.
-/
-def res : F.obj (op (supᵢ U)) ⟶ piOpens.{v'} F U :=
+def res : F.obj (op (iSup U)) ⟶ piOpens.{v'} F U :=
Pi.lift fun i : ι => F.map (TopologicalSpace.Opens.leSupr U i).op
#align Top.presheaf.sheaf_condition_equalizer_products.res TopCat.Presheaf.SheafConditionEqualizerProducts.res
@@ -114,7 +114,7 @@ def fork : Fork.{v} (leftRes F U) (rightRes F U) :=
#align Top.presheaf.sheaf_condition_equalizer_products.fork TopCat.Presheaf.SheafConditionEqualizerProducts.fork
@[simp]
-theorem fork_pt : (fork F U).pt = F.obj (op (supᵢ U)) :=
+theorem fork_pt : (fork F U).pt = F.obj (op (iSup U)) :=
rfl
#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
mathlib commit https://github.com/leanprover-community/mathlib/commit/49b7f94aab3a3bdca1f9f34c5d818afb253b3993
@@ -267,14 +267,14 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
π :=
{ app := by
intro x
- induction x using Opposite.rec
+ induction x using Opposite.rec'
rcases x with (⟨i⟩ | ⟨i, j⟩)
· exact c.π.app walking_parallel_pair.zero ≫ pi.π _ i
· exact c.π.app walking_parallel_pair.one ≫ pi.π _ (i, j)
naturality' := by
intro x y f
- induction x using Opposite.rec
- induction y using Opposite.rec
+ induction x using Opposite.rec'
+ induction y using Opposite.rec'
have ef : f = f.unop.op := rfl
revert ef
generalize f.unop = f'
@@ -316,7 +316,7 @@ def coneEquivInverse :
{ Hom := f.Hom
w' := by
intro x
- induction x using Opposite.rec
+ induction x using Opposite.rec'
rcases x with (⟨i⟩ | ⟨i, j⟩)
· dsimp
dsimp only [fork.ι]
@@ -332,13 +332,13 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
where
Hom :=
{ Hom := 𝟙 _
- w' := fun j => by induction j using Opposite.rec;
+ w' := fun j => by induction j using Opposite.rec';
rcases j with ⟨⟩ <;>
· dsimp
simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
inv :=
{ Hom := 𝟙 _
- w' := fun j => by induction j using Opposite.rec;
+ w' := fun j => by induction j using Opposite.rec';
rcases j with ⟨⟩ <;>
· dsimp
simp only [limits.fan.mk_π_app, category.id_comp, limits.limit.lift_π] }
@@ -424,7 +424,7 @@ def isLimitMapConeOfIsLimitSheafConditionFork
{ Hom := 𝟙 _
w' := by
intro x
- induction x using Opposite.rec
+ induction x using Opposite.rec'
rcases x with ⟨⟩
· dsimp
simp
@@ -438,7 +438,7 @@ def isLimitMapConeOfIsLimitSheafConditionFork
{ Hom := 𝟙 _
w' := by
intro x
- induction x using Opposite.rec
+ induction x using Opposite.rec'
rcases x with ⟨⟩
· dsimp
simp
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -114,9 +114,9 @@ def fork : Fork.{v} (leftRes F U) (rightRes F U) :=
#align Top.presheaf.sheaf_condition_equalizer_products.fork TopCat.Presheaf.SheafConditionEqualizerProducts.fork
@[simp]
-theorem fork_x : (fork F U).x = F.obj (op (supᵢ U)) :=
+theorem fork_pt : (fork F U).pt = F.obj (op (supᵢ U)) :=
rfl
-#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_x
+#align Top.presheaf.sheaf_condition_equalizer_products.fork_X TopCat.Presheaf.SheafConditionEqualizerProducts.fork_pt
@[simp]
theorem fork_ι : (fork F U).ι = res F U :=
@@ -203,7 +203,7 @@ open CategoryTheory.Pairwise CategoryTheory.Pairwise.Hom
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
Cone (SheafConditionEqualizerProducts.diagram F U)
where
- x := c.x
+ pt := c.pt
π :=
{ app := fun Z =>
WalkingParallelPair.casesOn Z (Pi.lift fun i : ι => c.π.app (op (single i)))
@@ -263,7 +263,7 @@ end
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
Limits.Cone ((diagram U).op ⋙ F) where
- x := c.x
+ pt := c.pt
π :=
{ app := by
intro x
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
A mix of various changes; generated with a script and manually tweaked.
@@ -17,7 +17,7 @@ e.g. as in https://stacks.math.columbia.edu/tag/0072
in terms of an equalizer diagram where the two objects are
`∏ F.obj (U i)` and `∏ F.obj (U i) ⊓ (U j)`.
-We show that this sheaf condition is equivalent to the `pairwise_intersections` sheaf condition when
+We show that this sheaf condition is equivalent to the "pairwise intersections" sheaf condition when
the presheaf is valued in a category with products, and thereby equivalent to the default sheaf
condition.
-/
@@ -211,8 +211,8 @@ set_option linter.uppercaseLean3 false in
#align Top.presheaf.is_sheaf_equalizer_products TopCat.Presheaf.IsSheafEqualizerProducts
/-!
-The remainder of this file shows that the equalizer_products sheaf condition is equivalent
-to the pairwise_intersections sheaf condition.
+The remainder of this file shows that the "equalizer products" sheaf condition is equivalent
+to the "pairwise intersections" sheaf condition.
-/
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -32,7 +32,6 @@ open CategoryTheory CategoryTheory.Limits TopologicalSpace Opposite TopologicalS
namespace TopCat
variable {C : Type u} [Category.{v} C] [HasProducts.{v'} C]
-
variable {X : TopCat.{v'}} (F : Presheaf C X) {ι : Type v'} (U : ι → Opens X)
namespace Presheaf
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.
@@ -86,7 +86,7 @@ set_option linter.uppercaseLean3 false in
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U := by
dsimp [res, leftRes, rightRes]
- -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [limit.lift_π, limit.lift_π_assoc, Fan.mk_π_app, Category.assoc]
@@ -130,7 +130,7 @@ theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallel
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
--- Porting note : Shortcut simplifier
+-- Porting note: Shortcut simplifier
@[simp (high)]
theorem fork_π_app_walkingParallelPair_one :
(fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U :=
@@ -160,14 +160,14 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
(by
rintro ⟨⟩ ⟨⟩ ⟨⟩
· simp
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [leftRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_left,
Functor.mapIso_hom, lim_map, limit.lift_map, limit.lift_π, Cones.postcompose_obj_π,
NatTrans.comp_app, Fan.mk_π_app, Discrete.natIso_hom_app, Iso.app_hom, Category.assoc,
NatTrans.naturality, limMap_π_assoc]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [rightRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_right,
@@ -187,7 +187,7 @@ def fork.isoOfIso (α : F ≅ G) :
fork F U ≅ (Cones.postcompose (diagram.isoOfIso U α).inv).obj (fork G U) := by
fapply Fork.ext
· apply α.app
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
dsimp only [Fork.ι]
@@ -232,7 +232,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
(Pi.lift fun b : ι × ι => c.π.app (op (pair b.1 b.2)))
naturality := fun Y Z f => by
cases Y <;> cases Z <;> cases f
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun i => ?_
dsimp
@@ -240,7 +240,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
Category.assoc]
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.leftRes]
@@ -249,7 +249,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.left i j))
dsimp at h
simpa using h
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.rightRes]
@@ -258,7 +258,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.right i j))
dsimp at h
simpa using h
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun i => ?_
dsimp
@@ -281,7 +281,7 @@ def coneEquivFunctor :
{ hom := f.hom
w := fun j => by
cases j <;>
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun i => ?_
simp only [Limits.Fan.mk_π_app, Limits.ConeMorphism.w, Limits.limit.lift_π,
@@ -400,12 +400,12 @@ def coneEquivCounitIso :
{ hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
@@ -414,12 +414,12 @@ def coneEquivCounitIso :
{ hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
@@ -498,7 +498,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
rintro ⟨⟩
· simp
rfl
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
@@ -513,7 +513,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
rintro ⟨⟩
· simp
rfl
- · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ · -- Porting note: `ext` can't see `limit.hom_ext` applies here:
-- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
@@ -278,7 +278,7 @@ def coneEquivFunctor :
where
obj c := coneEquivFunctorObj F U c
map {c c'} f :=
- { Hom := f.Hom
+ { hom := f.hom
w := fun j => by
cases j <;>
· -- Porting note : `ext` can't see `limit.hom_ext` applies here:
@@ -346,7 +346,7 @@ def coneEquivInverse :
where
obj c := coneEquivInverseObj F U c
map {c c'} f :=
- { Hom := f.Hom
+ { hom := f.hom
w := by
intro x
induction x using Opposite.rec' with | h x => ?_
@@ -365,14 +365,14 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
(𝟭 (Cone ((diagram U).op ⋙ F))).obj c ≅ (coneEquivFunctor F U ⋙ coneEquivInverse F U).obj c
where
hom :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := fun j => by
induction j using Opposite.rec' with | h j => ?_;
rcases j with ⟨⟩ <;>
· dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
inv :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := fun j => by
induction j using Opposite.rec' with | h j => ?_;
rcases j with ⟨⟩ <;>
@@ -397,7 +397,7 @@ def coneEquivCounitIso :
NatIso.ofComponents
(fun c =>
{ hom :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
· -- Porting note : `ext` can't see `limit.hom_ext` applies here:
@@ -411,7 +411,7 @@ def coneEquivCounitIso :
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
inv :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
· -- Porting note : `ext` can't see `limit.hom_ext` applies here:
@@ -456,7 +456,7 @@ def isLimitMapConeOfIsLimitSheafConditionFork
(P : IsLimit (SheafConditionEqualizerProducts.fork F U)) : IsLimit (F.mapCone (cocone U).op) :=
IsLimit.ofIsoLimit ((IsLimit.ofConeEquiv (coneEquiv F U).symm).symm P)
{ hom :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
intro x
induction x with | h x => ?_
@@ -470,7 +470,7 @@ def isLimitMapConeOfIsLimitSheafConditionFork
rw [← F.map_comp]
rfl }
inv :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
intro x
induction x with | h x => ?_
@@ -493,7 +493,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
IsLimit (SheafConditionEqualizerProducts.fork F U) :=
IsLimit.ofIsoLimit ((IsLimit.ofConeEquiv (coneEquiv F U)).symm Q)
{ hom :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
rintro ⟨⟩
· simp
@@ -508,7 +508,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
rw [← F.map_comp]
rfl }
inv :=
- { Hom := 𝟙 _
+ { hom := 𝟙 _
w := by
rintro ⟨⟩
· simp
@@ -2,16 +2,13 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module topology.sheaves.sheaf_condition.equalizer_products
-! leanprover-community/mathlib commit 85d6221d32c37e68f05b2e42cde6cee658dae5e9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.Shapes.Equalizers
import Mathlib.CategoryTheory.Limits.Shapes.Products
import Mathlib.Topology.Sheaves.SheafCondition.PairwiseIntersections
+#align_import topology.sheaves.sheaf_condition.equalizer_products from "leanprover-community/mathlib"@"85d6221d32c37e68f05b2e42cde6cee658dae5e9"
+
/-!
# The sheaf condition in terms of an equalizer of products
@@ -89,7 +89,8 @@ set_option linter.uppercaseLean3 false in
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U := by
dsimp [res, leftRes, rightRes]
- -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [limit.lift_π, limit.lift_π_assoc, Fan.mk_π_app, Category.assoc]
rw [← F.map_comp]
@@ -162,13 +163,15 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
(by
rintro ⟨⟩ ⟨⟩ ⟨⟩
· simp
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [leftRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_left,
Functor.mapIso_hom, lim_map, limit.lift_map, limit.lift_π, Cones.postcompose_obj_π,
NatTrans.comp_app, Fan.mk_π_app, Discrete.natIso_hom_app, Iso.app_hom, Category.assoc,
NatTrans.naturality, limMap_π_assoc]
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
simp only [rightRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_right,
Functor.mapIso_hom, lim_map, limit.lift_map, limit.lift_π, Cones.postcompose_obj_π,
@@ -187,7 +190,8 @@ def fork.isoOfIso (α : F ≅ G) :
fork F U ≅ (Cones.postcompose (diagram.isoOfIso U α).inv).obj (fork G U) := by
fapply Fork.ext
· apply α.app
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext (fun _ => ?_)
dsimp only [Fork.ι]
-- Ugh, `simp` can't unfold abbreviations.
@@ -231,14 +235,16 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
(Pi.lift fun b : ι × ι => c.π.app (op (pair b.1 b.2)))
naturality := fun Y Z f => by
cases Y <;> cases Z <;> cases f
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun i => ?_
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app, CategoryTheory.Functor.map_id,
Category.assoc]
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app]
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.leftRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
@@ -246,7 +252,8 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.left i j))
dsimp at h
simpa using h
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.rightRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
@@ -254,7 +261,8 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.right i j))
dsimp at h
simpa using h
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun i => ?_
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app, CategoryTheory.Functor.map_id,
@@ -276,7 +284,9 @@ def coneEquivFunctor :
{ Hom := f.Hom
w := fun j => by
cases j <;>
- · refine limit.hom_ext fun i => ?_
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
+ refine limit.hom_ext fun i => ?_
simp only [Limits.Fan.mk_π_app, Limits.ConeMorphism.w, Limits.limit.lift_π,
Category.assoc, coneEquivFunctorObj_π_app] }
set_option linter.uppercaseLean3 false in
@@ -371,12 +381,6 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
rcases j with ⟨⟩ <;>
· dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
- hom_inv_id := by
- ext
- simp only [Category.comp_id, (. ≫ .), (𝟙 .)]
- inv_hom_id := by
- ext
- simp only [Category.comp_id, (. ≫ .), (𝟙 .)]
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
@@ -399,11 +403,13 @@ def coneEquivCounitIso :
{ Hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
@@ -411,22 +417,16 @@ def coneEquivCounitIso :
{ Hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
- simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
- hom_inv_id := by
- ext
- dsimp
- simp only [Category.comp_id]
- inv_hom_id := by
- ext
- dsimp
- simp only [Category.comp_id] })
+ simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] } })
fun {c d} f => by
ext
dsimp
@@ -462,10 +462,9 @@ def isLimitMapConeOfIsLimitSheafConditionFork
{ Hom := 𝟙 _
w := by
intro x
- induction x using Opposite.rec' with | h x => ?_
+ induction x with | h x => ?_
rcases x with ⟨⟩
- · dsimp
- simp
+ · simp
rfl
· dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
@@ -477,25 +476,16 @@ def isLimitMapConeOfIsLimitSheafConditionFork
{ Hom := 𝟙 _
w := by
intro x
- induction x using Opposite.rec' with | h x => ?_
+ induction x with | h x => ?_
rcases x with ⟨⟩
- · dsimp
- simp
+ · simp
rfl
· dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
Category.assoc]
rw [← F.map_comp]
- rfl }
- hom_inv_id := by
- ext
- dsimp
- simp only [Category.comp_id]
- inv_hom_id := by
- ext
- dsimp
- simp only [Category.comp_id] }
+ rfl } }
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
@@ -509,11 +499,10 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
{ Hom := 𝟙 _
w := by
rintro ⟨⟩
- · dsimp
- simp
+ · simp
rfl
- · dsimp
- -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
@@ -525,26 +514,17 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
{ Hom := 𝟙 _
w := by
rintro ⟨⟩
- · dsimp
- simp
+ · simp
rfl
- · dsimp
- -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : `ext` can't see `limit.hom_ext` applies here:
+ -- See https://github.com/leanprover-community/mathlib4/issues/5229
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
Category.assoc]
rw [← F.map_comp]
- rfl }
- hom_inv_id := by
- ext
- dsimp
- simp only [Category.comp_id]
- inv_hom_id := by
- ext
- dsimp
- simp only [Category.comp_id] }
+ rfl } }
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_sheaf_condition_fork_of_is_limit_map_cone TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitSheafConditionForkOfIsLimitMapCone
@@ -132,7 +132,7 @@ theorem fork_π_app_walkingParallelPair_zero : (fork F U).π.app WalkingParallel
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_equalizer_products.fork_π_app_walking_parallel_pair_zero TopCat.Presheaf.SheafConditionEqualizerProducts.fork_π_app_walkingParallelPair_zero
--- Porting note : Shortcut simplifer
+-- Porting note : Shortcut simplifier
@[simp (high)]
theorem fork_π_app_walkingParallelPair_one :
(fork F U).π.app WalkingParallelPair.one = res F U ≫ leftRes F U :=
@@ -212,7 +212,7 @@ set_option linter.uppercaseLean3 false in
/-!
The remainder of this file shows that the equalizer_products sheaf condition is equivalent
-to the pariwise_intersections sheaf condition.
+to the pairwise_intersections sheaf condition.
-/
@@ -384,7 +384,7 @@ set_option linter.uppercaseLean3 false in
@[simps!]
def coneEquivUnitIso :
𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U :=
- NatIso.ofComponents (coneEquivUnitIsoApp F U) (fun {_ _} f => by aesop_cat)
+ NatIso.ofComponents (coneEquivUnitIsoApp F U)
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso
@@ -30,15 +30,7 @@ universe v' v u
noncomputable section
-open CategoryTheory
-
-open CategoryTheory.Limits
-
-open TopologicalSpace
-
-open Opposite
-
-open TopologicalSpace.Opens
+open CategoryTheory CategoryTheory.Limits TopologicalSpace Opposite TopologicalSpace.Opens
namespace TopCat
@@ -97,7 +89,7 @@ set_option linter.uppercaseLean3 false in
@[elementwise]
theorem w : res F U ≫ leftRes F U = res F U ≫ rightRes F U := by
dsimp [res, leftRes, rightRes]
- -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext (fun _ => ?_)
simp only [limit.lift_π, limit.lift_π_assoc, Fan.mk_π_app, Category.assoc]
rw [← F.map_comp]
@@ -150,14 +142,14 @@ set_option linter.uppercaseLean3 false in
variable {F} {G : Presheaf C X}
-/-- Isomorphic presheaves have isomorphic `pi_opens` for any cover `U`. -/
+/-- Isomorphic presheaves have isomorphic `piOpens` for any cover `U`. -/
@[simp]
def piOpens.isoOfIso (α : F ≅ G) : piOpens F U ≅ piOpens.{v'} G U :=
Pi.mapIso fun _ => α.app _
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_equalizer_products.pi_opens.iso_of_iso TopCat.Presheaf.SheafConditionEqualizerProducts.piOpens.isoOfIso
-/-- Isomorphic presheaves have isomorphic `pi_inters` for any cover `U`. -/
+/-- Isomorphic presheaves have isomorphic `piInters` for any cover `U`. -/
@[simp]
def piInters.isoOfIso (α : F ≅ G) : piInters F U ≅ piInters.{v'} G U :=
Pi.mapIso fun _ => α.app _
@@ -170,13 +162,13 @@ def diagram.isoOfIso (α : F ≅ G) : diagram F U ≅ diagram.{v'} G U :=
(by
rintro ⟨⟩ ⟨⟩ ⟨⟩
· simp
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext (fun _ => ?_)
simp only [leftRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_left,
Functor.mapIso_hom, lim_map, limit.lift_map, limit.lift_π, Cones.postcompose_obj_π,
NatTrans.comp_app, Fan.mk_π_app, Discrete.natIso_hom_app, Iso.app_hom, Category.assoc,
NatTrans.naturality, limMap_π_assoc]
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext (fun _ => ?_)
simp only [rightRes, piOpens.isoOfIso, piInters.isoOfIso, parallelPair_map_right,
Functor.mapIso_hom, lim_map, limit.lift_map, limit.lift_π, Cones.postcompose_obj_π,
@@ -195,7 +187,7 @@ def fork.isoOfIso (α : F ≅ G) :
fork F U ≅ (Cones.postcompose (diagram.isoOfIso U α).inv).obj (fork G U) := by
fapply Fork.ext
· apply α.app
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext (fun _ => ?_)
dsimp only [Fork.ι]
-- Ugh, `simp` can't unfold abbreviations.
@@ -228,7 +220,7 @@ namespace SheafConditionPairwiseIntersections
open CategoryTheory.Pairwise CategoryTheory.Pairwise.Hom
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
Cone (SheafConditionEqualizerProducts.diagram F U) where
@@ -239,14 +231,14 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
(Pi.lift fun b : ι × ι => c.π.app (op (pair b.1 b.2)))
naturality := fun Y Z f => by
cases Y <;> cases Z <;> cases f
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun i => ?_
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app, CategoryTheory.Functor.map_id,
Category.assoc]
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app]
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.leftRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
@@ -254,7 +246,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.left i j))
dsimp at h
simpa using h
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [SheafConditionEqualizerProducts.rightRes]
simp only [limit.lift_π, limit.lift_π_assoc, Category.id_comp, Fan.mk_π_app,
@@ -262,7 +254,7 @@ def coneEquivFunctorObj (c : Cone ((diagram U).op ⋙ F)) :
have h := c.π.naturality (Quiver.Hom.op (Hom.right i j))
dsimp at h
simpa using h
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun i => ?_
dsimp
simp only [limit.lift_π, Category.id_comp, Fan.mk_π_app, CategoryTheory.Functor.map_id,
@@ -274,7 +266,7 @@ set_option linter.uppercaseLean3 false in
section
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivFunctor :
Limits.Cone ((diagram U).op ⋙ F) ⥤ Limits.Cone (SheafConditionEqualizerProducts.diagram F U)
@@ -292,7 +284,7 @@ set_option linter.uppercaseLean3 false in
end
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagram F U)) :
Limits.Cone ((diagram U).op ⋙ F) where
@@ -340,7 +332,7 @@ def coneEquivInverseObj (c : Limits.Cone (SheafConditionEqualizerProducts.diagra
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse_obj TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverseObj
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivInverse :
Limits.Cone (SheafConditionEqualizerProducts.diagram F U) ⥤ Limits.Cone ((diagram U).op ⋙ F)
@@ -360,7 +352,7 @@ def coneEquivInverse :
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_inverse TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivInverse
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps]
def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
(𝟭 (Cone ((diagram U).op ⋙ F))).obj c ≅ (coneEquivFunctor F U ⋙ coneEquivInverse F U).obj c
@@ -388,7 +380,7 @@ def coneEquivUnitIsoApp (c : Cone ((diagram U).op ⋙ F)) :
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso_app TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIsoApp
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivUnitIso :
𝟭 (Limits.Cone ((diagram U).op ⋙ F)) ≅ coneEquivFunctor F U ⋙ coneEquivInverse F U :=
@@ -396,7 +388,7 @@ def coneEquivUnitIso :
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.cone_equiv_unit_iso TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivUnitIso
-/-- Implementation of `sheaf_condition_pairwise_intersections.cone_equiv`. -/
+/-- Implementation of `SheafConditionPairwiseIntersections.coneEquiv`. -/
@[simps!]
def coneEquivCounitIso :
coneEquivInverse F U ⋙ coneEquivFunctor F U ≅
@@ -407,11 +399,11 @@ def coneEquivCounitIso :
{ Hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
@@ -419,11 +411,11 @@ def coneEquivCounitIso :
{ Hom := 𝟙 _
w := by
rintro ⟨_ | _⟩
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π]
- · -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ · -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse]
simp only [Limits.Fan.mk_π_app, Category.id_comp, Limits.limit.lift_π] }
@@ -460,8 +452,8 @@ set_option linter.uppercaseLean3 false in
-- attribute [local reducible]
-- SheafConditionEqualizerProducts.res SheafConditionEqualizerProducts.leftRes
-/-- If `sheaf_condition_equalizer_products.fork` is an equalizer,
-then `F.map_cone (cone U)` is a limit cone.
+/-- If `SheafConditionEqualizerProducts.fork` is an equalizer,
+then `F.mapCone (cone U)` is a limit cone.
-/
def isLimitMapConeOfIsLimitSheafConditionFork
(P : IsLimit (SheafConditionEqualizerProducts.fork F U)) : IsLimit (F.mapCone (cocone U).op) :=
@@ -507,8 +499,8 @@ def isLimitMapConeOfIsLimitSheafConditionFork
set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition_pairwise_intersections.is_limit_map_cone_of_is_limit_sheaf_condition_fork TopCat.Presheaf.SheafConditionPairwiseIntersections.isLimitMapConeOfIsLimitSheafConditionFork
-/-- If `F.map_cone (cone U)` is a limit cone,
-then `sheaf_condition_equalizer_products.fork` is an equalizer.
+/-- If `F.mapCone (cone U)` is a limit cone,
+then `SheafConditionEqualizerProducts.fork` is an equalizer.
-/
def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U).op)) :
IsLimit (SheafConditionEqualizerProducts.fork F U) :=
@@ -521,7 +513,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
simp
rfl
· dsimp
- -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
@@ -537,7 +529,7 @@ def isLimitSheafConditionForkOfIsLimitMapCone (Q : IsLimit (F.mapCone (cocone U)
simp
rfl
· dsimp
- -- Porting note : Lean cant use `limit.hom_ext` as `ext` lemma
+ -- Porting note : Lean can't use `limit.hom_ext` as `ext` lemma
refine limit.hom_ext fun ⟨i, j⟩ => ?_
dsimp [coneEquivInverse, SheafConditionEqualizerProducts.res,
SheafConditionEqualizerProducts.leftRes]
The unported dependencies are