topology.gluing
⟷
Mathlib.Topology.Gluing
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,8 +5,8 @@ Authors: Andrew Yang
-/
import CategoryTheory.GlueData
import CategoryTheory.ConcreteCategory.Elementwise
-import Topology.Category.Top.Limits.Pullbacks
-import Topology.Category.Top.Opens
+import Topology.Category.TopCat.Limits.Pullbacks
+import Topology.Category.TopCat.Opens
#align_import topology.gluing from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -167,8 +167,8 @@ open CategoryTheory.Limits.WalkingParallelPair
theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
EqvGen (Types.CoequalizerRel 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap) x y :=
by
- delta glue_data.π multicoequalizer.sigma_π at h
- simp_rw [comp_app] at h
+ delta glue_data.π multicoequalizer.sigma_π at h
+ simp_rw [comp_app] at h
replace h := (TopCat.mono_iff_injective (multicoequalizer.iso_coequalizer 𝖣.diagram).inv).mp _ h
let diagram := parallel_pair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
have : colimit.ι diagram one x = colimit.ι diagram one y :=
@@ -184,7 +184,7 @@ theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
this :
_)
simp only [eq_to_hom_refl, types_comp_apply, colimit.ι_map_assoc,
- diagram_iso_parallel_pair_hom_app, colimit.iso_colimit_cocone_ι_hom, types_id_apply] at this
+ diagram_iso_parallel_pair_hom_app, colimit.iso_colimit_cocone_ι_hom, types_id_apply] at this
exact Quot.eq.1 this
infer_instance
#align Top.glue_data.eqv_gen_of_π_eq TopCat.GlueData.eqvGen_of_π_eq
@@ -347,7 +347,7 @@ structure MkCore where
theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x :=
by
have := h.cocycle j i j x _
- rw [h.t_id] at this
+ rw [h.t_id] at this
convert Subtype.eq this
· ext; rfl
all_goals rw [h.V_id]; trivial
@@ -451,8 +451,8 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
intro x y e
obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective x
obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective y
- rw [ι_from_open_subsets_glue_apply, ι_from_open_subsets_glue_apply] at e
- change x = y at e
+ rw [ι_from_open_subsets_glue_apply, ι_from_open_subsets_glue_apply] at e
+ change x = y at e
subst e
rw [(of_open_subsets U).ι_eq_iff_rel]
right
@@ -464,7 +464,7 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) :=
by
intro s hs
- rw [(of_open_subsets U).isOpen_iff] at hs
+ rw [(of_open_subsets U).isOpen_iff] at hs
rw [isOpen_iff_forall_mem_open]
rintro _ ⟨x, hx, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective x
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
-import Mathbin.CategoryTheory.GlueData
-import Mathbin.CategoryTheory.ConcreteCategory.Elementwise
-import Mathbin.Topology.Category.Top.Limits.Pullbacks
-import Mathbin.Topology.Category.Top.Opens
+import CategoryTheory.GlueData
+import CategoryTheory.ConcreteCategory.Elementwise
+import Topology.Category.Top.Limits.Pullbacks
+import Topology.Category.Top.Opens
#align_import topology.gluing from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -146,7 +146,7 @@ theorem rel_equiv : Equivalence D.Rel :=
have eq₂ : (pullback.snd : _ ⟶ D.V _) z = y := pullback_iso_prod_subtype_inv_snd_apply _ _ _
clear_value z
right
- use (pullback.fst : _ ⟶ D.V (i, k)) (D.t' _ _ _ z)
+ use(pullback.fst : _ ⟶ D.V (i, k)) (D.t' _ _ _ z)
dsimp only at *
substs e₁ e₃ e₄ eq₁ eq₂
have h₁ : D.t' j i k ≫ pullback.fst ≫ D.f i k = pullback.fst ≫ D.t j i ≫ D.f i j := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module topology.gluing
-! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.GlueData
import Mathbin.CategoryTheory.ConcreteCategory.Elementwise
import Mathbin.Topology.Category.Top.Limits.Pullbacks
import Mathbin.Topology.Category.Top.Opens
+#align_import topology.gluing from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
+
/-!
# Gluing Topological spaces
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -66,6 +66,7 @@ open CategoryTheory.Limits
namespace TopCat
+#print TopCat.GlueData /-
/-- A family of gluing data consists of
1. An index type `J`
2. An object `U i` for each `i : J`.
@@ -93,6 +94,7 @@ structure GlueData extends GlueData TopCat where
f_open : ∀ i j, OpenEmbedding (f i j)
f_mono := fun i j => (TopCat.mono_iff_injective _).mpr (f_open i j).toEmbedding.inj
#align Top.glue_data TopCat.GlueData
+-/
namespace GlueData
@@ -100,10 +102,13 @@ variable (D : GlueData.{u})
local notation "𝖣" => D.toGlueData
+#print TopCat.GlueData.π_surjective /-
theorem π_surjective : Function.Surjective 𝖣.π :=
(TopCat.epi_iff_surjective 𝖣.π).mp inferInstance
#align Top.glue_data.π_surjective TopCat.GlueData.π_surjective
+-/
+#print TopCat.GlueData.isOpen_iff /-
theorem isOpen_iff (U : Set 𝖣.glued) : IsOpen U ↔ ∀ i, IsOpen (𝖣.ι i ⁻¹' U) :=
by
delta CategoryTheory.GlueData.ι
@@ -114,18 +119,24 @@ theorem isOpen_iff (U : Set 𝖣.glued) : IsOpen U ↔ ∀ i, IsOpen (𝖣.ι i
· intro h j; exact h ⟨j⟩
· intro h j; cases j; exact h j
#align Top.glue_data.is_open_iff TopCat.GlueData.isOpen_iff
+-/
+#print TopCat.GlueData.ι_jointly_surjective /-
theorem ι_jointly_surjective (x : 𝖣.glued) : ∃ (i : _) (y : D.U i), 𝖣.ι i y = x :=
𝖣.ι_jointly_surjective (forget TopCat) x
#align Top.glue_data.ι_jointly_surjective TopCat.GlueData.ι_jointly_surjective
+-/
+#print TopCat.GlueData.Rel /-
/-- An equivalence relation on `Σ i, D.U i` that holds iff `𝖣 .ι i x = 𝖣 .ι j y`.
See `Top.glue_data.ι_eq_iff_rel`.
-/
def Rel (a b : Σ i, ((D.U i : TopCat) : Type _)) : Prop :=
a = b ∨ ∃ x : D.V (a.1, b.1), D.f _ _ x = a.2 ∧ D.f _ _ (D.t _ _ x) = b.2
#align Top.glue_data.rel TopCat.GlueData.Rel
+-/
+#print TopCat.GlueData.rel_equiv /-
theorem rel_equiv : Equivalence D.Rel :=
⟨fun x => Or.inl (refl x), by
rintro a b (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
@@ -151,9 +162,11 @@ theorem rel_equiv : Equivalence D.Rel :=
exact pullback.condition.symm
exact ⟨ContinuousMap.congr_fun h₁ z, ContinuousMap.congr_fun h₂ z⟩⟩
#align Top.glue_data.rel_equiv TopCat.GlueData.rel_equiv
+-/
open CategoryTheory.Limits.WalkingParallelPair
+#print TopCat.GlueData.eqvGen_of_π_eq /-
theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
EqvGen (Types.CoequalizerRel 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap) x y :=
by
@@ -178,7 +191,9 @@ theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
exact Quot.eq.1 this
infer_instance
#align Top.glue_data.eqv_gen_of_π_eq TopCat.GlueData.eqvGen_of_π_eq
+-/
+#print TopCat.GlueData.ι_eq_iff_rel /-
theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
𝖣.ι i x = 𝖣.ι j y ↔ D.Rel ⟨i, x⟩ ⟨j, y⟩ :=
by
@@ -209,7 +224,9 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
rfl; dsimp only at *; subst e₁; subst e₂; simp
#align Top.glue_data.ι_eq_iff_rel TopCat.GlueData.ι_eq_iff_rel
+-/
+#print TopCat.GlueData.ι_injective /-
theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) :=
by
intro x y h
@@ -217,11 +234,15 @@ theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) :=
· rfl
· dsimp only at *; cases e₁; cases e₂; simp
#align Top.glue_data.ι_injective TopCat.GlueData.ι_injective
+-/
+#print TopCat.GlueData.ι_mono /-
instance ι_mono (i : D.J) : Mono (𝖣.ι i) :=
(TopCat.mono_iff_injective _).mpr (D.ι_injective _)
#align Top.glue_data.ι_mono TopCat.GlueData.ι_mono
+-/
+#print TopCat.GlueData.image_inter /-
theorem image_inter (i j : D.J) :
Set.range (𝖣.ι i) ∩ Set.range (𝖣.ι j) = Set.range (D.f i j ≫ 𝖣.ι _) :=
by
@@ -234,13 +255,17 @@ theorem image_inter (i j : D.J) :
· rintro ⟨x, hx⟩
exact ⟨⟨D.f i j x, hx⟩, ⟨D.f j i (D.t _ _ x), by simp [← hx]⟩⟩
#align Top.glue_data.image_inter TopCat.GlueData.image_inter
+-/
+#print TopCat.GlueData.preimage_range /-
theorem preimage_range (i j : D.J) : 𝖣.ι j ⁻¹' Set.range (𝖣.ι i) = Set.range (D.f j i) := by
rw [← Set.preimage_image_eq (Set.range (D.f j i)) (D.ι_injective j), ← Set.image_univ, ←
Set.image_univ, ← Set.image_comp, ← coe_comp, Set.image_univ, Set.image_univ, ← image_inter,
Set.preimage_range_inter]
#align Top.glue_data.preimage_range TopCat.GlueData.preimage_range
+-/
+#print TopCat.GlueData.preimage_image_eq_image /-
theorem preimage_image_eq_image (i j : D.J) (U : Set (𝖣.U i)) :
𝖣.ι j ⁻¹' (𝖣.ι i '' U) = D.f _ _ '' ((D.t j i ≫ D.f _ _) ⁻¹' U) :=
by
@@ -256,7 +281,9 @@ theorem preimage_image_eq_image (i j : D.J) (U : Set (𝖣.U i)) :
rw [← D.preimage_range i j]
exact Set.preimage_mono (Set.image_subset_range _ _)
#align Top.glue_data.preimage_image_eq_image TopCat.GlueData.preimage_image_eq_image
+-/
+#print TopCat.GlueData.preimage_image_eq_image' /-
theorem preimage_image_eq_image' (i j : D.J) (U : Set (𝖣.U i)) :
𝖣.ι j ⁻¹' (𝖣.ι i '' U) = (D.t i j ≫ D.f _ _) '' (D.f _ _ ⁻¹' U) :=
by
@@ -269,7 +296,9 @@ theorem preimage_image_eq_image' (i j : D.J) (U : Set (𝖣.U i)) :
rw [← is_iso_iff_bijective]
apply (forget TopCat).map_isIso
#align Top.glue_data.preimage_image_eq_image' TopCat.GlueData.preimage_image_eq_image'
+-/
+#print TopCat.GlueData.open_image_open /-
theorem open_image_open (i : D.J) (U : Opens (𝖣.U i)) : IsOpen (𝖣.ι i '' U) :=
by
rw [is_open_iff]
@@ -279,12 +308,16 @@ theorem open_image_open (i : D.J) (U : Opens (𝖣.U i)) : IsOpen (𝖣.ι i ''
apply (D.t j i ≫ D.f i j).continuous_toFun.isOpen_preimage
exact U.is_open
#align Top.glue_data.open_image_open TopCat.GlueData.open_image_open
+-/
+#print TopCat.GlueData.ι_openEmbedding /-
theorem ι_openEmbedding (i : D.J) : OpenEmbedding (𝖣.ι i) :=
openEmbedding_of_continuous_injective_open (𝖣.ι i).continuous_toFun (D.ι_injective i) fun U h =>
D.open_image_open i ⟨U, h⟩
#align Top.glue_data.ι_open_embedding TopCat.GlueData.ι_openEmbedding
+-/
+#print TopCat.GlueData.MkCore /-
/-- A family of gluing data consists of
1. An index type `J`
2. A bundled topological space `U i` for each `i : J`.
@@ -311,7 +344,9 @@ structure MkCore where
∀ (i j k) (x : V i j) (h : ↑x ∈ V i k),
@coe (V k j) (U k) _ (t j k ⟨↑(t i j x), t_inter k x h⟩) = @coe (V k i) (U k) _ (t i k ⟨x, h⟩)
#align Top.glue_data.mk_core TopCat.GlueData.MkCore
+-/
+#print TopCat.GlueData.MkCore.t_inv /-
theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x :=
by
have := h.cocycle j i j x _
@@ -320,10 +355,12 @@ theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i)
· ext; rfl
all_goals rw [h.V_id]; trivial
#align Top.glue_data.mk_core.t_inv TopCat.GlueData.MkCore.t_inv
+-/
instance (h : MkCore.{u}) (i j : h.J) : IsIso (h.t i j) := by use h.t j i; constructor <;> ext1;
exacts [h.t_inv _ _ _, h.t_inv _ _ _]
+#print TopCat.GlueData.MkCore.t' /-
/-- (Implementation) the restricted transition map to be fed into `glue_data`. -/
def MkCore.t' (h : MkCore.{u}) (i j k : h.J) :
pullback (h.V i j).inclusion (h.V i k).inclusion ⟶
@@ -336,7 +373,9 @@ def MkCore.t' (h : MkCore.{u}) (i j k : h.J) :
exact h.t_inter _ ⟨x, hx⟩ hx'
continuity
#align Top.glue_data.mk_core.t' TopCat.GlueData.MkCore.t'
+-/
+#print TopCat.GlueData.mk' /-
/-- This is a constructor of `Top.glue_data` whose arguments are in terms of elements and
intersections rather than subobjects and pullbacks. Please refer to `Top.glue_data.mk_core` for
details. -/
@@ -371,9 +410,11 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData
ext
exact h.cocycle i j k ⟨x, hx⟩ hx'
#align Top.glue_data.mk' TopCat.GlueData.mk'
+-/
variable {α : Type u} [TopologicalSpace α] {J : Type u} (U : J → Opens α)
+#print TopCat.GlueData.ofOpenSubsets /-
/-- We may construct a glue data from a family of open sets. -/
@[simps to_glue_data_J to_glue_data_U to_glue_data_V to_glue_data_t to_glue_data_f]
def ofOpenSubsets : TopCat.GlueData.{u} :=
@@ -387,7 +428,9 @@ def ofOpenSubsets : TopCat.GlueData.{u} :=
t_inter := fun i j k x hx => hx
cocycle := fun i j k x h => rfl }
#align Top.glue_data.of_open_subsets TopCat.GlueData.ofOpenSubsets
+-/
+#print TopCat.GlueData.fromOpenSubsetsGlue /-
/-- The canonical map from the glue of a family of open subsets `α` into `α`.
This map is an open embedding (`from_open_subsets_glue_open_embedding`),
and its range is `⋃ i, (U i : set α)` (`range_from_open_subsets_glue`).
@@ -395,13 +438,17 @@ and its range is `⋃ i, (U i : set α)` (`range_from_open_subsets_glue`).
def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
Multicoequalizer.desc _ _ (fun x => Opens.inclusion _) (by rintro ⟨i, j⟩; ext x; rfl)
#align Top.glue_data.from_open_subsets_glue TopCat.GlueData.fromOpenSubsetsGlue
+-/
+#print TopCat.GlueData.ι_fromOpenSubsetsGlue /-
@[simp, elementwise]
theorem ι_fromOpenSubsetsGlue (i : J) :
(ofOpenSubsets U).toGlueData.ι i ≫ fromOpenSubsetsGlue U = Opens.inclusion _ :=
Multicoequalizer.π_desc _ _ _ _ _
#align Top.glue_data.ι_from_open_subsets_glue TopCat.GlueData.ι_fromOpenSubsetsGlue
+-/
+#print TopCat.GlueData.fromOpenSubsetsGlue_injective /-
theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue U) :=
by
intro x y e
@@ -414,7 +461,9 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
right
exact ⟨⟨⟨x, hx⟩, hy⟩, rfl, rfl⟩
#align Top.glue_data.from_open_subsets_glue_injective TopCat.GlueData.fromOpenSubsetsGlue_injective
+-/
+#print TopCat.GlueData.fromOpenSubsetsGlue_isOpenMap /-
theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) :=
by
intro s hs
@@ -435,12 +484,16 @@ theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) :=
rw [ι_from_open_subsets_glue_apply]
exact Set.mem_range_self _
#align Top.glue_data.from_open_subsets_glue_is_open_map TopCat.GlueData.fromOpenSubsetsGlue_isOpenMap
+-/
+#print TopCat.GlueData.fromOpenSubsetsGlue_openEmbedding /-
theorem fromOpenSubsetsGlue_openEmbedding : OpenEmbedding (fromOpenSubsetsGlue U) :=
openEmbedding_of_continuous_injective_open (ContinuousMap.continuous_toFun _)
(fromOpenSubsetsGlue_injective U) (fromOpenSubsetsGlue_isOpenMap U)
#align Top.glue_data.from_open_subsets_glue_open_embedding TopCat.GlueData.fromOpenSubsetsGlue_openEmbedding
+-/
+#print TopCat.GlueData.range_fromOpenSubsetsGlue /-
theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (U i : Set α) :=
by
ext
@@ -452,7 +505,9 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
· rintro ⟨_, ⟨i, rfl⟩, hx⟩
refine' ⟨(of_open_subsets U).toGlueData.ι i ⟨x, hx⟩, ι_from_open_subsets_glue_apply _ _ _⟩
#align Top.glue_data.range_from_open_subsets_glue TopCat.GlueData.range_fromOpenSubsetsGlue
+-/
+#print TopCat.GlueData.openCoverGlueHomeo /-
/-- The gluing of an open cover is homeomomorphic to the original space. -/
def openCoverGlueHomeo (h : (⋃ i, (U i : Set α)) = Set.univ) :
(ofOpenSubsets U).toGlueData.glued ≃ₜ α :=
@@ -462,6 +517,7 @@ def openCoverGlueHomeo (h : (⋃ i, (U i : Set α)) = Set.univ) :
Set.range_iff_surjective.mp ((range_fromOpenSubsetsGlue U).symm ▸ h)⟩)
(fromOpenSubsetsGlue U).2 (fromOpenSubsetsGlue_isOpenMap U)
#align Top.glue_data.open_cover_glue_homeo TopCat.GlueData.openCoverGlueHomeo
+-/
end GlueData
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf9bbbcf0c1c1ead18280b0d010e417b10abb1b6
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
! This file was ported from Lean 3 source module topology.gluing
-! leanprover-community/mathlib commit 178a32653e369dce2da68dc6b2694e385d484ef1
+! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.Category.Top.Opens
/-!
# Gluing Topological spaces
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Given a family of gluing data (see `category_theory/glue_data`), we can then glue them together.
The construction should be "sealed" and considered as a black box, while only using the API
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -95,7 +95,6 @@ namespace GlueData
variable (D : GlueData.{u})
--- mathport name: «expr𝖣»
local notation "𝖣" => D.toGlueData
theorem π_surjective : Function.Surjective 𝖣.π :=
@@ -372,8 +371,6 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData
variable {α : Type u} [TopologicalSpace α] {J : Type u} (U : J → Opens α)
-include U
-
/-- We may construct a glue data from a family of open sets. -/
@[simps to_glue_data_J to_glue_data_U to_glue_data_V to_glue_data_t to_glue_data_f]
def ofOpenSubsets : TopCat.GlueData.{u} :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -113,21 +113,21 @@ theorem isOpen_iff (U : Set 𝖣.glued) : IsOpen U ↔ ∀ i, IsOpen (𝖣.ι i
· intro h j; cases j; exact h j
#align Top.glue_data.is_open_iff TopCat.GlueData.isOpen_iff
-theorem ι_jointly_surjective (x : 𝖣.glued) : ∃ (i : _)(y : D.U i), 𝖣.ι i y = x :=
+theorem ι_jointly_surjective (x : 𝖣.glued) : ∃ (i : _) (y : D.U i), 𝖣.ι i y = x :=
𝖣.ι_jointly_surjective (forget TopCat) x
#align Top.glue_data.ι_jointly_surjective TopCat.GlueData.ι_jointly_surjective
/-- An equivalence relation on `Σ i, D.U i` that holds iff `𝖣 .ι i x = 𝖣 .ι j y`.
See `Top.glue_data.ι_eq_iff_rel`.
-/
-def Rel (a b : Σi, ((D.U i : TopCat) : Type _)) : Prop :=
+def Rel (a b : Σ i, ((D.U i : TopCat) : Type _)) : Prop :=
a = b ∨ ∃ x : D.V (a.1, b.1), D.f _ _ x = a.2 ∧ D.f _ _ (D.t _ _ x) = b.2
#align Top.glue_data.rel TopCat.GlueData.Rel
theorem rel_equiv : Equivalence D.Rel :=
⟨fun x => Or.inl (refl x), by
rintro a b (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
- exacts[Or.inl rfl, Or.inr ⟨D.t _ _ x, by simp [e₁, e₂]⟩],
+ exacts [Or.inl rfl, Or.inr ⟨D.t _ _ x, by simp [e₁, e₂]⟩],
by
rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩); exact id
rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩); exact Or.inr ⟨x, e₁, e₂⟩
@@ -155,8 +155,8 @@ open CategoryTheory.Limits.WalkingParallelPair
theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
EqvGen (Types.CoequalizerRel 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap) x y :=
by
- delta glue_data.π multicoequalizer.sigma_π at h
- simp_rw [comp_app] at h
+ delta glue_data.π multicoequalizer.sigma_π at h
+ simp_rw [comp_app] at h
replace h := (TopCat.mono_iff_injective (multicoequalizer.iso_coequalizer 𝖣.diagram).inv).mp _ h
let diagram := parallel_pair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
have : colimit.ι diagram one x = colimit.ι diagram one y :=
@@ -172,7 +172,7 @@ theorem eqvGen_of_π_eq {x y : ∐ D.U} (h : 𝖣.π x = 𝖣.π y) :
this :
_)
simp only [eq_to_hom_refl, types_comp_apply, colimit.ι_map_assoc,
- diagram_iso_parallel_pair_hom_app, colimit.iso_colimit_cocone_ι_hom, types_id_apply] at this
+ diagram_iso_parallel_pair_hom_app, colimit.iso_colimit_cocone_ι_hom, types_id_apply] at this
exact Quot.eq.1 this
infer_instance
#align Top.glue_data.eqv_gen_of_π_eq TopCat.GlueData.eqvGen_of_π_eq
@@ -313,14 +313,14 @@ structure MkCore where
theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x :=
by
have := h.cocycle j i j x _
- rw [h.t_id] at this
+ rw [h.t_id] at this
convert Subtype.eq this
· ext; rfl
all_goals rw [h.V_id]; trivial
#align Top.glue_data.mk_core.t_inv TopCat.GlueData.MkCore.t_inv
instance (h : MkCore.{u}) (i j : h.J) : IsIso (h.t i j) := by use h.t j i; constructor <;> ext1;
- exacts[h.t_inv _ _ _, h.t_inv _ _ _]
+ exacts [h.t_inv _ _ _, h.t_inv _ _ _]
/-- (Implementation) the restricted transition map to be fed into `glue_data`. -/
def MkCore.t' (h : MkCore.{u}) (i j k : h.J) :
@@ -407,8 +407,8 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
intro x y e
obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective x
obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective y
- rw [ι_from_open_subsets_glue_apply, ι_from_open_subsets_glue_apply] at e
- change x = y at e
+ rw [ι_from_open_subsets_glue_apply, ι_from_open_subsets_glue_apply] at e
+ change x = y at e
subst e
rw [(of_open_subsets U).ι_eq_iff_rel]
right
@@ -418,7 +418,7 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) :=
by
intro s hs
- rw [(of_open_subsets U).isOpen_iff] at hs
+ rw [(of_open_subsets U).isOpen_iff] at hs
rw [isOpen_iff_forall_mem_open]
rintro _ ⟨x, hx, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective x
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -109,11 +109,8 @@ theorem isOpen_iff (U : Set 𝖣.glued) : IsOpen U ↔ ∀ i, IsOpen (𝖣.ι i
rw [← (homeo_of_iso (multicoequalizer.iso_coequalizer 𝖣.diagram).symm).isOpen_preimage]
rw [coequalizer_is_open_iff, colimit_isOpen_iff.{u}]
constructor
- · intro h j
- exact h ⟨j⟩
- · intro h j
- cases j
- exact h j
+ · intro h j; exact h ⟨j⟩
+ · intro h j; cases j; exact h j
#align Top.glue_data.is_open_iff TopCat.GlueData.isOpen_iff
theorem ι_jointly_surjective (x : 𝖣.glued) : ∃ (i : _)(y : D.U i), 𝖣.ι i y = x :=
@@ -132,10 +129,8 @@ theorem rel_equiv : Equivalence D.Rel :=
rintro a b (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
exacts[Or.inl rfl, Or.inr ⟨D.t _ _ x, by simp [e₁, e₂]⟩],
by
- rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
- exact id
- rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩)
- exact Or.inr ⟨x, e₁, e₂⟩
+ rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩); exact id
+ rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩); exact Or.inr ⟨x, e₁, e₂⟩
let z := (pullback_iso_prod_subtype (D.f j i) (D.f j k)).inv ⟨⟨_, _⟩, e₂.trans e₃.symm⟩
have eq₁ : (D.t j i) ((pullback.fst : _ ⟶ D.V _) z) = x := by simp
have eq₂ : (pullback.snd : _ ⟶ D.V _) z = y := pullback_iso_prod_subtype_inv_snd_apply _ _ _
@@ -144,11 +139,8 @@ theorem rel_equiv : Equivalence D.Rel :=
use (pullback.fst : _ ⟶ D.V (i, k)) (D.t' _ _ _ z)
dsimp only at *
substs e₁ e₃ e₄ eq₁ eq₂
- have h₁ : D.t' j i k ≫ pullback.fst ≫ D.f i k = pullback.fst ≫ D.t j i ≫ D.f i j :=
- by
- rw [← 𝖣.t_fac_assoc]
- congr 1
- exact pullback.condition
+ have h₁ : D.t' j i k ≫ pullback.fst ≫ D.f i k = pullback.fst ≫ D.t j i ≫ D.f i j := by
+ rw [← 𝖣.t_fac_assoc]; congr 1; exact pullback.condition
have h₂ : D.t' j i k ≫ pullback.fst ≫ D.t i k ≫ D.f k i = pullback.snd ≫ D.t j k ≫ D.f k j :=
by
rw [← 𝖣.t_fac_assoc]
@@ -211,17 +203,9 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
CategoryTheory.Limits.colimit.ι_desc_apply, cofan.mk_ι_app, sigma_iso_sigma_hom_ι_apply,
ContinuousMap.toFun_eq_coe]
erw [sigma_iso_sigma_hom_ι_apply, sigma_iso_sigma_hom_ι_apply]
- exact
- Or.inr
- ⟨y, by
- dsimp [glue_data.diagram]
- simp⟩
+ exact Or.inr ⟨y, by dsimp [glue_data.diagram]; simp⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
- rfl
- dsimp only at *
- subst e₁
- subst e₂
- simp
+ rfl; dsimp only at *; subst e₁; subst e₂; simp
#align Top.glue_data.ι_eq_iff_rel TopCat.GlueData.ι_eq_iff_rel
theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) :=
@@ -229,10 +213,7 @@ theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) :=
intro x y h
rcases(D.ι_eq_iff_rel _ _ _ _).mp h with (⟨⟨⟩⟩ | ⟨_, e₁, e₂⟩)
· rfl
- · dsimp only at *
- cases e₁
- cases e₂
- simp
+ · dsimp only at *; cases e₁; cases e₂; simp
#align Top.glue_data.ι_injective TopCat.GlueData.ι_injective
instance ι_mono (i : D.J) : Mono (𝖣.ι i) :=
@@ -247,9 +228,7 @@ theorem image_inter (i j : D.J) :
· rintro ⟨⟨x₁, eq₁⟩, ⟨x₂, eq₂⟩⟩
obtain ⟨⟨⟩⟩ | ⟨y, e₁, e₂⟩ := (D.ι_eq_iff_rel _ _ _ _).mp (eq₁.trans eq₂.symm)
· exact ⟨inv (D.f i i) x₁, by simp [eq₁]⟩
- · dsimp only at *
- substs e₁ eq₁
- exact ⟨y, by simp⟩
+ · dsimp only at *; substs e₁ eq₁; exact ⟨y, by simp⟩
· rintro ⟨x, hx⟩
exact ⟨⟨D.f i j x, hx⟩, ⟨D.f j i (D.t _ _ x), by simp [← hx]⟩⟩
#align Top.glue_data.image_inter TopCat.GlueData.image_inter
@@ -336,15 +315,11 @@ theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i)
have := h.cocycle j i j x _
rw [h.t_id] at this
convert Subtype.eq this
- · ext
- rfl
+ · ext; rfl
all_goals rw [h.V_id]; trivial
#align Top.glue_data.mk_core.t_inv TopCat.GlueData.MkCore.t_inv
-instance (h : MkCore.{u}) (i j : h.J) : IsIso (h.t i j) :=
- by
- use h.t j i
- constructor <;> ext1
+instance (h : MkCore.{u}) (i j : h.J) : IsIso (h.t i j) := by use h.t j i; constructor <;> ext1;
exacts[h.t_inv _ _ _, h.t_inv _ _ _]
/-- (Implementation) the restricted transition map to be fed into `glue_data`. -/
@@ -372,10 +347,7 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData
f_id i := (h.v_id i).symm ▸ IsIso.of_iso (Opens.inclusionTopIso (h.U i))
f_open := fun i j : h.J => (h.V i j).OpenEmbedding
t := h.t
- t_id i := by
- ext
- rw [h.t_id]
- rfl
+ t_id i := by ext; rw [h.t_id]; rfl
t' := h.t'
t_fac i j k := by
delta mk_core.t'
@@ -410,13 +382,8 @@ def ofOpenSubsets : TopCat.GlueData.{u} :=
U := fun i => (Opens.toTopCat <| TopCat.of α).obj (U i)
V := fun i j => (Opens.map <| Opens.inclusion _).obj (U j)
t := fun i j => ⟨fun x => ⟨⟨x.1.1, x.2⟩, x.1.2⟩, by continuity⟩
- v_id := fun i => by
- ext
- cases U i
- simp
- t_id := fun i => by
- ext
- rfl
+ v_id := fun i => by ext; cases U i; simp
+ t_id := fun i => by ext; rfl
t_inter := fun i j k x hx => hx
cocycle := fun i j k x h => rfl }
#align Top.glue_data.of_open_subsets TopCat.GlueData.ofOpenSubsets
@@ -426,11 +393,7 @@ This map is an open embedding (`from_open_subsets_glue_open_embedding`),
and its range is `⋃ i, (U i : set α)` (`range_from_open_subsets_glue`).
-/
def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
- Multicoequalizer.desc _ _ (fun x => Opens.inclusion _)
- (by
- rintro ⟨i, j⟩
- ext x
- rfl)
+ Multicoequalizer.desc _ _ (fun x => Opens.inclusion _) (by rintro ⟨i, j⟩; ext x; rfl)
#align Top.glue_data.from_open_subsets_glue TopCat.GlueData.fromOpenSubsetsGlue
@[simp, elementwise]
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -485,7 +485,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
· rintro ⟨x, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (of_open_subsets U).ι_jointly_surjective x
rw [ι_from_open_subsets_glue_apply]
- exact Set.subset_unionᵢ _ i hx'
+ exact Set.subset_iUnion _ i hx'
· rintro ⟨_, ⟨i, rfl⟩, hx⟩
refine' ⟨(of_open_subsets U).toGlueData.ι i ⟨x, hx⟩, ι_from_open_subsets_glue_apply _ _ _⟩
#align Top.glue_data.range_from_open_subsets_glue TopCat.GlueData.range_fromOpenSubsetsGlue
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -322,7 +322,7 @@ structure MkCore where
{J : Type u}
U : J → TopCat.{u}
V : ∀ i, J → Opens (U i)
- t : ∀ i j, (Opens.toTop _).obj (V i j) ⟶ (Opens.toTop _).obj (V j i)
+ t : ∀ i j, (Opens.toTopCat _).obj (V i j) ⟶ (Opens.toTopCat _).obj (V j i)
v_id : ∀ i, V i i = ⊤
t_id : ∀ i, ⇑(t i i) = id
t_inter : ∀ ⦃i j⦄ (k) (x : V i j), ↑x ∈ V i k → @coe (V j i) (U j) _ (t i j x) ∈ V j k
@@ -367,7 +367,7 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData
where
J := h.J
U := h.U
- V i := (Opens.toTop _).obj (h.V i.1 i.2)
+ V i := (Opens.toTopCat _).obj (h.V i.1 i.2)
f i j := (h.V i j).inclusion
f_id i := (h.v_id i).symm ▸ IsIso.of_iso (Opens.inclusionTopIso (h.U i))
f_open := fun i j : h.J => (h.V i j).OpenEmbedding
@@ -407,7 +407,7 @@ include U
def ofOpenSubsets : TopCat.GlueData.{u} :=
mk'.{u}
{ J
- U := fun i => (Opens.toTop <| TopCat.of α).obj (U i)
+ U := fun i => (Opens.toTopCat <| TopCat.of α).obj (U i)
V := fun i j => (Opens.map <| Opens.inclusion _).obj (U j)
t := fun i j => ⟨fun x => ⟨⟨x.1.1, x.2⟩, x.1.2⟩, by continuity⟩
v_id := fun i => by
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -4,13 +4,13 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
! This file was ported from Lean 3 source module topology.gluing
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 178a32653e369dce2da68dc6b2694e385d484ef1
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.GlueData
import Mathbin.CategoryTheory.ConcreteCategory.Elementwise
-import Mathbin.Topology.Category.Top.Limits
+import Mathbin.Topology.Category.Top.Limits.Pullbacks
import Mathbin.Topology.Category.Top.Opens
/-!
mathlib commit https://github.com/leanprover-community/mathlib/commit/57e09a1296bfb4330ddf6624f1028ba186117d82
@@ -426,7 +426,7 @@ This map is an open embedding (`from_open_subsets_glue_open_embedding`),
and its range is `⋃ i, (U i : set α)` (`range_from_open_subsets_glue`).
-/
def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
- multicoequalizer.desc _ _ (fun x => Opens.inclusion _)
+ Multicoequalizer.desc _ _ (fun x => Opens.inclusion _)
(by
rintro ⟨i, j⟩
ext x
@@ -436,7 +436,7 @@ def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
@[simp, elementwise]
theorem ι_fromOpenSubsetsGlue (i : J) :
(ofOpenSubsets U).toGlueData.ι i ≫ fromOpenSubsetsGlue U = Opens.inclusion _ :=
- multicoequalizer.π_desc _ _ _ _ _
+ Multicoequalizer.π_desc _ _ _ _ _
#align Top.glue_data.ι_from_open_subsets_glue TopCat.GlueData.ι_fromOpenSubsetsGlue
theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue U) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -132,8 +132,10 @@ theorem rel_equiv : Equivalence D.Rel :=
⟨fun x => Or.inl (refl x), by
rintro a b (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
exacts [Or.inl rfl, Or.inr ⟨D.t _ _ x, by simp [e₁, e₂]⟩], by
- rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩); exact id
- rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩); exact Or.inr ⟨x, e₁, e₂⟩
+ rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
+ · exact id
+ rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩)
+ · exact Or.inr ⟨x, e₁, e₂⟩
let z := (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨⟨_, _⟩, e₂.trans e₃.symm⟩
have eq₁ : (D.t j i) ((pullback.fst : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by simp [z]
have eq₂ : (pullback.snd : _ ⟶ D.V _) z = y := pullbackIsoProdSubtype_inv_snd_apply _ _ _
@@ -219,7 +221,7 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
exact Or.inr ⟨y, ⟨rfl, rfl⟩⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
- rfl
+ · rfl
dsimp only at *
-- Porting note: there were `subst e₁` and `subst e₂`, instead of the `rw`
rw [← e₁, ← e₂] at *
@@ -297,8 +299,8 @@ theorem preimage_image_eq_image' (i j : D.J) (U : Set (𝖣.U i)) :
-- Porting note: `congr 1` was here, instead of `congr_arg`, however, it did nothing.
refine congr_arg ?_ ?_
rw [← Set.eq_preimage_iff_image_eq, Set.preimage_preimage]
- change _ = (D.t i j ≫ D.t j i ≫ _) ⁻¹' _
- rw [𝖣.t_inv_assoc]
+ · change _ = (D.t i j ≫ D.t j i ≫ _) ⁻¹' _
+ rw [𝖣.t_inv_assoc]
rw [← isIso_iff_bijective]
apply (forget TopCat).map_isIso
set_option linter.uppercaseLean3 false in
@@ -353,10 +355,10 @@ set_option linter.uppercaseLean3 false in
theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x := by
have := h.cocycle j i j x ?_
- rw [h.t_id] at this
- convert Subtype.eq this
- rw [h.V_id]
- trivial
+ · rw [h.t_id] at this
+ · convert Subtype.eq this
+ rw [h.V_id]
+ trivial
set_option linter.uppercaseLean3 false in
#align Top.glue_data.mk_core.t_inv TopCat.GlueData.MkCore.t_inv
@@ -389,8 +389,8 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
V i := (Opens.toTopCat _).obj (h.V i.1 i.2)
f i j := (h.V i j).inclusion
f_id i := by
- -- Porting note (#10752): added `dsimp only`
- dsimp only
+ -- Porting note (#12129): additional beta reduction needed
+ beta_reduce
exact (h.V_id i).symm ▸ IsIso.of_iso (Opens.inclusionTopIso (h.U i))
f_open := fun i j : h.J => (h.V i j).openEmbedding
t := h.t
@@ -82,7 +82,7 @@ that the `U i`'s are open subspaces of the glued space.
Most of the times it would be easier to use the constructor `TopCat.GlueData.mk'` where the
conditions are stated in a less categorical way.
-/
--- porting note (#10927): removed @[nolint has_nonempty_instance]
+-- porting note (#5171): removed @[nolint has_nonempty_instance]
structure GlueData extends GlueData TopCat where
f_open : ∀ i j, OpenEmbedding (f i j)
f_mono := fun i j => (TopCat.mono_iff_injective _).mpr (f_open i j).toEmbedding.inj
@@ -335,7 +335,7 @@ such that
We can then glue the topological spaces `U i` together by identifying `V i j` with `V j i`.
-/
--- Porting note: removed `@[nolint has_nonempty_instance]`
+-- Porting note(#5171): removed `@[nolint has_nonempty_instance]`
structure MkCore where
{J : Type u}
U : J → TopCat.{u}
@@ -210,18 +210,10 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
rw [← (InvImage.equivalence _ _ D.rel_equiv).eqvGen_iff]
refine' EqvGen.mono _ (D.eqvGen_of_π_eq h : _)
rintro _ _ ⟨x⟩
- rw [← show (sigmaIsoSigma.{u, u} _).inv _ = x from
- ConcreteCategory.congr_hom (sigmaIsoSigma.{u, u} _).hom_inv_id x]
- -- Adaption note: v4.7.0-rc1
- -- The behaviour of `generalize` was changed in https://github.com/leanprover/lean4/pull/3575
- -- to use transparancy `instances` (rather than `default`)
- -- `generalize'` is a temporary backwards compatibility shim.
- -- Hopefully we will be able to refactor this proof to use `generalize` again, and then drop
- -- `generalize'`.
- generalize' h : (sigmaIsoSigma.{u, u} D.V).hom x = x'
- obtain ⟨⟨i, j⟩, y⟩ := x'
+ obtain ⟨⟨⟨i, j⟩, y⟩, rfl⟩ :=
+ (ConcreteCategory.bijective_of_isIso (sigmaIsoSigma.{u, u} _).inv).2 x
unfold InvImage MultispanIndex.fstSigmaMap MultispanIndex.sndSigmaMap
- simp only [Opens.inclusion_apply, TopCat.comp_app, sigmaIsoSigma_inv_apply,
+ simp only [forget_map_eq_coe, Opens.inclusion_apply, TopCat.comp_app, sigmaIsoSigma_inv_apply,
Cofan.mk_ι_app]
rw [← comp_apply, colimit.ι_desc, ← comp_apply, colimit.ι_desc]
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -6,6 +6,7 @@ Authors: Andrew Yang
import Mathlib.CategoryTheory.GlueData
import Mathlib.Topology.Category.TopCat.Limits.Pullbacks
import Mathlib.Topology.Category.TopCat.Opens
+import Mathlib.Tactic.Generalize
#align_import topology.gluing from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
@@ -211,7 +212,13 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
rintro _ _ ⟨x⟩
rw [← show (sigmaIsoSigma.{u, u} _).inv _ = x from
ConcreteCategory.congr_hom (sigmaIsoSigma.{u, u} _).hom_inv_id x]
- generalize (sigmaIsoSigma.{u, u} D.V).hom x = x'
+ -- Adaption note: v4.7.0-rc1
+ -- The behaviour of `generalize` was changed in https://github.com/leanprover/lean4/pull/3575
+ -- to use transparancy `instances` (rather than `default`)
+ -- `generalize'` is a temporary backwards compatibility shim.
+ -- Hopefully we will be able to refactor this proof to use `generalize` again, and then drop
+ -- `generalize'`.
+ generalize' h : (sigmaIsoSigma.{u, u} D.V).hom x = x'
obtain ⟨⟨i, j⟩, y⟩ := x'
unfold InvImage MultispanIndex.fstSigmaMap MultispanIndex.sndSigmaMap
simp only [Opens.inclusion_apply, TopCat.comp_app, sigmaIsoSigma_inv_apply,
@@ -375,6 +382,7 @@ def MkCore.t' (h : MkCore.{u}) (i j k : h.J) :
exact h.t_inter _ ⟨x, hx⟩ hx'
-- Porting note: was `continuity`, see https://github.com/leanprover-community/mathlib4/issues/5030
have : Continuous (h.t i j) := map_continuous (self := ContinuousMap.toContinuousMapClass) _
+ set_option tactic.skipAssignedInstances false in
exact ((Continuous.subtype_mk (by continuity) _).prod_mk (by continuity)).subtype_mk _
set_option linter.uppercaseLean3 false in
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -106,7 +106,7 @@ theorem isOpen_iff (U : Set 𝖣.glued) : IsOpen U ↔ ∀ i, IsOpen (𝖣.ι i
rw [coequalizer_isOpen_iff]
dsimp only [GlueData.diagram_l, GlueData.diagram_left, GlueData.diagram_r, GlueData.diagram_right,
parallelPair_obj_one]
- rw [colimit_isOpen_iff.{_,u}] -- porting note: changed `.{u}` to `.{_,u}`. fun fact: the proof
+ rw [colimit_isOpen_iff.{_,u}] -- Porting note: changed `.{u}` to `.{_,u}`. fun fact: the proof
-- breaks down if this `rw` is merged with the `rw` above.
constructor
· intro h j; exact h ⟨j⟩
@@ -222,7 +222,7 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
rfl
dsimp only at *
- -- porting note: there were `subst e₁` and `subst e₂`, instead of the `rw`
+ -- Porting note: there were `subst e₁` and `subst e₂`, instead of the `rw`
rw [← e₁, ← e₂] at *
simp
set_option linter.uppercaseLean3 false in
@@ -233,7 +233,7 @@ theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) := by
rcases (D.ι_eq_iff_rel _ _ _ _).mp h with (⟨⟨⟩⟩ | ⟨_, e₁, e₂⟩)
· rfl
· dsimp only at *
- -- porting note: there were `cases e₁` and `cases e₂`, instead of the `rw`
+ -- Porting note: there were `cases e₁` and `cases e₂`, instead of the `rw`
rw [← e₁, ← e₂]
simp
set_option linter.uppercaseLean3 false in
@@ -292,10 +292,10 @@ theorem preimage_image_eq_image' (i j : D.J) (U : Set (𝖣.U i)) :
𝖣.ι j ⁻¹' (𝖣.ι i '' U) = (D.t i j ≫ D.f _ _) '' (D.f _ _ ⁻¹' U) := by
convert D.preimage_image_eq_image i j U using 1
rw [coe_comp, coe_comp]
- -- porting note: `show` was not needed, since `rw [← Set.image_image]` worked.
+ -- Porting note: `show` was not needed, since `rw [← Set.image_image]` worked.
show (fun x => ((forget TopCat).map _ ((forget TopCat).map _ x))) '' _ = _
rw [← Set.image_image]
- -- porting note: `congr 1` was here, instead of `congr_arg`, however, it did nothing.
+ -- Porting note: `congr 1` was here, instead of `congr_arg`, however, it did nothing.
refine congr_arg ?_ ?_
rw [← Set.eq_preimage_iff_image_eq, Set.preimage_preimage]
change _ = (D.t i j ≫ D.t j i ≫ _) ⁻¹' _
@@ -305,7 +305,7 @@ theorem preimage_image_eq_image' (i j : D.J) (U : Set (𝖣.U i)) :
set_option linter.uppercaseLean3 false in
#align Top.glue_data.preimage_image_eq_image' TopCat.GlueData.preimage_image_eq_image'
--- porting note: the goal was simply `IsOpen (𝖣.ι i '' U)`.
+-- Porting note: the goal was simply `IsOpen (𝖣.ι i '' U)`.
-- I had to manually add the explicit type ascription.
theorem open_image_open (i : D.J) (U : Opens (𝖣.U i)) : IsOpen (𝖣.ι i '' (U : Set (D.U i))) := by
rw [isOpen_iff]
@@ -347,7 +347,7 @@ structure MkCore where
t_inter : ∀ ⦃i j⦄ (k) (x : V i j), ↑x ∈ V i k → (((↑) : (V j i) → (U j)) (t i j x)) ∈ V j k
cocycle :
∀ (i j k) (x : V i j) (h : ↑x ∈ V i k),
- -- porting note: the underscore in the next line was `↑(t i j x)`, but Lean type-mismatched
+ -- Porting note: the underscore in the next line was `↑(t i j x)`, but Lean type-mismatched
(((↑) : (V k j) → (U k)) (t j k ⟨_, t_inter k x h⟩)) = ((↑) : (V k i) → (U k)) (t i k ⟨x, h⟩)
set_option linter.uppercaseLean3 false in
#align Top.glue_data.mk_core TopCat.GlueData.MkCore
@@ -446,7 +446,7 @@ def ofOpenSubsets : TopCat.GlueData.{u} :=
continuity⟩
V_id := fun i => by
ext
- -- porting note: no longer needed `cases U i`!
+ -- Porting note: no longer needed `cases U i`!
simp
t_id := fun i => by ext; rfl
t_inter := fun i j k x hx => hx
@@ -476,7 +476,7 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
intro x y e
obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective y
- -- porting note: now it is `erw`, it was `rw`
+ -- Porting note: now it is `erw`, it was `rw`
-- see the porting note on `ι_fromOpenSubsetsGlue`
erw [ι_fromOpenSubsetsGlue_apply, ι_fromOpenSubsetsGlue_apply] at e
change x = y at e
@@ -504,7 +504,7 @@ theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) := by
apply congr_arg
exact Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
· refine' ⟨Set.mem_image_of_mem _ hx, _⟩
- -- porting note: another `rw ↦ erw`
+ -- Porting note: another `rw ↦ erw`
-- See above.
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.mem_range_self _
@@ -522,7 +522,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
constructor
· rintro ⟨x, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
- -- porting note: another `rw ↦ erw`
+ -- Porting note: another `rw ↦ erw`
-- See above
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.subset_iUnion _ i hx'
@@ -6,7 +6,6 @@ Authors: Andrew Yang
import Mathlib.CategoryTheory.GlueData
import Mathlib.Topology.Category.TopCat.Limits.Pullbacks
import Mathlib.Topology.Category.TopCat.Opens
-import Mathlib.Tactic.LibrarySearch
#align_import topology.gluing from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
@@ -135,7 +134,7 @@ theorem rel_equiv : Equivalence D.Rel :=
rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩); exact id
rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩); exact Or.inr ⟨x, e₁, e₂⟩
let z := (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨⟨_, _⟩, e₂.trans e₃.symm⟩
- have eq₁ : (D.t j i) ((pullback.fst : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by simp
+ have eq₁ : (D.t j i) ((pullback.fst : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by simp [z]
have eq₂ : (pullback.snd : _ ⟶ D.V _) z = y := pullbackIsoProdSubtype_inv_snd_apply _ _ _
clear_value z
right
@@ -82,7 +82,7 @@ that the `U i`'s are open subspaces of the glued space.
Most of the times it would be easier to use the constructor `TopCat.GlueData.mk'` where the
conditions are stated in a less categorical way.
-/
--- Porting note: removed @[nolint has_nonempty_instance]
+-- porting note (#10927): removed @[nolint has_nonempty_instance]
structure GlueData extends GlueData TopCat where
f_open : ∀ i j, OpenEmbedding (f i j)
f_mono := fun i j => (TopCat.mono_iff_injective _).mpr (f_open i j).toEmbedding.inj
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.
@@ -426,7 +426,7 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
convert congr_arg Subtype.val (h.t_inv k i ⟨x, hx'⟩) using 3
refine Subtype.ext ?_
exact h.cocycle i j k ⟨x, hx⟩ hx'
- -- Porting note : was not necessary in mathlib3
+ -- Porting note: was not necessary in mathlib3
f_mono i j := (TopCat.mono_iff_injective _).mpr fun x y h => Subtype.ext h
set_option linter.uppercaseLean3 false in
#align Top.glue_data.mk' TopCat.GlueData.mk'
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -503,7 +503,7 @@ theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) := by
erw [← ι_fromOpenSubsetsGlue, coe_comp, Set.preimage_comp]
-- porting note: `congr 1` did nothing, so I replaced it with `apply congr_arg`
apply congr_arg
- refine' Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
+ exact Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
· refine' ⟨Set.mem_image_of_mem _ hx, _⟩
-- porting note: another `rw ↦ erw`
-- See above.
@@ -529,7 +529,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
exact Set.subset_iUnion _ i hx'
· rintro ⟨_, ⟨i, rfl⟩, hx⟩
rename_i x
- refine' ⟨(ofOpenSubsets U).toGlueData.ι i ⟨x, hx⟩, ι_fromOpenSubsetsGlue_apply _ _ _⟩
+ exact ⟨(ofOpenSubsets U).toGlueData.ι i ⟨x, hx⟩, ι_fromOpenSubsetsGlue_apply _ _ _⟩
set_option linter.uppercaseLean3 false in
#align Top.glue_data.range_from_open_subsets_glue TopCat.GlueData.range_fromOpenSubsetsGlue
@@ -252,7 +252,7 @@ theorem image_inter (i j : D.J) :
· rintro ⟨⟨x₁, eq₁⟩, ⟨x₂, eq₂⟩⟩
obtain ⟨⟨⟩⟩ | ⟨y, e₁, -⟩ := (D.ι_eq_iff_rel _ _ _ _).mp (eq₁.trans eq₂.symm)
· exact ⟨inv (D.f i i) x₁, by
- -- Porting note: was `simp [eq₁]`
+ -- porting note (#10745): was `simp [eq₁]`
-- See https://github.com/leanprover-community/mathlib4/issues/5026
rw [TopCat.comp_app]
erw [CategoryTheory.IsIso.inv_hom_id_apply]
@@ -390,7 +390,7 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
V i := (Opens.toTopCat _).obj (h.V i.1 i.2)
f i j := (h.V i j).inclusion
f_id i := by
- -- Porting note: added `dsimp only`
+ -- Porting note (#10752): added `dsimp only`
dsimp only
exact (h.V_id i).symm ▸ IsIso.of_iso (Opens.inclusionTopIso (h.U i))
f_open := fun i j : h.J => (h.V i j).openEmbedding
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
import Mathlib.CategoryTheory.GlueData
-import Mathlib.CategoryTheory.ConcreteCategory.Elementwise
import Mathlib.Topology.Category.TopCat.Limits.Pullbacks
import Mathlib.Topology.Category.TopCat.Opens
import Mathlib.Tactic.LibrarySearch
@@ -211,14 +211,14 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
rw [← (InvImage.equivalence _ _ D.rel_equiv).eqvGen_iff]
refine' EqvGen.mono _ (D.eqvGen_of_π_eq h : _)
rintro _ _ ⟨x⟩
- rw [←show (sigmaIsoSigma.{u, u} _).inv _ = x from
+ rw [← show (sigmaIsoSigma.{u, u} _).inv _ = x from
ConcreteCategory.congr_hom (sigmaIsoSigma.{u, u} _).hom_inv_id x]
generalize (sigmaIsoSigma.{u, u} D.V).hom x = x'
obtain ⟨⟨i, j⟩, y⟩ := x'
unfold InvImage MultispanIndex.fstSigmaMap MultispanIndex.sndSigmaMap
simp only [Opens.inclusion_apply, TopCat.comp_app, sigmaIsoSigma_inv_apply,
Cofan.mk_ι_app]
- rw [←comp_apply, colimit.ι_desc, ←comp_apply, colimit.ι_desc]
+ rw [← comp_apply, colimit.ι_desc, ← comp_apply, colimit.ι_desc]
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
exact Or.inr ⟨y, ⟨rfl, rfl⟩⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
@@ -208,7 +208,6 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
rw [←
show _ = Sigma.mk j y from ConcreteCategory.congr_hom (sigmaIsoSigma.{_, u} D.U).inv_hom_id _]
change InvImage D.Rel (sigmaIsoSigma.{_, u} D.U).hom _ _
- simp only [TopCat.sigmaIsoSigma_inv_apply]
rw [← (InvImage.equivalence _ _ D.rel_equiv).eqvGen_iff]
refine' EqvGen.mono _ (D.eqvGen_of_π_eq h : _)
rintro _ _ ⟨x⟩
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -233,7 +233,7 @@ set_option linter.uppercaseLean3 false in
theorem ι_injective (i : D.J) : Function.Injective (𝖣.ι i) := by
intro x y h
- rcases(D.ι_eq_iff_rel _ _ _ _).mp h with (⟨⟨⟩⟩ | ⟨_, e₁, e₂⟩)
+ rcases (D.ι_eq_iff_rel _ _ _ _).mp h with (⟨⟨⟩⟩ | ⟨_, e₁, e₂⟩)
· rfl
· dsimp only at *
-- porting note: there were `cases e₁` and `cases e₂`, instead of the `rw`
@@ -174,8 +174,10 @@ theorem eqvGen_of_π_eq
let diagram := parallelPair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
have : colimit.ι diagram one x = colimit.ι diagram one y := by
dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at h
- rw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
simp
+ rfl
have :
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ =
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ :=
@@ -219,7 +221,7 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
Cofan.mk_ι_app]
rw [←comp_apply, colimit.ι_desc, ←comp_apply, colimit.ι_desc]
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
- exact Or.inr ⟨y, by dsimp [GlueData.diagram]; simp only [true_and]; rfl⟩
+ exact Or.inr ⟨y, ⟨rfl, rfl⟩⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
rfl
dsimp only at *
@@ -410,8 +412,19 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
simp only [Iso.inv_hom_id_assoc, Category.assoc, Category.id_comp]
rw [← Iso.eq_inv_comp, Iso.inv_hom_id]
ext1 ⟨⟨⟨x, hx⟩, ⟨x', hx'⟩⟩, rfl : x = x'⟩
- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
- Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
+ -- The next 9 tactics (up to `convert ...` were a single `rw` before leanprover/lean4#2644
+ -- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
+ -- Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
+ rw [comp_app] --, comp_app, id_app]
+ -- erw [ContinuousMap.coe_mk]
+ conv_lhs => erw [ContinuousMap.coe_mk]
+ erw [id_app]
+ rw [ContinuousMap.coe_mk]
+ erw [Subtype.mk_eq_mk]
+ rw [Prod.mk.inj_iff]
+ erw [Subtype.mk_eq_mk]
+ rw [Subtype.ext_iff]
+ rw [and_self_iff]
convert congr_arg Subtype.val (h.t_inv k i ⟨x, hx'⟩) using 3
refine Subtype.ext ?_
exact h.cocycle i j k ⟨x, hx⟩ hx'
@@ -174,10 +174,8 @@ theorem eqvGen_of_π_eq
let diagram := parallelPair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
have : colimit.ι diagram one x = colimit.ι diagram one y := by
dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at h
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
+ rw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
simp
- rfl
have :
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ =
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ :=
@@ -221,7 +219,7 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
Cofan.mk_ι_app]
rw [←comp_apply, colimit.ι_desc, ←comp_apply, colimit.ι_desc]
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
- exact Or.inr ⟨y, ⟨rfl, rfl⟩⟩
+ exact Or.inr ⟨y, by dsimp [GlueData.diagram]; simp only [true_and]; rfl⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
rfl
dsimp only at *
@@ -412,19 +410,8 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
simp only [Iso.inv_hom_id_assoc, Category.assoc, Category.id_comp]
rw [← Iso.eq_inv_comp, Iso.inv_hom_id]
ext1 ⟨⟨⟨x, hx⟩, ⟨x', hx'⟩⟩, rfl : x = x'⟩
- -- The next 9 tactics (up to `convert ...` were a single `rw` before leanprover/lean4#2644
- -- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
- -- Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
- rw [comp_app] --, comp_app, id_app]
- -- erw [ContinuousMap.coe_mk]
- conv_lhs => erw [ContinuousMap.coe_mk]
- erw [id_app]
- rw [ContinuousMap.coe_mk]
- erw [Subtype.mk_eq_mk]
- rw [Prod.mk.inj_iff]
- erw [Subtype.mk_eq_mk]
- rw [Subtype.ext_iff]
- rw [and_self_iff]
+ rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
+ Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
convert congr_arg Subtype.val (h.t_inv k i ⟨x, hx'⟩) using 3
refine Subtype.ext ?_
exact h.cocycle i j k ⟨x, hx⟩ hx'
@@ -174,8 +174,10 @@ theorem eqvGen_of_π_eq
let diagram := parallelPair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
have : colimit.ι diagram one x = colimit.ι diagram one y := by
dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at h
- rw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
simp
+ rfl
have :
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ =
(colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ :=
@@ -219,7 +221,7 @@ theorem ι_eq_iff_rel (i j : D.J) (x : D.U i) (y : D.U j) :
Cofan.mk_ι_app]
rw [←comp_apply, colimit.ι_desc, ←comp_apply, colimit.ι_desc]
erw [sigmaIsoSigma_hom_ι_apply, sigmaIsoSigma_hom_ι_apply]
- exact Or.inr ⟨y, by dsimp [GlueData.diagram]; simp only [true_and]; rfl⟩
+ exact Or.inr ⟨y, ⟨rfl, rfl⟩⟩
· rintro (⟨⟨⟩⟩ | ⟨z, e₁, e₂⟩)
rfl
dsimp only at *
@@ -410,8 +412,19 @@ def mk' (h : MkCore.{u}) : TopCat.GlueData where
simp only [Iso.inv_hom_id_assoc, Category.assoc, Category.id_comp]
rw [← Iso.eq_inv_comp, Iso.inv_hom_id]
ext1 ⟨⟨⟨x, hx⟩, ⟨x', hx'⟩⟩, rfl : x = x'⟩
- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
- Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
+ -- The next 9 tactics (up to `convert ...` were a single `rw` before leanprover/lean4#2644
+ -- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
+ -- Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
+ rw [comp_app] --, comp_app, id_app]
+ -- erw [ContinuousMap.coe_mk]
+ conv_lhs => erw [ContinuousMap.coe_mk]
+ erw [id_app]
+ rw [ContinuousMap.coe_mk]
+ erw [Subtype.mk_eq_mk]
+ rw [Prod.mk.inj_iff]
+ erw [Subtype.mk_eq_mk]
+ rw [Subtype.ext_iff]
+ rw [and_self_iff]
convert congr_arg Subtype.val (h.t_inv k i ⟨x, hx'⟩) using 3
refine Subtype.ext ?_
exact h.cocycle i j k ⟨x, hx⟩ hx'
@@ -168,7 +168,6 @@ theorem eqvGen_of_π_eq
𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap)
x y := by
delta GlueData.π Multicoequalizer.sigmaπ at h
- simp_rw [comp_app] at h
-- Porting note: inlined `inferInstance` instead of leaving as a side goal.
replace h := (TopCat.mono_iff_injective (Multicoequalizer.isoCoequalizer 𝖣.diagram).inv).mp
inferInstance h
@@ -50,8 +50,6 @@ provided.
* `TopCat.GlueData.ι_openEmbedding`: Each of the `ι i`s are open embeddings.
-/
-set_option autoImplicit false
-
noncomputable section
convert
infer instances from goal and allow tc failure (#6041)
Changes the way the term is elaborated so that typeclass inference is tolerated and so that instances are allowed to come from the goal without re-inferring them.
@@ -356,8 +356,12 @@ structure MkCore where
set_option linter.uppercaseLean3 false in
#align Top.glue_data.mk_core TopCat.GlueData.MkCore
-theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x :=
-Subtype.eq <| by convert h.t_id j ▸ (h.cocycle j i j x <| h.V_id j ▸ ⟨⟩) using 1
+theorem MkCore.t_inv (h : MkCore) (i j : h.J) (x : h.V j i) : h.t i j ((h.t j i) x) = x := by
+ have := h.cocycle j i j x ?_
+ rw [h.t_id] at this
+ convert Subtype.eq this
+ rw [h.V_id]
+ trivial
set_option linter.uppercaseLean3 false in
#align Top.glue_data.mk_core.t_inv TopCat.GlueData.MkCore.t_inv
@@ -2,11 +2,6 @@
Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module topology.gluing
-! leanprover-community/mathlib commit 178a32653e369dce2da68dc6b2694e385d484ef1
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.GlueData
import Mathlib.CategoryTheory.ConcreteCategory.Elementwise
@@ -14,6 +9,8 @@ import Mathlib.Topology.Category.TopCat.Limits.Pullbacks
import Mathlib.Topology.Category.TopCat.Opens
import Mathlib.Tactic.LibrarySearch
+#align_import topology.gluing from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
+
/-!
# Gluing Topological spaces
@@ -525,7 +525,7 @@ set_option linter.uppercaseLean3 false in
#align Top.glue_data.range_from_open_subsets_glue TopCat.GlueData.range_fromOpenSubsetsGlue
/-- The gluing of an open cover is homeomomorphic to the original space. -/
-def openCoverGlueHomeo (h : (⋃ i, (U i : Set α)) = Set.univ) :
+def openCoverGlueHomeo (h : ⋃ i, (U i : Set α) = Set.univ) :
(ofOpenSubsets U).toGlueData.glued ≃ₜ α :=
Homeomorph.homeomorphOfContinuousOpen
(Equiv.ofBijective (fromOpenSubsetsGlue U)
@@ -141,20 +141,13 @@ theorem rel_equiv : Equivalence D.Rel :=
rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩); exact id
rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩); exact Or.inr ⟨x, e₁, e₂⟩
let z := (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨⟨_, _⟩, e₂.trans e₃.symm⟩
- have eq₁ : (D.t j i) ((pullback.fst : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by
- -- Porting note: was `simp`
- -- See https://github.com/leanprover-community/mathlib4/issues/5026
- rw [TopCat.pullbackIsoProdSubtype_inv_fst_apply, Subtype.coe_mk]
- erw [CategoryTheory.GlueData.t_inv_apply]
+ have eq₁ : (D.t j i) ((pullback.fst : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by simp
have eq₂ : (pullback.snd : _ ⟶ D.V _) z = y := pullbackIsoProdSubtype_inv_snd_apply _ _ _
clear_value z
right
use (pullback.fst : _ ⟶ D.V (i, k)) (D.t' _ _ _ z)
dsimp only at *
- -- porting note: `rw + clear` was `substs e₁ e₃ e₄ eq₁ eq₂`
- -- error: `failed to create binder due to failure when reverting variable dependencies`
- rw [← e₁, ← e₃, ← e₄, ← eq₁, ← eq₂] at *
- clear eq₂ eq₁ e₄ e₃ e₁
+ substs eq₁ eq₂ e₁ e₃ e₄
have h₁ : D.t' j i k ≫ pullback.fst ≫ D.f i k = pullback.fst ≫ D.t j i ≫ D.f i j := by
rw [← 𝖣.t_fac_assoc]; congr 1; exact pullback.condition
have h₂ : D.t' j i k ≫ pullback.fst ≫ D.t i k ≫ D.f k i = pullback.snd ≫ D.t j k ≫ D.f k j := by
@@ -462,6 +455,8 @@ def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
set_option linter.uppercaseLean3 false in
#align Top.glue_data.from_open_subsets_glue TopCat.GlueData.fromOpenSubsetsGlue
+-- Porting note: `elementwise` here produces a bad lemma,
+-- where too much has been simplified, despite the `nosimp`.
@[simp, elementwise nosimp]
theorem ι_fromOpenSubsetsGlue (i : J) :
(ofOpenSubsets U).toGlueData.ι i ≫ fromOpenSubsetsGlue U = Opens.inclusion _ :=
@@ -474,7 +469,7 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective y
-- porting note: now it is `erw`, it was `rw`
- -- https://github.com/leanprover-community/mathlib4/issues/5164
+ -- see the porting note on `ι_fromOpenSubsetsGlue`
erw [ι_fromOpenSubsetsGlue_apply, ι_fromOpenSubsetsGlue_apply] at e
change x = y at e
subst e
@@ -502,7 +497,7 @@ theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) := by
refine' Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
· refine' ⟨Set.mem_image_of_mem _ hx, _⟩
-- porting note: another `rw ↦ erw`
- -- https://github.com/leanprover-community/mathlib4/issues/5164
+ -- See above.
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.mem_range_self _
set_option linter.uppercaseLean3 false in
@@ -520,7 +515,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
· rintro ⟨x, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
-- porting note: another `rw ↦ erw`
- -- https://github.com/leanprover-community/mathlib4/issues/5164
+ -- See above
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.subset_iUnion _ i hx'
· rintro ⟨_, ⟨i, rfl⟩, hx⟩
@@ -474,6 +474,7 @@ theorem fromOpenSubsetsGlue_injective : Function.Injective (fromOpenSubsetsGlue
obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective y
-- porting note: now it is `erw`, it was `rw`
+ -- https://github.com/leanprover-community/mathlib4/issues/5164
erw [ι_fromOpenSubsetsGlue_apply, ι_fromOpenSubsetsGlue_apply] at e
change x = y at e
subst e
@@ -501,6 +502,7 @@ theorem fromOpenSubsetsGlue_isOpenMap : IsOpenMap (fromOpenSubsetsGlue U) := by
refine' Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
· refine' ⟨Set.mem_image_of_mem _ hx, _⟩
-- porting note: another `rw ↦ erw`
+ -- https://github.com/leanprover-community/mathlib4/issues/5164
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.mem_range_self _
set_option linter.uppercaseLean3 false in
@@ -518,6 +520,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
· rintro ⟨x, rfl⟩
obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
-- porting note: another `rw ↦ erw`
+ -- https://github.com/leanprover-community/mathlib4/issues/5164
erw [ι_fromOpenSubsetsGlue_apply]
exact Set.subset_iUnion _ i hx'
· rintro ⟨_, ⟨i, rfl⟩, hx⟩
@@ -17,7 +17,8 @@ import Mathlib.Tactic.LibrarySearch
/-!
# Gluing Topological spaces
-Given a family of gluing data (see `category_theory/glue_data`), we can then glue them together.
+Given a family of gluing data (see `Mathlib/CategoryTheory/GlueData.lean`), we can then glue them
+together.
The construction should be "sealed" and considered as a black box, while only using the API
provided.
@@ -31,7 +32,7 @@ provided.
* `CategoryTheory.GlueData.ι`: The immersion `ι i : U i ⟶ glued` for each `i : ι`.
* `TopCat.GlueData.Rel`: A relation on `Σ i, D.U i` defined by `⟨i, x⟩ ~ ⟨j, y⟩` iff
`⟨i, x⟩ = ⟨j, y⟩` or `t i j x = y`. See `TopCat.GlueData.ι_eq_iff_rel`.
-* `Top.glue_data.mk`: A constructor of `glue_data` whose conditions are stated in terms of
+* `TopCat.GlueData.mk`: A constructor of `GlueData` whose conditions are stated in terms of
elements rather than subobjects and pullbacks.
* `TopCat.GlueData.ofOpenSubsets`: Given a family of open sets, we may glue them into a new
topological space. This new space embeds into the original space, and is homeomorphic to it if
@@ -47,8 +48,8 @@ provided.
* `TopCat.GlueData.image_inter`: The intersection of the images of `U i` and `U j` in `glued` is
`V i j`.
* `TopCat.GlueData.preimage_range`: The preimage of the image of `U i` in `U j` is `V i j`.
-* `Top.glue_data.preimage_image_eq_preimage_f`: The preimage of the image of some `U ⊆ U i` is
- given by the preimage along `f j i`.
+* `TopCat.GlueData.preimage_image_eq_image`: The preimage of the image of some `U ⊆ U i` is
+ given by XXX.
* `TopCat.GlueData.ι_openEmbedding`: Each of the `ι i`s are open embeddings.
-/
@@ -84,8 +85,8 @@ such that
We can then glue the topological spaces `U i` together by identifying `V i j` with `V j i`, such
that the `U i`'s are open subspaces of the glued space.
-Most of the times it would be easier to use the constructor `Top.glue_data.mk'` where the conditions
-are stated in a less categorical way.
+Most of the times it would be easier to use the constructor `TopCat.GlueData.mk'` where the
+conditions are stated in a less categorical way.
-/
-- Porting note: removed @[nolint has_nonempty_instance]
structure GlueData extends GlueData TopCat where
@@ -373,7 +374,7 @@ set_option linter.uppercaseLean3 false in
instance (h : MkCore.{u}) (i j : h.J) : IsIso (h.t i j) := by
use h.t j i; constructor <;> ext1; exacts [h.t_inv _ _ _, h.t_inv _ _ _]
-/-- (Implementation) the restricted transition map to be fed into `glue_data`. -/
+/-- (Implementation) the restricted transition map to be fed into `TopCat.GlueData`. -/
def MkCore.t' (h : MkCore.{u}) (i j k : h.J) :
pullback (h.V i j).inclusion (h.V i k).inclusion ⟶
pullback (h.V j k).inclusion (h.V j i).inclusion := by
@@ -453,8 +454,8 @@ set_option linter.uppercaseLean3 false in
#align Top.glue_data.of_open_subsets TopCat.GlueData.ofOpenSubsets
/-- The canonical map from the glue of a family of open subsets `α` into `α`.
-This map is an open embedding (`from_open_subsets_glue_open_embedding`),
-and its range is `⋃ i, (U i : Set α)` (`range_from_open_subsets_glue`).
+This map is an open embedding (`fromOpenSubsetsGlue_openEmbedding`),
+and its range is `⋃ i, (U i : Set α)` (`range_fromOpenSubsetsGlue`).
-/
def fromOpenSubsetsGlue : (ofOpenSubsets U).toGlueData.glued ⟶ TopCat.of α :=
Multicoequalizer.desc _ _ (fun x => Opens.inclusion _) (by rintro ⟨i, j⟩; ext x; rfl)
@@ -523,7 +524,7 @@ theorem range_fromOpenSubsetsGlue : Set.range (fromOpenSubsetsGlue U) = ⋃ i, (
rename_i x
refine' ⟨(ofOpenSubsets U).toGlueData.ι i ⟨x, hx⟩, ι_fromOpenSubsetsGlue_apply _ _ _⟩
set_option linter.uppercaseLean3 false in
-#align Top.glue_data.range_fromOpenSubsetsGlue TopCat.GlueData.range_fromOpenSubsetsGlue
+#align Top.glue_data.range_from_open_subsets_glue TopCat.GlueData.range_fromOpenSubsetsGlue
/-- The gluing of an open cover is homeomomorphic to the original space. -/
def openCoverGlueHomeo (h : (⋃ i, (U i : Set α)) = Set.univ) :
The unported dependencies are