category_theory.cofiltered_system
⟷
Mathlib.CategoryTheory.CofilteredSystem
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
@@ -3,9 +3,9 @@ Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rig
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-/
-import CategoryTheory.Filtered
+import CategoryTheory.Filtered.Basic
import Data.Set.Finite
-import Topology.Category.Top.Limits.Konig
+import Topology.Category.TopCat.Limits.Konig
#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -103,7 +103,7 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
use fun j => (u ⟨j⟩).down
intro j j' f
have h := @hu (⟨j⟩ : J') (⟨j'⟩ : J') (ULift.up f)
- simp only [as_small.down, functor.comp_map, ulift_functor_map, functor.op_map] at h
+ simp only [as_small.down, functor.comp_map, ulift_functor_map, functor.op_map] at h
simp_rw [← h]
rfl
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
@@ -283,7 +283,7 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
refine' ⟨⟨y, mem_Inter.2 fun g₂ => _⟩, Subtype.ext _⟩
· obtain ⟨j₄, f₄, h₄⟩ := cone_maps g₂ ((f₃ ≫ f₂) ≫ g₁)
obtain ⟨y, rfl⟩ := F.mem_eventual_range_iff.1 hy f₄
- rw [← map_comp_apply] at h₃
+ rw [← map_comp_apply] at h₃
rw [mem_preimage, ← map_comp_apply, h₄, ← category.assoc, map_comp_apply, h₃, ←
map_comp_apply]
apply mem_Inter.1 hx
@@ -308,7 +308,7 @@ theorem isMittagLeffler_of_exists_finite_range
rintro _ ⟨⟨k', g'⟩, rfl⟩ hl
refine' (eq_of_le_of_not_lt hl _).ge
have := hmin _ ⟨k', g', (m.finite_to_set.subset <| hm.substr hl).coe_toFinset⟩
- rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
+ rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range
-/
@@ -396,8 +396,8 @@ theorem eval_section_injective_of_eventually_injective {j}
by
refine' fun s₀ s₁ h => Subtype.ext <| funext fun k => _
obtain ⟨m, mi, mk, _⟩ := cone_objs i k
- dsimp at h
- rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
+ dsimp at h
+ rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
rw [← s₀.prop mk, ← s₁.prop mk]
refine' congr_arg _ (Finj m (mi ≫ f) h)
#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injective
@@ -417,8 +417,8 @@ theorem eval_section_surjective_of_surjective (i : J) :
obtain ⟨sec, h⟩ := nonempty_sections_of_finite_cofiltered_system (F.to_preimages s)
refine' ⟨⟨fun j => (sec j).val, fun j k jk => by simpa [Subtype.ext_iff] using h jk⟩, _⟩
· have := (sec i).Prop
- simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
- replace this := this (𝟙 i); rwa [map_id_apply] at this
+ simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
+ replace this := this (𝟙 i); rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -215,7 +215,7 @@ def toPreimages : J ⥤ Type v where
rw [mem_Inter] at h ⊢; intro f
rw [← mem_preimage, preimage_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
- map_id' j := by simp_rw [F.map_id]; ext; rfl
+ map_id'' j := by simp_rw [F.map_id]; ext; rfl
map_comp' j k l f g := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
-/
@@ -320,7 +320,7 @@ def toEventualRanges : J ⥤ Type v
where
obj j := F.eventualRange j
map i j f := (F.eventualRange_mapsTo f).restrict _ _ _
- map_id' i := by simp_rw [F.map_id]; ext; rfl
+ map_id'' i := by simp_rw [F.map_id]; ext; rfl
map_comp' _ _ _ _ _ := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rig
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-/
-import Mathbin.CategoryTheory.Filtered
-import Mathbin.Data.Set.Finite
-import Mathbin.Topology.Category.Top.Limits.Konig
+import CategoryTheory.Filtered
+import Data.Set.Finite
+import Topology.Category.Top.Limits.Konig
#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-
-! This file was ported from Lean 3 source module category_theory.cofiltered_system
-! leanprover-community/mathlib commit 2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Filtered
import Mathbin.Data.Set.Finite
import Mathbin.Topology.Category.Top.Limits.Konig
+#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe"
+
/-!
# Cofiltered systems
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -66,6 +66,7 @@ open CategoryTheory CategoryTheory.IsCofiltered Set CategoryTheory.FunctorToType
section FiniteKonig
+#print nonempty_sections_of_finite_cofiltered_system.init /-
/-- This bootstraps `nonempty_sections_of_finite_inverse_system`. In this version,
the `F` functor is between categories of the same universe, and it is an easy
corollary to `Top.nonempty_limit_cone_of_compact_t2_inverse_system`. -/
@@ -80,7 +81,9 @@ theorem nonempty_sections_of_finite_cofiltered_system.init {J : Type u} [SmallCa
obtain ⟨⟨u, hu⟩⟩ := TopCat.nonempty_limitCone_of_compact_t2_cofiltered_system F'
exact ⟨u, fun _ _ => hu⟩
#align nonempty_sections_of_finite_cofiltered_system.init nonempty_sections_of_finite_cofiltered_system.init
+-/
+#print nonempty_sections_of_finite_cofiltered_system /-
/-- The cofiltered limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_inverse_system` for a specialization to inverse limits. -/
@@ -107,7 +110,9 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
simp_rw [← h]
rfl
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
+-/
+#print nonempty_sections_of_finite_inverse_system /-
/-- The inverse limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_cofiltered_system` for a generalization to cofiltered limits.
@@ -127,6 +132,7 @@ theorem nonempty_sections_of_finite_inverse_system {J : Type u} [Preorder J] [Is
exact ⟨isEmptyElim, isEmptyElim⟩
· exact nonempty_sections_of_finite_cofiltered_system _
#align nonempty_sections_of_finite_inverse_system nonempty_sections_of_finite_inverse_system
+-/
end FiniteKonig
@@ -136,17 +142,21 @@ namespace Functor
variable {J : Type u} [Category J] (F : J ⥤ Type v) {i j k : J} (s : Set (F.obj i))
+#print CategoryTheory.Functor.eventualRange /-
/-- The eventual range of the functor `F : J ⥤ Type v` at index `j : J` is the intersection
of the ranges of all maps `F.map f` with `i : J` and `f : i ⟶ j`.
-/
def eventualRange (j : J) :=
⋂ (i) (f : i ⟶ j), range (F.map f)
#align category_theory.functor.eventual_range CategoryTheory.Functor.eventualRange
+-/
+#print CategoryTheory.Functor.mem_eventualRange_iff /-
theorem mem_eventualRange_iff {x : F.obj j} :
x ∈ F.eventualRange j ↔ ∀ ⦃i⦄ (f : i ⟶ j), x ∈ range (F.map f) :=
mem_iInter₂
#align category_theory.functor.mem_eventual_range_iff CategoryTheory.Functor.mem_eventualRange_iff
+-/
#print CategoryTheory.Functor.IsMittagLeffler /-
/-- The functor `F : J ⥤ Type v` satisfies the Mittag-Leffler condition if for all `j : J`,
@@ -160,13 +170,16 @@ def IsMittagLeffler : Prop :=
#align category_theory.functor.is_mittag_leffler CategoryTheory.Functor.IsMittagLeffler
-/
+#print CategoryTheory.Functor.isMittagLeffler_iff_eventualRange /-
theorem isMittagLeffler_iff_eventualRange :
F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _) (f : i ⟶ j), F.eventualRange j = range (F.map f) :=
forall_congr' fun j =>
exists₂_congr fun i f =>
⟨fun h => (iInter₂_subset _ _).antisymm <| subset_iInter₂ h, fun h => h ▸ iInter₂_subset⟩
#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRange
+-/
+#print CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange /-
theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i ⊆ F.map f '' F.eventualRange j :=
by
@@ -175,7 +188,9 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
obtain ⟨x, rfl⟩ := F.mem_eventual_range_iff.1 hx (g ≫ f)
refine' ⟨_, ⟨x, rfl⟩, by simpa only [F.map_comp]⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
+-/
+#print CategoryTheory.Functor.eventualRange_eq_range_precomp /-
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
(h : F.eventualRange k = range (F.map g)) : F.eventualRange k = range (F.map <| f ≫ g) :=
by
@@ -183,12 +198,16 @@ theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
· apply Inter₂_subset
· rw [h, F.map_comp]; apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precomp
+-/
+#print CategoryTheory.Functor.isMittagLeffler_of_surjective /-
theorem isMittagLeffler_of_surjective (h : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) :
F.IsMittagLeffler := fun j =>
⟨j, 𝟙 j, fun k g => by rw [map_id, types_id, range_id, (h g).range_eq]⟩
#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjective
+-/
+#print CategoryTheory.Functor.toPreimages /-
/-- The subfunctor of `F` obtained by restricting to the preimages of a set `s ∈ F.obj i`. -/
@[simps]
def toPreimages : J ⥤ Type v where
@@ -202,13 +221,17 @@ def toPreimages : J ⥤ Type v where
map_id' j := by simp_rw [F.map_id]; ext; rfl
map_comp' j k l f g := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
+-/
+#print CategoryTheory.Functor.toPreimages_finite /-
instance toPreimages_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite ((F.toPreimages s).obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finite
+-/
variable [IsCofilteredOrEmpty J]
+#print CategoryTheory.Functor.eventualRange_mapsTo /-
theorem eventualRange_mapsTo (f : j ⟶ i) :
(F.eventualRange j).MapsTo (F.map f) (F.eventualRange i) := fun x hx =>
by
@@ -219,12 +242,16 @@ theorem eventualRange_mapsTo (f : j ⟶ i) :
rw [← map_comp_apply, he, F.map_comp]
exact ⟨_, rfl⟩
#align category_theory.functor.eventual_range_maps_to CategoryTheory.Functor.eventualRange_mapsTo
+-/
+#print CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange /-
theorem IsMittagLeffler.eq_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i = F.map f '' F.eventualRange j :=
(h.subset_image_eventualRange F f).antisymm <| mapsTo'.1 (F.eventualRange_mapsTo f)
#align category_theory.functor.is_mittag_leffler.eq_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange
+-/
+#print CategoryTheory.Functor.eventualRange_eq_iff /-
theorem eventualRange_eq_iff {f : i ⟶ j} :
F.eventualRange j = range (F.map f) ↔
∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
@@ -236,13 +263,17 @@ theorem eventualRange_eq_iff {f : i ⟶ j} :
rw [he, F.map_comp]
apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_iff CategoryTheory.Functor.eventualRange_eq_iff
+-/
+#print CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp /-
theorem isMittagLeffler_iff_subset_range_comp :
F.IsMittagLeffler ↔
∀ j : J, ∃ (i : _) (f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
by simp_rw [is_mittag_leffler_iff_eventual_range, eventual_range_eq_iff]
#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp
+-/
+#print CategoryTheory.Functor.IsMittagLeffler.toPreimages /-
theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).IsMittagLeffler :=
(isMittagLeffler_iff_subset_range_comp _).2 fun j =>
by
@@ -262,7 +293,9 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
· simp_rw [to_preimages_map, maps_to.coe_restrict_apply, Subtype.coe_mk]
rw [← category.assoc, map_comp_apply, h₃, map_comp_apply]
#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimages
+-/
+#print CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range /-
theorem isMittagLeffler_of_exists_finite_range
(h : ∀ j : J, ∃ (i : _) (f : i ⟶ j), (range <| F.map f).Finite) : F.IsMittagLeffler := fun j =>
by
@@ -280,6 +313,7 @@ theorem isMittagLeffler_of_exists_finite_range
have := hmin _ ⟨k', g', (m.finite_to_set.subset <| hm.substr hl).coe_toFinset⟩
rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range
+-/
#print CategoryTheory.Functor.toEventualRanges /-
/-- The subfunctor of `F` obtained by restricting to the eventual range at each index.
@@ -294,10 +328,13 @@ def toEventualRanges : J ⥤ Type v
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
-/
+#print CategoryTheory.Functor.toEventualRanges_finite /-
instance toEventualRanges_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite (F.toEventualRanges.obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finite
+-/
+#print CategoryTheory.Functor.toEventualRangesSectionsEquiv /-
/-- The sections of the functor `F : J ⥤ Type v` are in bijection with the sections of
`F.eventual_ranges`.
-/
@@ -309,7 +346,9 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
left_inv _ := by ext; rfl
right_inv _ := by ext; rfl
#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquiv
+-/
+#print CategoryTheory.Functor.surjective_toEventualRanges /-
/--
If `F` satisfies the Mittag-Leffler condition, its restriction to eventual ranges is a surjective
functor.
@@ -318,7 +357,9 @@ theorem surjective_toEventualRanges (h : F.IsMittagLeffler) ⦃i j⦄ (f : i ⟶
(F.toEventualRanges.map f).Surjective := fun ⟨x, hx⟩ => by
obtain ⟨y, hy, rfl⟩ := h.subset_image_eventual_range F f hx; exact ⟨⟨y, hy⟩, rfl⟩
#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRanges
+-/
+#print CategoryTheory.Functor.toEventualRanges_nonempty /-
/-- If `F` is nonempty at each index and Mittag-Leffler, then so is `F.to_eventual_ranges`. -/
theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (F.obj j)] (j : J) :
Nonempty (F.toEventualRanges.obj j) :=
@@ -326,14 +367,18 @@ theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (
let ⟨i, f, h⟩ := F.isMittagLeffler_iff_eventualRange.1 h j
rw [to_eventual_ranges_obj, h]; infer_instance
#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonempty
+-/
+#print CategoryTheory.Functor.thin_diagram_of_surjective /-
/-- If `F` has all arrows surjective, then it "factors through a poset". -/
theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) {i j}
(f g : i ⟶ j) : F.map f = F.map g :=
let ⟨k, φ, hφ⟩ := cone_maps f g
(Fsur φ).injective_comp_right <| by simp_rw [← types_comp, ← F.map_comp, hφ]
#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjective
+-/
+#print CategoryTheory.Functor.toPreimages_nonempty_of_surjective /-
theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
(Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) (hs : s.Nonempty) (j) :
Nonempty ((F.toPreimages s).obj j) :=
@@ -345,7 +390,9 @@ theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
obtain ⟨x, rfl⟩ := Fsur ji y
exact ⟨x, fun ji' => (F.thin_diagram_of_surjective Fsur ji' ji).symm ▸ ys⟩
#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjective
+-/
+#print CategoryTheory.Functor.eval_section_injective_of_eventually_injective /-
theorem eval_section_injective_of_eventually_injective {j}
(Finj : ∀ (i) (f : i ⟶ j), (F.map f).Injective) (i) (f : i ⟶ j) :
(fun s : F.sections => s.val j).Injective :=
@@ -357,14 +404,14 @@ theorem eval_section_injective_of_eventually_injective {j}
rw [← s₀.prop mk, ← s₁.prop mk]
refine' congr_arg _ (Finj m (mi ≫ f) h)
#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injective
+-/
section FiniteCofilteredSystem
variable [∀ j : J, Nonempty (F.obj j)] [∀ j : J, Finite (F.obj j)]
(Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective)
-include Fsur
-
+#print CategoryTheory.Functor.eval_section_surjective_of_surjective /-
theorem eval_section_surjective_of_surjective (i : J) :
(fun s : F.sections => s.val i).Surjective := fun x =>
by
@@ -376,7 +423,9 @@ theorem eval_section_surjective_of_surjective (i : J) :
simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
replace this := this (𝟙 i); rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
+-/
+#print CategoryTheory.Functor.eventually_injective /-
theorem eventually_injective [Nonempty J] [Finite F.sections] :
∃ j, ∀ (i) (f : i ⟶ j), (F.map f).Injective :=
by
@@ -392,6 +441,7 @@ theorem eventually_injective [Nonempty J] [Finite F.sections] :
rw [← Nat.sub_sub_self (card_le i), tsub_le_iff_tsub_le]
apply fn.argmin_le
#align category_theory.functor.eventually_injective CategoryTheory.Functor.eventually_injective
+-/
end FiniteCofilteredSystem
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -269,7 +269,7 @@ theorem isMittagLeffler_of_exists_finite_range
obtain ⟨i, hi, hf⟩ := h j
obtain ⟨m, ⟨i, f, hm⟩, hmin⟩ :=
finset.is_well_founded_lt.wf.has_min
- { s : Finset (F.obj j) | ∃ (i : _) (f : i ⟶ j), ↑s = range (F.map f) }
+ {s : Finset (F.obj j) | ∃ (i : _) (f : i ⟶ j), ↑s = range (F.map f)}
⟨_, i, hi, hf.coe_to_finset⟩
refine'
⟨i, f, fun k g =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -103,7 +103,7 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
use fun j => (u ⟨j⟩).down
intro j j' f
have h := @hu (⟨j⟩ : J') (⟨j'⟩ : J') (ULift.up f)
- simp only [as_small.down, functor.comp_map, ulift_functor_map, functor.op_map] at h
+ simp only [as_small.down, functor.comp_map, ulift_functor_map, functor.op_map] at h
simp_rw [← h]
rfl
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
@@ -156,12 +156,12 @@ in other words (see `is_mittag_leffler_iff_eventual_range`), the eventual range
by some `f : i ⟶ j`.
-/
def IsMittagLeffler : Prop :=
- ∀ j : J, ∃ (i : _)(f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ j), range (F.map f) ⊆ range (F.map g)
+ ∀ j : J, ∃ (i : _) (f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ j), range (F.map f) ⊆ range (F.map g)
#align category_theory.functor.is_mittag_leffler CategoryTheory.Functor.IsMittagLeffler
-/
theorem isMittagLeffler_iff_eventualRange :
- F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _)(f : i ⟶ j), F.eventualRange j = range (F.map f) :=
+ F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _) (f : i ⟶ j), F.eventualRange j = range (F.map f) :=
forall_congr' fun j =>
exists₂_congr fun i f =>
⟨fun h => (iInter₂_subset _ _).antisymm <| subset_iInter₂ h, fun h => h ▸ iInter₂_subset⟩
@@ -173,7 +173,7 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
obtain ⟨k, g, hg⟩ := F.is_mittag_leffler_iff_eventual_range.1 h j
rw [hg]; intro x hx
obtain ⟨x, rfl⟩ := F.mem_eventual_range_iff.1 hx (g ≫ f)
- refine' ⟨_, ⟨x, rfl⟩, by simpa only [F.map_comp] ⟩
+ refine' ⟨_, ⟨x, rfl⟩, by simpa only [F.map_comp]⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
@@ -196,7 +196,7 @@ def toPreimages : J ⥤ Type v where
map j k g :=
MapsTo.restrict (F.map g) _ _ fun x h =>
by
- rw [mem_Inter] at h⊢; intro f
+ rw [mem_Inter] at h ⊢; intro f
rw [← mem_preimage, preimage_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
map_id' j := by simp_rw [F.map_id]; ext; rfl
@@ -212,7 +212,7 @@ variable [IsCofilteredOrEmpty J]
theorem eventualRange_mapsTo (f : j ⟶ i) :
(F.eventualRange j).MapsTo (F.map f) (F.eventualRange i) := fun x hx =>
by
- rw [mem_eventual_range_iff] at hx⊢
+ rw [mem_eventual_range_iff] at hx ⊢
intro k f'
obtain ⟨l, g, g', he⟩ := cospan f f'
obtain ⟨x, rfl⟩ := hx g
@@ -239,7 +239,7 @@ theorem eventualRange_eq_iff {f : i ⟶ j} :
theorem isMittagLeffler_iff_subset_range_comp :
F.IsMittagLeffler ↔
- ∀ j : J, ∃ (i : _)(f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
+ ∀ j : J, ∃ (i : _) (f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
by simp_rw [is_mittag_leffler_iff_eventual_range, eventual_range_eq_iff]
#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp
@@ -255,7 +255,7 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
refine' ⟨⟨y, mem_Inter.2 fun g₂ => _⟩, Subtype.ext _⟩
· obtain ⟨j₄, f₄, h₄⟩ := cone_maps g₂ ((f₃ ≫ f₂) ≫ g₁)
obtain ⟨y, rfl⟩ := F.mem_eventual_range_iff.1 hy f₄
- rw [← map_comp_apply] at h₃
+ rw [← map_comp_apply] at h₃
rw [mem_preimage, ← map_comp_apply, h₄, ← category.assoc, map_comp_apply, h₃, ←
map_comp_apply]
apply mem_Inter.1 hx
@@ -264,12 +264,12 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimages
theorem isMittagLeffler_of_exists_finite_range
- (h : ∀ j : J, ∃ (i : _)(f : i ⟶ j), (range <| F.map f).Finite) : F.IsMittagLeffler := fun j =>
+ (h : ∀ j : J, ∃ (i : _) (f : i ⟶ j), (range <| F.map f).Finite) : F.IsMittagLeffler := fun j =>
by
obtain ⟨i, hi, hf⟩ := h j
obtain ⟨m, ⟨i, f, hm⟩, hmin⟩ :=
finset.is_well_founded_lt.wf.has_min
- { s : Finset (F.obj j) | ∃ (i : _)(f : i ⟶ j), ↑s = range (F.map f) }
+ { s : Finset (F.obj j) | ∃ (i : _) (f : i ⟶ j), ↑s = range (F.map f) }
⟨_, i, hi, hf.coe_to_finset⟩
refine'
⟨i, f, fun k g =>
@@ -278,7 +278,7 @@ theorem isMittagLeffler_of_exists_finite_range
rintro _ ⟨⟨k', g'⟩, rfl⟩ hl
refine' (eq_of_le_of_not_lt hl _).ge
have := hmin _ ⟨k', g', (m.finite_to_set.subset <| hm.substr hl).coe_toFinset⟩
- rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
+ rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range
#print CategoryTheory.Functor.toEventualRanges /-
@@ -352,8 +352,8 @@ theorem eval_section_injective_of_eventually_injective {j}
by
refine' fun s₀ s₁ h => Subtype.ext <| funext fun k => _
obtain ⟨m, mi, mk, _⟩ := cone_objs i k
- dsimp at h
- rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
+ dsimp at h
+ rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
rw [← s₀.prop mk, ← s₁.prop mk]
refine' congr_arg _ (Finj m (mi ≫ f) h)
#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injective
@@ -373,8 +373,8 @@ theorem eval_section_surjective_of_surjective (i : J) :
obtain ⟨sec, h⟩ := nonempty_sections_of_finite_cofiltered_system (F.to_preimages s)
refine' ⟨⟨fun j => (sec j).val, fun j k jk => by simpa [Subtype.ext_iff] using h jk⟩, _⟩
· have := (sec i).Prop
- simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
- replace this := this (𝟙 i); rwa [map_id_apply] at this
+ simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
+ replace this := this (𝟙 i); rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
theorem eventually_injective [Nonempty J] [Finite F.sections] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -66,12 +66,6 @@ open CategoryTheory CategoryTheory.IsCofiltered Set CategoryTheory.FunctorToType
section FiniteKonig
-/- warning: nonempty_sections_of_finite_cofiltered_system.init -> nonempty_sections_of_finite_cofiltered_system.init is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u1} J _inst_1] (F : CategoryTheory.Functor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1}) [hf : forall (j : J), Finite.{succ u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j)] [hne : forall (j : J), Nonempty.{succ u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j)], Set.Nonempty.{u1} (forall (j : J), CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j) (CategoryTheory.Functor.sections.{u1, u1, u1} J _inst_1 F)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u1} J _inst_1] (F : CategoryTheory.Functor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1}) [hf : forall (j : J), Finite.{succ u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j)] [hne : forall (j : J), Nonempty.{succ u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j)], Set.Nonempty.{u1} (forall (j : J), Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j) (CategoryTheory.Functor.sections.{u1, u1, u1} J _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_cofiltered_system.init nonempty_sections_of_finite_cofiltered_system.initₓ'. -/
/-- This bootstraps `nonempty_sections_of_finite_inverse_system`. In this version,
the `F` functor is between categories of the same universe, and it is an easy
corollary to `Top.nonempty_limit_cone_of_compact_t2_inverse_system`. -/
@@ -87,12 +81,6 @@ theorem nonempty_sections_of_finite_cofiltered_system.init {J : Type u} [SmallCa
exact ⟨u, fun _ _ => hu⟩
#align nonempty_sections_of_finite_cofiltered_system.init nonempty_sections_of_finite_cofiltered_system.init
-/- warning: nonempty_sections_of_finite_cofiltered_system -> nonempty_sections_of_finite_cofiltered_system is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] [_inst_4 : forall (j : J), Nonempty.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)], Set.Nonempty.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_systemₓ'. -/
/-- The cofiltered limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_inverse_system` for a specialization to inverse limits. -/
@@ -120,12 +108,6 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
rfl
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
-/- warning: nonempty_sections_of_finite_inverse_system -> nonempty_sections_of_finite_inverse_system is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (LE.le.{u1} J (Preorder.toHasLe.{u1} J _inst_1))] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (fun (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 : J) (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481 : J) => LE.le.{u1} J (Preorder.toLE.{u1} J _inst_1) x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481)] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
-Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_inverse_system nonempty_sections_of_finite_inverse_systemₓ'. -/
/-- The inverse limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_cofiltered_system` for a generalization to cofiltered limits.
@@ -154,12 +136,6 @@ namespace Functor
variable {J : Type u} [Category J] (F : J ⥤ Type v) {i j k : J} (s : Set (F.obj i))
-/- warning: category_theory.functor.eventual_range -> CategoryTheory.Functor.eventualRange is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) (j : J), Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) (j : J), Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range CategoryTheory.Functor.eventualRangeₓ'. -/
/-- The eventual range of the functor `F : J ⥤ Type v` at index `j : J` is the intersection
of the ranges of all maps `F.map f` with `i : J` and `f : i ⟶ j`.
-/
@@ -167,12 +143,6 @@ def eventualRange (j : J) :=
⋂ (i) (f : i ⟶ j), range (F.map f)
#align category_theory.functor.eventual_range CategoryTheory.Functor.eventualRange
-/- warning: category_theory.functor.mem_eventual_range_iff -> CategoryTheory.Functor.mem_eventualRange_iff is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {j : J} {x : CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j}, Iff (Membership.Mem.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)) (forall {{i : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Membership.Mem.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {j : J} {x : Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j}, Iff (Membership.mem.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)) (forall {{i : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Membership.mem.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.mem_eventual_range_iff CategoryTheory.Functor.mem_eventualRange_iffₓ'. -/
theorem mem_eventualRange_iff {x : F.obj j} :
x ∈ F.eventualRange j ↔ ∀ ⦃i⦄ (f : i ⟶ j), x ∈ range (F.map f) :=
mem_iInter₂
@@ -190,12 +160,6 @@ def IsMittagLeffler : Prop :=
#align category_theory.functor.is_mittag_leffler CategoryTheory.Functor.IsMittagLeffler
-/
-/- warning: category_theory.functor.is_mittag_leffler_iff_eventual_range -> CategoryTheory.Functor.isMittagLeffler_iff_eventualRange is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}), Iff (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}), Iff (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRangeₓ'. -/
theorem isMittagLeffler_iff_eventualRange :
F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _)(f : i ⟶ j), F.eventualRange j = range (F.map f) :=
forall_congr' fun j =>
@@ -203,12 +167,6 @@ theorem isMittagLeffler_iff_eventualRange :
⟨fun h => (iInter₂_subset _ _).antisymm <| subset_iInter₂ h, fun h => h ▸ iInter₂_subset⟩
#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRange
-/- warning: category_theory.functor.is_mittag_leffler.subset_image_eventual_range -> CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J}, (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i) (Set.image.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J}, (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i) (Set.image.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRangeₓ'. -/
theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i ⊆ F.map f '' F.eventualRange j :=
by
@@ -218,12 +176,6 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
refine' ⟨_, ⟨x, rfl⟩, by simpa only [F.map_comp] ⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
-/- warning: category_theory.functor.eventual_range_eq_range_precomp -> CategoryTheory.Functor.eventualRange_eq_range_precomp is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} {k : J} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j k), (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F k) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j k g))) -> (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F k) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i k (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) i j k f g))))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} {k : J} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j k), (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F k) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j k g))) -> (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F k) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i k (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) i j k f g))))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precompₓ'. -/
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
(h : F.eventualRange k = range (F.map g)) : F.eventualRange k = range (F.map <| f ≫ g) :=
by
@@ -232,23 +184,11 @@ theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
· rw [h, F.map_comp]; apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precomp
-/- warning: category_theory.functor.is_mittag_leffler_of_surjective -> CategoryTheory.Functor.isMittagLeffler_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}), (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F)
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}), (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjectiveₓ'. -/
theorem isMittagLeffler_of_surjective (h : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) :
F.IsMittagLeffler := fun j =>
⟨j, 𝟙 j, fun k g => by rw [map_id, types_id, range_id, (h g).range_eq]⟩
#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjective
-/- warning: category_theory.functor.to_preimages -> CategoryTheory.Functor.toPreimages is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J}, (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) -> (CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2})
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J}, (Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) i)) -> (CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2})
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimagesₓ'. -/
/-- The subfunctor of `F` obtained by restricting to the preimages of a set `s ∈ F.obj i`. -/
@[simps]
def toPreimages : J ⥤ Type v where
@@ -263,24 +203,12 @@ def toPreimages : J ⥤ Type v where
map_comp' j k l f g := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
-/- warning: category_theory.functor.to_preimages_finite -> CategoryTheory.Functor.toPreimages_finite is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s) j)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) i)) [_inst_2 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s)) j)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finiteₓ'. -/
instance toPreimages_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite ((F.toPreimages s).obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finite
variable [IsCofilteredOrEmpty J]
-/- warning: category_theory.functor.eventual_range_maps_to -> CategoryTheory.Functor.eventualRange_mapsTo is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), Set.MapsTo.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i)
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), Set.MapsTo.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_maps_to CategoryTheory.Functor.eventualRange_mapsToₓ'. -/
theorem eventualRange_mapsTo (f : j ⟶ i) :
(F.eventualRange j).MapsTo (F.map f) (F.eventualRange i) := fun x hx =>
by
@@ -292,23 +220,11 @@ theorem eventualRange_mapsTo (f : j ⟶ i) :
exact ⟨_, rfl⟩
#align category_theory.functor.eventual_range_maps_to CategoryTheory.Functor.eventualRange_mapsTo
-/- warning: category_theory.functor.is_mittag_leffler.eq_image_eventual_range -> CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i) (Set.image.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i) (Set.image.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.eq_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRangeₓ'. -/
theorem IsMittagLeffler.eq_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i = F.map f '' F.eventualRange j :=
(h.subset_image_eventualRange F f).antisymm <| mapsTo'.1 (F.eventualRange_mapsTo f)
#align category_theory.functor.is_mittag_leffler.eq_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange
-/- warning: category_theory.functor.eventual_range_eq_iff -> CategoryTheory.Functor.eventualRange_eq_iff is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] {f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j}, Iff (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f))) (forall {{k : J}} (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) k i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k j (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) k i j g f))))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] {f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j}, Iff (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f))) (forall {{k : J}} (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) k i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k j (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) k i j g f))))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_eq_iff CategoryTheory.Functor.eventualRange_eq_iffₓ'. -/
theorem eventualRange_eq_iff {f : i ⟶ j} :
F.eventualRange j = range (F.map f) ↔
∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
@@ -321,24 +237,12 @@ theorem eventualRange_eq_iff {f : i ⟶ j} :
apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_iff CategoryTheory.Functor.eventualRange_eq_iff
-/- warning: category_theory.functor.is_mittag_leffler_iff_subset_range_comp -> CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Iff (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => forall {{k : J}} (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) k i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k j (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) k i j g f))))))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], Iff (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => forall {{k : J}} (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) k i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k j (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) k i j g f))))))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_compₓ'. -/
theorem isMittagLeffler_iff_subset_range_comp :
F.IsMittagLeffler ↔
∀ j : J, ∃ (i : _)(f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
by simp_rw [is_mittag_leffler_iff_eventual_range, eventual_range_eq_iff]
#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp
-/- warning: category_theory.functor.is_mittag_leffler.to_preimages -> CategoryTheory.Functor.IsMittagLeffler.toPreimages is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} (s : Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 (CategoryTheory.Functor.toPreimages.{u2, u3, u1} J _inst_1 F i s))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimagesₓ'. -/
theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).IsMittagLeffler :=
(isMittagLeffler_iff_subset_range_comp _).2 fun j =>
by
@@ -359,12 +263,6 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
rw [← category.assoc, map_comp_apply, h₃, map_comp_apply]
#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimages
-/- warning: category_theory.functor.is_mittag_leffler_of_exists_finite_range -> CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => Set.Finite.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f))))) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F)
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => Set.Finite.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f))))) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_rangeₓ'. -/
theorem isMittagLeffler_of_exists_finite_range
(h : ∀ j : J, ∃ (i : _)(f : i ⟶ j), (range <| F.map f).Finite) : F.IsMittagLeffler := fun j =>
by
@@ -396,22 +294,10 @@ def toEventualRanges : J ⥤ Type v
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
-/
-/- warning: category_theory.functor.to_eventual_ranges_finite -> CategoryTheory.Functor.toEventualRanges_finite is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2)) j)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finiteₓ'. -/
instance toEventualRanges_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite (F.toEventualRanges.obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finite
-/- warning: category_theory.functor.to_eventual_ranges_sections_equiv -> CategoryTheory.Functor.toEventualRangesSectionsEquiv is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Equiv.{succ (max u1 u2), succ (max u1 u2)} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2))) (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))
-but is expected to have type
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Set.Elem.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2)) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2))) (Set.Elem.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquivₓ'. -/
/-- The sections of the functor `F : J ⥤ Type v` are in bijection with the sections of
`F.eventual_ranges`.
-/
@@ -424,12 +310,6 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
right_inv _ := by ext; rfl
#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquiv
-/- warning: category_theory.functor.surjective_to_eventual_ranges -> CategoryTheory.Functor.surjective_toEventualRanges is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) i j f))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) i j f))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRangesₓ'. -/
/--
If `F` satisfies the Mittag-Leffler condition, its restriction to eventual ranges is a surjective
functor.
@@ -439,12 +319,6 @@ theorem surjective_toEventualRanges (h : F.IsMittagLeffler) ⦃i j⦄ (f : i ⟶
obtain ⟨y, hy, rfl⟩ := h.subset_image_eventual_range F f hx; exact ⟨⟨y, hy⟩, rfl⟩
#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRanges
-/- warning: category_theory.functor.to_eventual_ranges_nonempty -> CategoryTheory.Functor.toEventualRanges_nonempty is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) j))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonemptyₓ'. -/
/-- If `F` is nonempty at each index and Mittag-Leffler, then so is `F.to_eventual_ranges`. -/
theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (F.obj j)] (j : J) :
Nonempty (F.toEventualRanges.obj j) :=
@@ -453,12 +327,6 @@ theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (
rw [to_eventual_ranges_obj, h]; infer_instance
#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonempty
-/- warning: category_theory.functor.thin_diagram_of_surjective -> CategoryTheory.Functor.thin_diagram_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall {i : J} {j : J} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Eq.{succ u2} (Quiver.Hom.{succ u2, succ u2} Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j g))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall {i : J} {j : J} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Eq.{succ u3} (Quiver.Hom.{succ u3, succ u3} Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j g))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjectiveₓ'. -/
/-- If `F` has all arrows surjective, then it "factors through a poset". -/
theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) {i j}
(f g : i ⟶ j) : F.map f = F.map g :=
@@ -466,12 +334,6 @@ theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.m
(Fsur φ).injective_comp_right <| by simp_rw [← types_comp, ← F.map_comp, hφ]
#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjective
-/- warning: category_theory.functor.to_preimages_nonempty_of_surjective -> CategoryTheory.Functor.toPreimages_nonempty_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [hFn : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (Set.Nonempty.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) s) -> (forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s) j))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} (s : Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [hFn : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (Set.Nonempty.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) s) -> (forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toPreimages.{u2, u3, u1} J _inst_1 F i s)) j))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjectiveₓ'. -/
theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
(Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) (hs : s.Nonempty) (j) :
Nonempty ((F.toPreimages s).obj j) :=
@@ -484,12 +346,6 @@ theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
exact ⟨x, fun ji' => (F.thin_diagram_of_surjective Fsur ji' ji).symm ▸ ys⟩
#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjective
-/- warning: category_theory.functor.eval_section_injective_of_eventually_injective -> CategoryTheory.Functor.eval_section_injective_of_eventually_injective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] {j : J}, (forall (i : J) (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Injective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall (i : J), (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) -> (Function.Injective.{succ (max u1 u2), succ u2} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (s : coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) => Subtype.val.{succ (max u1 u2)} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (x : forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) => Membership.Mem.{max u1 u2, max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) s j)))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] {j : J}, (forall (i : J) (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Injective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall (i : J), (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) -> (Function.Injective.{max (succ u2) (succ u3), succ u3} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (s : Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) => Subtype.val.{max (succ u2) (succ u3)} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (x : forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) => Membership.mem.{max u2 u3, max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) s j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injectiveₓ'. -/
theorem eval_section_injective_of_eventually_injective {j}
(Finj : ∀ (i) (f : i ⟶ j), (F.map f).Injective) (i) (f : i ⟶ j) :
(fun s : F.sections => s.val j).Injective :=
@@ -509,12 +365,6 @@ variable [∀ j : J, Nonempty (F.obj j)] [∀ j : J, Finite (F.obj j)]
include Fsur
-/- warning: category_theory.functor.eval_section_surjective_of_surjective -> CategoryTheory.Functor.eval_section_surjective_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall (i : J), Function.Surjective.{succ (max u1 u2), succ u2} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (fun (s : coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) => Subtype.val.{succ (max u1 u2)} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (x : forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) => Membership.Mem.{max u1 u2, max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) s i))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] [_inst_4 : forall (j : J), Finite.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall (i : J), Function.Surjective.{max (succ u2) (succ u3), succ u3} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (fun (s : Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) => Subtype.val.{max (succ u2) (succ u3)} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (x : forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) => Membership.mem.{max u2 u3, max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) s i))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjectiveₓ'. -/
theorem eval_section_surjective_of_surjective (i : J) :
(fun s : F.sections => s.val i).Surjective := fun x =>
by
@@ -527,12 +377,6 @@ theorem eval_section_surjective_of_surjective (i : J) :
replace this := this (𝟙 i); rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
-/- warning: category_theory.functor.eventually_injective -> CategoryTheory.Functor.eventually_injective is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall [_inst_5 : Nonempty.{succ u1} J] [_inst_6 : Finite.{succ (max u1 u2)} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))], Exists.{succ u1} J (fun (j : J) => forall (i : J) (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Injective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))
-but is expected to have type
- forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] [_inst_4 : forall (j : J), Finite.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall [_inst_5 : Nonempty.{succ u2} J] [_inst_6 : Finite.{max (succ u2) (succ u3)} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F))], Exists.{succ u2} J (fun (j : J) => forall (i : J) (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Injective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventually_injective CategoryTheory.Functor.eventually_injectiveₓ'. -/
theorem eventually_injective [Nonempty J] [Finite F.sections] :
∃ j, ∀ (i) (f : i ⟶ j), (F.map f).Injective :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -229,8 +229,7 @@ theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
by
apply subset_antisymm
· apply Inter₂_subset
- · rw [h, F.map_comp]
- apply range_comp_subset_range
+ · rw [h, F.map_comp]; apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precomp
/- warning: category_theory.functor.is_mittag_leffler_of_surjective -> CategoryTheory.Functor.isMittagLeffler_of_surjective is a dubious translation:
@@ -260,13 +259,8 @@ def toPreimages : J ⥤ Type v where
rw [mem_Inter] at h⊢; intro f
rw [← mem_preimage, preimage_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
- map_id' j := by
- simp_rw [F.map_id]
- ext
- rfl
- map_comp' j k l f g := by
- simp_rw [F.map_comp]
- rfl
+ map_id' j := by simp_rw [F.map_id]; ext; rfl
+ map_comp' j k l f g := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
/- warning: category_theory.functor.to_preimages_finite -> CategoryTheory.Functor.toPreimages_finite is a dubious translation:
@@ -352,9 +346,7 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
obtain ⟨j₂, f₂, h₂⟩ := F.is_mittag_leffler_iff_eventual_range.1 h j₁
refine' ⟨j₂, f₂ ≫ f₁, fun j₃ f₃ => _⟩
rintro _ ⟨⟨x, hx⟩, rfl⟩
- have : F.map f₂ x ∈ F.eventual_range j₁ := by
- rw [h₂]
- exact ⟨_, rfl⟩
+ have : F.map f₂ x ∈ F.eventual_range j₁ := by rw [h₂]; exact ⟨_, rfl⟩
obtain ⟨y, hy, h₃⟩ := h.subset_image_eventual_range F (f₃ ≫ f₂) this
refine' ⟨⟨y, mem_Inter.2 fun g₂ => _⟩, Subtype.ext _⟩
· obtain ⟨j₄, f₄, h₄⟩ := cone_maps g₂ ((f₃ ≫ f₂) ≫ g₁)
@@ -399,13 +391,8 @@ def toEventualRanges : J ⥤ Type v
where
obj j := F.eventualRange j
map i j f := (F.eventualRange_mapsTo f).restrict _ _ _
- map_id' i := by
- simp_rw [F.map_id]
- ext
- rfl
- map_comp' _ _ _ _ _ := by
- simp_rw [F.map_comp]
- rfl
+ map_id' i := by simp_rw [F.map_id]; ext; rfl
+ map_comp' _ _ _ _ _ := by simp_rw [F.map_comp]; rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
-/
@@ -433,12 +420,8 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
toFun s := ⟨_, fun i j f => Subtype.coe_inj.2 <| s.Prop f⟩
invFun s :=
⟨fun j => ⟨_, mem_iInter₂.2 fun i f => ⟨_, s.Prop f⟩⟩, fun i j f => Subtype.ext <| s.Prop f⟩
- left_inv _ := by
- ext
- rfl
- right_inv _ := by
- ext
- rfl
+ left_inv _ := by ext; rfl
+ right_inv _ := by ext; rfl
#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquiv
/- warning: category_theory.functor.surjective_to_eventual_ranges -> CategoryTheory.Functor.surjective_toEventualRanges is a dubious translation:
@@ -452,10 +435,8 @@ If `F` satisfies the Mittag-Leffler condition, its restriction to eventual range
functor.
-/
theorem surjective_toEventualRanges (h : F.IsMittagLeffler) ⦃i j⦄ (f : i ⟶ j) :
- (F.toEventualRanges.map f).Surjective := fun ⟨x, hx⟩ =>
- by
- obtain ⟨y, hy, rfl⟩ := h.subset_image_eventual_range F f hx
- exact ⟨⟨y, hy⟩, rfl⟩
+ (F.toEventualRanges.map f).Surjective := fun ⟨x, hx⟩ => by
+ obtain ⟨y, hy, rfl⟩ := h.subset_image_eventual_range F f hx; exact ⟨⟨y, hy⟩, rfl⟩
#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRanges
/- warning: category_theory.functor.to_eventual_ranges_nonempty -> CategoryTheory.Functor.toEventualRanges_nonempty is a dubious translation:
@@ -469,8 +450,7 @@ theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (
Nonempty (F.toEventualRanges.obj j) :=
by
let ⟨i, f, h⟩ := F.isMittagLeffler_iff_eventualRange.1 h j
- rw [to_eventual_ranges_obj, h]
- infer_instance
+ rw [to_eventual_ranges_obj, h]; infer_instance
#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonempty
/- warning: category_theory.functor.thin_diagram_of_surjective -> CategoryTheory.Functor.thin_diagram_of_surjective is a dubious translation:
@@ -544,8 +524,7 @@ theorem eval_section_surjective_of_surjective (i : J) :
refine' ⟨⟨fun j => (sec j).val, fun j k jk => by simpa [Subtype.ext_iff] using h jk⟩, _⟩
· have := (sec i).Prop
simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
- replace this := this (𝟙 i)
- rwa [map_id_apply] at this
+ replace this := this (𝟙 i); rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
/- warning: category_theory.functor.eventually_injective -> CategoryTheory.Functor.eventually_injective is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
! This file was ported from Lean 3 source module category_theory.cofiltered_system
-! leanprover-community/mathlib commit 178a32653e369dce2da68dc6b2694e385d484ef1
+! leanprover-community/mathlib commit 2ed2c6310e6f1c5562bdf6bfbda55ebbf6891abe
! 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.Category.Top.Limits.Konig
/-!
# Cofiltered systems
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file deals with properties of cofiltered (and inverse) systems.
## Main definitions
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -119,7 +119,7 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
/- warning: nonempty_sections_of_finite_inverse_system -> nonempty_sections_of_finite_inverse_system is a dubious translation:
lean 3 declaration is
- forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (LE.le.{u1} J (Preorder.toLE.{u1} J _inst_1))] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
+ forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (LE.le.{u1} J (Preorder.toHasLe.{u1} J _inst_1))] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
but is expected to have type
forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (fun (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 : J) (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481 : J) => LE.le.{u1} J (Preorder.toLE.{u1} J _inst_1) x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481)] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_inverse_system nonempty_sections_of_finite_inverse_systemₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ad820c4997738e2f542f8a20f32911f52020e26
@@ -63,10 +63,16 @@ open CategoryTheory CategoryTheory.IsCofiltered Set CategoryTheory.FunctorToType
section FiniteKonig
+/- warning: nonempty_sections_of_finite_cofiltered_system.init -> nonempty_sections_of_finite_cofiltered_system.init is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u1} J _inst_1] (F : CategoryTheory.Functor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1}) [hf : forall (j : J), Finite.{succ u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j)] [hne : forall (j : J), Nonempty.{succ u1} (CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j)], Set.Nonempty.{u1} (forall (j : J), CategoryTheory.Functor.obj.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F j) (CategoryTheory.Functor.sections.{u1, u1, u1} J _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.SmallCategory.{u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u1} J _inst_1] (F : CategoryTheory.Functor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1}) [hf : forall (j : J), Finite.{succ u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j)] [hne : forall (j : J), Nonempty.{succ u1} (Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j)], Set.Nonempty.{u1} (forall (j : J), Prefunctor.obj.{succ u1, succ u1, u1, succ u1} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} J (CategoryTheory.Category.toCategoryStruct.{u1, u1} J _inst_1)) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, succ u1} J _inst_1 Type.{u1} CategoryTheory.types.{u1} F) j) (CategoryTheory.Functor.sections.{u1, u1, u1} J _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_cofiltered_system.init nonempty_sections_of_finite_cofiltered_system.initₓ'. -/
/-- This bootstraps `nonempty_sections_of_finite_inverse_system`. In this version,
the `F` functor is between categories of the same universe, and it is an easy
corollary to `Top.nonempty_limit_cone_of_compact_t2_inverse_system`. -/
-theorem NonemptySectionsOfFiniteCofilteredSystem.init {J : Type u} [SmallCategory J]
+theorem nonempty_sections_of_finite_cofiltered_system.init {J : Type u} [SmallCategory J]
[IsCofilteredOrEmpty J] (F : J ⥤ Type u) [hf : ∀ j, Finite (F.obj j)]
[hne : ∀ j, Nonempty (F.obj j)] : F.sections.Nonempty :=
by
@@ -76,8 +82,14 @@ theorem NonemptySectionsOfFiniteCofilteredSystem.init {J : Type u} [SmallCategor
haveI : ∀ j, Nonempty (F'.obj j) := hne
obtain ⟨⟨u, hu⟩⟩ := TopCat.nonempty_limitCone_of_compact_t2_cofiltered_system F'
exact ⟨u, fun _ _ => hu⟩
-#align nonempty_sections_of_finite_cofiltered_system.init NonemptySectionsOfFiniteCofilteredSystem.init
-
+#align nonempty_sections_of_finite_cofiltered_system.init nonempty_sections_of_finite_cofiltered_system.init
+
+/- warning: nonempty_sections_of_finite_cofiltered_system -> nonempty_sections_of_finite_cofiltered_system is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] [_inst_4 : forall (j : J), Nonempty.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)], Set.Nonempty.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_systemₓ'. -/
/-- The cofiltered limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_inverse_system` for a specialization to inverse limits. -/
@@ -95,7 +107,7 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
cases isEmpty_or_nonempty J
· fconstructor <;> exact isEmptyElim
haveI : is_cofiltered J := ⟨⟩
- obtain ⟨u, hu⟩ := NonemptySectionsOfFiniteCofilteredSystem.init F'
+ obtain ⟨u, hu⟩ := nonempty_sections_of_finite_cofiltered_system.init F'
-- Step 3: interpret the results
use fun j => (u ⟨j⟩).down
intro j j' f
@@ -105,6 +117,12 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
rfl
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
+/- warning: nonempty_sections_of_finite_inverse_system -> nonempty_sections_of_finite_inverse_system is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (LE.le.{u1} J (Preorder.toLE.{u1} J _inst_1))] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), CategoryTheory.Functor.obj.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : Preorder.{u1} J] [_inst_2 : IsDirected.{u1} J (fun (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 : J) (x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481 : J) => LE.le.{u1} J (Preorder.toLE.{u1} J _inst_1) x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.479 x._@.Mathlib.CategoryTheory.CofilteredSystem._hyg.481)] (F : CategoryTheory.Functor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2}) [_inst_3 : forall (j : Opposite.{succ u1} J), Finite.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)] [_inst_4 : forall (j : Opposite.{succ u1} J), Nonempty.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j)], Set.Nonempty.{max u1 u2} (forall (j : Opposite.{succ u1} J), Prefunctor.obj.{succ u1, succ u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)))) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, succ u2} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u1, u2, u1} (Opposite.{succ u1} J) (CategoryTheory.Category.opposite.{u1, u1} J (Preorder.smallCategory.{u1} J _inst_1)) F)
+Case conversion may be inaccurate. Consider using '#align nonempty_sections_of_finite_inverse_system nonempty_sections_of_finite_inverse_systemₓ'. -/
/-- The inverse limit of nonempty finite types is nonempty.
See `nonempty_sections_of_finite_cofiltered_system` for a generalization to cofiltered limits.
@@ -133,6 +151,12 @@ namespace Functor
variable {J : Type u} [Category J] (F : J ⥤ Type v) {i j k : J} (s : Set (F.obj i))
+/- warning: category_theory.functor.eventual_range -> CategoryTheory.Functor.eventualRange is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) (j : J), Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) (j : J), Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range CategoryTheory.Functor.eventualRangeₓ'. -/
/-- The eventual range of the functor `F : J ⥤ Type v` at index `j : J` is the intersection
of the ranges of all maps `F.map f` with `i : J` and `f : i ⟶ j`.
-/
@@ -140,11 +164,18 @@ def eventualRange (j : J) :=
⋂ (i) (f : i ⟶ j), range (F.map f)
#align category_theory.functor.eventual_range CategoryTheory.Functor.eventualRange
+/- warning: category_theory.functor.mem_eventual_range_iff -> CategoryTheory.Functor.mem_eventualRange_iff is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {j : J} {x : CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j}, Iff (Membership.Mem.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)) (forall {{i : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Membership.Mem.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {j : J} {x : Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j}, Iff (Membership.mem.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)) (forall {{i : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Membership.mem.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.mem_eventual_range_iff CategoryTheory.Functor.mem_eventualRange_iffₓ'. -/
theorem mem_eventualRange_iff {x : F.obj j} :
x ∈ F.eventualRange j ↔ ∀ ⦃i⦄ (f : i ⟶ j), x ∈ range (F.map f) :=
mem_iInter₂
#align category_theory.functor.mem_eventual_range_iff CategoryTheory.Functor.mem_eventualRange_iff
+#print CategoryTheory.Functor.IsMittagLeffler /-
/-- The functor `F : J ⥤ Type v` satisfies the Mittag-Leffler condition if for all `j : J`,
there exists some `i : J` and `f : i ⟶ j` such that for all `k : J` and `g : k ⟶ j`, the range
of `F.map f` is contained in that of `F.map g`;
@@ -154,7 +185,14 @@ by some `f : i ⟶ j`.
def IsMittagLeffler : Prop :=
∀ j : J, ∃ (i : _)(f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ j), range (F.map f) ⊆ range (F.map g)
#align category_theory.functor.is_mittag_leffler CategoryTheory.Functor.IsMittagLeffler
+-/
+/- warning: category_theory.functor.is_mittag_leffler_iff_eventual_range -> CategoryTheory.Functor.isMittagLeffler_iff_eventualRange is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}), Iff (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}), Iff (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRangeₓ'. -/
theorem isMittagLeffler_iff_eventualRange :
F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _)(f : i ⟶ j), F.eventualRange j = range (F.map f) :=
forall_congr' fun j =>
@@ -162,6 +200,12 @@ theorem isMittagLeffler_iff_eventualRange :
⟨fun h => (iInter₂_subset _ _).antisymm <| subset_iInter₂ h, fun h => h ▸ iInter₂_subset⟩
#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRange
+/- warning: category_theory.functor.is_mittag_leffler.subset_image_eventual_range -> CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J}, (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i) (Set.image.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J}, (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i) (Set.image.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRangeₓ'. -/
theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i ⊆ F.map f '' F.eventualRange j :=
by
@@ -171,6 +215,12 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
refine' ⟨_, ⟨x, rfl⟩, by simpa only [F.map_comp] ⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
+/- warning: category_theory.functor.eventual_range_eq_range_precomp -> CategoryTheory.Functor.eventualRange_eq_range_precomp is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} {k : J} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j k), (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F k) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j k g))) -> (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F k) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i k (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) i j k f g))))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} {k : J} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j k), (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F k) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j k g))) -> (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F k) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i k (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) i j k f g))))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precompₓ'. -/
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
(h : F.eventualRange k = range (F.map g)) : F.eventualRange k = range (F.map <| f ≫ g) :=
by
@@ -180,11 +230,23 @@ theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precomp
+/- warning: category_theory.functor.is_mittag_leffler_of_surjective -> CategoryTheory.Functor.isMittagLeffler_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}), (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}), (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjectiveₓ'. -/
theorem isMittagLeffler_of_surjective (h : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) :
F.IsMittagLeffler := fun j =>
⟨j, 𝟙 j, fun k g => by rw [map_id, types_id, range_id, (h g).range_eq]⟩
#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjective
+/- warning: category_theory.functor.to_preimages -> CategoryTheory.Functor.toPreimages is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J}, (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) -> (CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2})
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J}, (Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) i)) -> (CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2})
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimagesₓ'. -/
/-- The subfunctor of `F` obtained by restricting to the preimages of a set `s ∈ F.obj i`. -/
@[simps]
def toPreimages : J ⥤ Type v where
@@ -204,12 +266,24 @@ def toPreimages : J ⥤ Type v where
rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
+/- warning: category_theory.functor.to_preimages_finite -> CategoryTheory.Functor.toPreimages_finite is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s) j)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) i)) [_inst_2 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s)) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finiteₓ'. -/
instance toPreimages_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite ((F.toPreimages s).obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finite
variable [IsCofilteredOrEmpty J]
+/- warning: category_theory.functor.eventual_range_maps_to -> CategoryTheory.Functor.eventualRange_mapsTo is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), Set.MapsTo.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i)
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), Set.MapsTo.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_maps_to CategoryTheory.Functor.eventualRange_mapsToₓ'. -/
theorem eventualRange_mapsTo (f : j ⟶ i) :
(F.eventualRange j).MapsTo (F.map f) (F.eventualRange i) := fun x hx =>
by
@@ -221,11 +295,23 @@ theorem eventualRange_mapsTo (f : j ⟶ i) :
exact ⟨_, rfl⟩
#align category_theory.functor.eventual_range_maps_to CategoryTheory.Functor.eventualRange_mapsTo
+/- warning: category_theory.functor.is_mittag_leffler.eq_image_eventual_range -> CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) j i), Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F i) (Set.image.{u2, u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j i f) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j)))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) j i), Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F i) (Set.image.{u3, u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j i f) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.eq_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRangeₓ'. -/
theorem IsMittagLeffler.eq_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
F.eventualRange i = F.map f '' F.eventualRange j :=
(h.subset_image_eventualRange F f).antisymm <| mapsTo'.1 (F.eventualRange_mapsTo f)
#align category_theory.functor.is_mittag_leffler.eq_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.eq_image_eventualRange
+/- warning: category_theory.functor.eventual_range_eq_iff -> CategoryTheory.Functor.eventualRange_eq_iff is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] {f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j}, Iff (Eq.{succ u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.eventualRange.{u1, u2, u3} J _inst_1 F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f))) (forall {{k : J}} (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) k i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k j (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) k i j g f))))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} {j : J} [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] {f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j}, Iff (Eq.{succ u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (CategoryTheory.Functor.eventualRange.{u2, u3, u1} J _inst_1 F j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f))) (forall {{k : J}} (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) k i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k j (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) k i j g f))))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventual_range_eq_iff CategoryTheory.Functor.eventualRange_eq_iffₓ'. -/
theorem eventualRange_eq_iff {f : i ⟶ j} :
F.eventualRange j = range (F.map f) ↔
∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
@@ -238,12 +324,24 @@ theorem eventualRange_eq_iff {f : i ⟶ j} :
apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_iff CategoryTheory.Functor.eventualRange_eq_iff
+/- warning: category_theory.functor.is_mittag_leffler_iff_subset_range_comp -> CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Iff (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => forall {{k : J}} (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) k i), HasSubset.Subset.{u2} (Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasSubset.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F k j (CategoryTheory.CategoryStruct.comp.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1) k i j g f))))))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], Iff (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => forall {{k : J}} (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) k i), HasSubset.Subset.{u3} (Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instHasSubsetSet.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) k j (CategoryTheory.CategoryStruct.comp.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1) k i j g f))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_compₓ'. -/
theorem isMittagLeffler_iff_subset_range_comp :
F.IsMittagLeffler ↔
∀ j : J, ∃ (i : _)(f : i ⟶ j), ∀ ⦃k⦄ (g : k ⟶ i), range (F.map f) ⊆ range (F.map <| g ≫ f) :=
by simp_rw [is_mittag_leffler_iff_eventual_range, eventual_range_eq_iff]
#align category_theory.functor.is_mittag_leffler_iff_subset_range_comp CategoryTheory.Functor.isMittagLeffler_iff_subset_range_comp
+/- warning: category_theory.functor.is_mittag_leffler.to_preimages -> CategoryTheory.Functor.IsMittagLeffler.toPreimages is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} (s : Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 (CategoryTheory.Functor.toPreimages.{u2, u3, u1} J _inst_1 F i s))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimagesₓ'. -/
theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).IsMittagLeffler :=
(isMittagLeffler_iff_subset_range_comp _).2 fun j =>
by
@@ -266,6 +364,12 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
rw [← category.assoc, map_comp_apply, h₃, map_comp_apply]
#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimages
+/- warning: category_theory.functor.is_mittag_leffler_of_exists_finite_range -> CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (forall (j : J), Exists.{succ u1} J (fun (i : J) => Exists.{succ u3} (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) => Set.Finite.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.range.{u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f))))) -> (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (forall (j : J), Exists.{succ u2} J (fun (i : J) => Exists.{succ u1} (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (fun (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) => Set.Finite.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.range.{u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f))))) -> (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_rangeₓ'. -/
theorem isMittagLeffler_of_exists_finite_range
(h : ∀ j : J, ∃ (i : _)(f : i ⟶ j), (range <| F.map f).Finite) : F.IsMittagLeffler := fun j =>
by
@@ -284,6 +388,7 @@ theorem isMittagLeffler_of_exists_finite_range
rwa [Finset.lt_iff_ssubset, ← Finset.coe_ssubset, Set.Finite.coe_toFinset, hm] at this
#align category_theory.functor.is_mittag_leffler_of_exists_finite_range CategoryTheory.Functor.isMittagLeffler_of_exists_finite_range
+#print CategoryTheory.Functor.toEventualRanges /-
/-- The subfunctor of `F` obtained by restricting to the eventual range at each index.
-/
@[simps]
@@ -299,11 +404,24 @@ def toEventualRanges : J ⥤ Type v
simp_rw [F.map_comp]
rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
+-/
+/- warning: category_theory.functor.to_eventual_ranges_finite -> CategoryTheory.Functor.toEventualRanges_finite is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j)] (j : J), Finite.{succ u2} (Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2)) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finiteₓ'. -/
instance toEventualRanges_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite (F.toEventualRanges.obj j) :=
fun j => Subtype.finite
#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finite
+/- warning: category_theory.functor.to_eventual_ranges_sections_equiv -> CategoryTheory.Functor.toEventualRangesSectionsEquiv is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Equiv.{succ (max u1 u2), succ (max u1 u2)} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2))) (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))
+but is expected to have type
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Set.Elem.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2)) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2))) (Set.Elem.{max u1 u2} (forall (j : J), Prefunctor.obj.{succ u3, succ u2, u1, succ u2} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F) j) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquivₓ'. -/
/-- The sections of the functor `F : J ⥤ Type v` are in bijection with the sections of
`F.eventual_ranges`.
-/
@@ -320,6 +438,12 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
rfl
#align category_theory.functor.to_eventual_ranges_sections_equiv CategoryTheory.Functor.toEventualRangesSectionsEquiv
+/- warning: category_theory.functor.surjective_to_eventual_ranges -> CategoryTheory.Functor.surjective_toEventualRanges is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) i j f))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) i j f))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRangesₓ'. -/
/--
If `F` satisfies the Mittag-Leffler condition, its restriction to eventual ranges is a surjective
functor.
@@ -331,6 +455,12 @@ theorem surjective_toEventualRanges (h : F.IsMittagLeffler) ⦃i j⦄ (f : i ⟶
exact ⟨⟨y, hy⟩, rfl⟩
#align category_theory.functor.surjective_to_eventual_ranges CategoryTheory.Functor.surjective_toEventualRanges
+/- warning: category_theory.functor.to_eventual_ranges_nonempty -> CategoryTheory.Functor.toEventualRanges_nonempty is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u1, u2, u3} J _inst_1 F) -> (forall [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toEventualRanges.{u1, u2, u3} J _inst_1 F _inst_2) j))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (CategoryTheory.Functor.IsMittagLeffler.{u2, u3, u1} J _inst_1 F) -> (forall [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toEventualRanges.{u2, u3, u1} J _inst_1 F _inst_2)) j))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonemptyₓ'. -/
/-- If `F` is nonempty at each index and Mittag-Leffler, then so is `F.to_eventual_ranges`. -/
theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (F.obj j)] (j : J) :
Nonempty (F.toEventualRanges.obj j) :=
@@ -340,6 +470,12 @@ theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (
infer_instance
#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonempty
+/- warning: category_theory.functor.thin_diagram_of_surjective -> CategoryTheory.Functor.thin_diagram_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall {i : J} {j : J} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) (g : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Eq.{succ u2} (Quiver.Hom.{succ u2, succ u2} Type.{u2} (CategoryTheory.CategoryStruct.toQuiver.{u2, succ u2} Type.{u2} (CategoryTheory.Category.toCategoryStruct.{u2, succ u2} Type.{u2} CategoryTheory.types.{u2})) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j g))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall {i : J} {j : J} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) (g : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Eq.{succ u3} (Quiver.Hom.{succ u3, succ u3} Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j g))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjectiveₓ'. -/
/-- If `F` has all arrows surjective, then it "factors through a poset". -/
theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) {i j}
(f g : i ⟶ j) : F.map f = F.map g :=
@@ -347,6 +483,12 @@ theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.m
(Fsur φ).injective_comp_right <| by simp_rw [← types_comp, ← F.map_comp, hφ]
#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjective
+/- warning: category_theory.functor.to_preimages_nonempty_of_surjective -> CategoryTheory.Functor.toPreimages_nonempty_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) {i : J} (s : Set.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [hFn : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (Set.Nonempty.{u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) s) -> (forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.Functor.toPreimages.{u1, u2, u3} J _inst_1 F i s) j))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) {i : J} (s : Set.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i)) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [hFn : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (Set.Nonempty.{u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) s) -> (forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.Functor.toPreimages.{u2, u3, u1} J _inst_1 F i s)) j))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjectiveₓ'. -/
theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
(Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) (hs : s.Nonempty) (j) :
Nonempty ((F.toPreimages s).obj j) :=
@@ -359,6 +501,12 @@ theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
exact ⟨x, fun ji' => (F.thin_diagram_of_surjective Fsur ji' ji).symm ▸ ys⟩
#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjective
+/- warning: category_theory.functor.eval_section_injective_of_eventually_injective -> CategoryTheory.Functor.eval_section_injective_of_eventually_injective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] {j : J}, (forall (i : J) (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Injective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall (i : J), (Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j) -> (Function.Injective.{succ (max u1 u2), succ u2} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (s : coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) => Subtype.val.{succ (max u1 u2)} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (x : forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) => Membership.Mem.{max u1 u2, max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) s j)))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] {j : J}, (forall (i : J) (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Injective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall (i : J), (Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j) -> (Function.Injective.{max (succ u2) (succ u3), succ u3} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (s : Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) => Subtype.val.{max (succ u2) (succ u3)} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (x : forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) => Membership.mem.{max u2 u3, max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) s j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injectiveₓ'. -/
theorem eval_section_injective_of_eventually_injective {j}
(Finj : ∀ (i) (f : i ⟶ j), (F.map f).Injective) (i) (f : i ⟶ j) :
(fun s : F.sections => s.val j).Injective :=
@@ -378,6 +526,12 @@ variable [∀ j : J, Nonempty (F.obj j)] [∀ j : J, Finite (F.obj j)]
include Fsur
+/- warning: category_theory.functor.eval_section_surjective_of_surjective -> CategoryTheory.Functor.eval_section_surjective_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall (i : J), Function.Surjective.{succ (max u1 u2), succ u2} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (fun (s : coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) => Subtype.val.{succ (max u1 u2)} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (fun (x : forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) => Membership.Mem.{max u1 u2, max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (Set.hasMem.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) x (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F)) s i))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] [_inst_4 : forall (j : J), Finite.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall (i : J), Function.Surjective.{max (succ u2) (succ u3), succ u3} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (fun (s : Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) => Subtype.val.{max (succ u2) (succ u3)} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (fun (x : forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) => Membership.mem.{max u2 u3, max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Set.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) (Set.instMembershipSet.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)) x (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F)) s i))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjectiveₓ'. -/
theorem eval_section_surjective_of_surjective (i : J) :
(fun s : F.sections => s.val i).Surjective := fun x =>
by
@@ -391,6 +545,12 @@ theorem eval_section_surjective_of_surjective (i : J) :
rwa [map_id_apply] at this
#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
+/- warning: category_theory.functor.eventually_injective -> CategoryTheory.Functor.eventually_injective is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} J] (F : CategoryTheory.Functor.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u3, u1} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)] [_inst_4 : forall (j : J), Finite.{succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Surjective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)) -> (forall [_inst_5 : Nonempty.{succ u1} J] [_inst_6 : Finite.{succ (max u1 u2)} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Set.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) Type.{max u1 u2} (Set.hasCoeToSort.{max u1 u2} (forall (j : J), CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j)) (CategoryTheory.Functor.sections.{u3, u2, u1} J _inst_1 F))], Exists.{succ u1} J (fun (j : J) => forall (i : J) (f : Quiver.Hom.{succ u3, u1} J (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} J (CategoryTheory.Category.toCategoryStruct.{u3, u1} J _inst_1)) i j), Function.Injective.{succ u2, succ u2} (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i) (CategoryTheory.Functor.obj.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F j) (CategoryTheory.Functor.map.{u3, u2, u1, succ u2} J _inst_1 Type.{u2} CategoryTheory.types.{u2} F i j f)))
+but is expected to have type
+ forall {J : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} J] (F : CategoryTheory.Functor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3}) [_inst_2 : CategoryTheory.IsCofilteredOrEmpty.{u1, u2} J _inst_1] [_inst_3 : forall (j : J), Nonempty.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)] [_inst_4 : forall (j : J), Finite.{succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j)], (forall {{i : J}} {{j : J}} (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Surjective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)) -> (forall [_inst_5 : Nonempty.{succ u2} J] [_inst_6 : Finite.{max (succ u2) (succ u3)} (Set.Elem.{max u2 u3} (forall (j : J), Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (CategoryTheory.Functor.sections.{u1, u3, u2} J _inst_1 F))], Exists.{succ u2} J (fun (j : J) => forall (i : J) (f : Quiver.Hom.{succ u1, u2} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) i j), Function.Injective.{succ u3, succ u3} (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i) (Prefunctor.obj.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) j) (Prefunctor.map.{succ u1, succ u3, u2, succ u3} J (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} J (CategoryTheory.Category.toCategoryStruct.{u1, u2} J _inst_1)) Type.{u3} (CategoryTheory.CategoryStruct.toQuiver.{u3, succ u3} Type.{u3} (CategoryTheory.Category.toCategoryStruct.{u3, succ u3} Type.{u3} CategoryTheory.types.{u3})) (CategoryTheory.Functor.toPrefunctor.{u1, u3, u2, succ u3} J _inst_1 Type.{u3} CategoryTheory.types.{u3} F) i j f)))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.eventually_injective CategoryTheory.Functor.eventually_injectiveₓ'. -/
theorem eventually_injective [Nonempty J] [Finite F.sections] :
∃ j, ∀ (i) (f : i ⟶ j), (F.map f).Injective :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -142,7 +142,7 @@ def eventualRange (j : J) :=
theorem mem_eventualRange_iff {x : F.obj j} :
x ∈ F.eventualRange j ↔ ∀ ⦃i⦄ (f : i ⟶ j), x ∈ range (F.map f) :=
- mem_interᵢ₂
+ mem_iInter₂
#align category_theory.functor.mem_eventual_range_iff CategoryTheory.Functor.mem_eventualRange_iff
/-- The functor `F : J ⥤ Type v` satisfies the Mittag-Leffler condition if for all `j : J`,
@@ -159,7 +159,7 @@ theorem isMittagLeffler_iff_eventualRange :
F.IsMittagLeffler ↔ ∀ j : J, ∃ (i : _)(f : i ⟶ j), F.eventualRange j = range (F.map f) :=
forall_congr' fun j =>
exists₂_congr fun i f =>
- ⟨fun h => (interᵢ₂_subset _ _).antisymm <| subset_interᵢ₂ h, fun h => h ▸ interᵢ₂_subset⟩
+ ⟨fun h => (iInter₂_subset _ _).antisymm <| subset_iInter₂ h, fun h => h ▸ iInter₂_subset⟩
#align category_theory.functor.is_mittag_leffler_iff_eventual_range CategoryTheory.Functor.isMittagLeffler_iff_eventualRange
theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f : j ⟶ i) :
@@ -311,7 +311,7 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
where
toFun s := ⟨_, fun i j f => Subtype.coe_inj.2 <| s.Prop f⟩
invFun s :=
- ⟨fun j => ⟨_, mem_interᵢ₂.2 fun i f => ⟨_, s.Prop f⟩⟩, fun i j f => Subtype.ext <| s.Prop f⟩
+ ⟨fun j => ⟨_, mem_iInter₂.2 fun i f => ⟨_, s.Prop f⟩⟩, fun i j f => Subtype.ext <| s.Prop f⟩
left_inv _ := by
ext
rfl
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: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
! This file was ported from Lean 3 source module category_theory.cofiltered_system
-! leanprover-community/mathlib commit 8195826f5c428fc283510bc67303dd4472d78498
+! 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.Filtered
import Mathbin.Data.Set.Finite
-import Mathbin.Topology.Category.Top.Limits
+import Mathbin.Topology.Category.Top.Limits.Konig
/-!
# Cofiltered systems
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -1,21 +1,21 @@
/-
-Copyright (c) 2022 Rémi Bottinelli, Junyan Xu. All rights reserved.
+Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
-Authors: Rémi Bottinelli, Junyan Xu
+Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-! This file was ported from Lean 3 source module category_theory.mittag_leffler
-! leanprover-community/mathlib commit 6cb77a8eaff0ddd100e87b1591c6d3ad319514ff
+! This file was ported from Lean 3 source module category_theory.cofiltered_system
+! leanprover-community/mathlib commit 8195826f5c428fc283510bc67303dd4472d78498
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Filtered
import Mathbin.Data.Set.Finite
+import Mathbin.Topology.Category.Top.Limits
/-!
-# The Mittag-Leffler condition
+# Cofiltered systems
-This files defines the Mittag-Leffler condition for cofiltered systems and (TODO) other properties
-of such systems and their sections.
+This file deals with properties of cofiltered (and inverse) systems.
## Main definitions
@@ -32,6 +32,10 @@ Given a functor `F : J ⥤ Type v`:
## Main statements
+* `nonempty_sections_of_finite_cofiltered_system` shows that if `J` is cofiltered and each
+ `F.obj j` is nonempty and finite, `F.sections` is nonempty.
+* `nonempty_sections_of_finite_inverse_system` is a specialization of the above to `J` being a
+ directed set (and `F : Jᵒᵖ ⥤ Type v`).
* `is_mittag_leffler_of_exists_finite_range` shows that if `J` is cofiltered and for all `j`,
there exists some `i` and `f : i ⟶ j` such that the range of `F.map f` is finite, then
`F` is Mittag-Leffler.
@@ -40,7 +44,6 @@ Given a functor `F : J ⥤ Type v`:
## Todo
-* Specialize to inverse systems and fintype systems.
* Prove [Stacks: Lemma 0597](https://stacks.math.columbia.edu/tag/0597)
## References
@@ -54,14 +57,80 @@ Mittag-Leffler, surjective, eventual range, inverse system,
-/
-universe u v
+universe u v w
+
+open CategoryTheory CategoryTheory.IsCofiltered Set CategoryTheory.FunctorToTypes
+
+section FiniteKonig
+
+/-- This bootstraps `nonempty_sections_of_finite_inverse_system`. In this version,
+the `F` functor is between categories of the same universe, and it is an easy
+corollary to `Top.nonempty_limit_cone_of_compact_t2_inverse_system`. -/
+theorem NonemptySectionsOfFiniteCofilteredSystem.init {J : Type u} [SmallCategory J]
+ [IsCofilteredOrEmpty J] (F : J ⥤ Type u) [hf : ∀ j, Finite (F.obj j)]
+ [hne : ∀ j, Nonempty (F.obj j)] : F.sections.Nonempty :=
+ by
+ let F' : J ⥤ TopCat := F ⋙ TopCat.discrete
+ haveI : ∀ j, DiscreteTopology (F'.obj j) := fun _ => ⟨rfl⟩
+ haveI : ∀ j, Finite (F'.obj j) := hf
+ haveI : ∀ j, Nonempty (F'.obj j) := hne
+ obtain ⟨⟨u, hu⟩⟩ := TopCat.nonempty_limitCone_of_compact_t2_cofiltered_system F'
+ exact ⟨u, fun _ _ => hu⟩
+#align nonempty_sections_of_finite_cofiltered_system.init NonemptySectionsOfFiniteCofilteredSystem.init
+
+/-- The cofiltered limit of nonempty finite types is nonempty.
+
+See `nonempty_sections_of_finite_inverse_system` for a specialization to inverse limits. -/
+theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w} J]
+ [IsCofilteredOrEmpty J] (F : J ⥤ Type v) [∀ j : J, Finite (F.obj j)]
+ [∀ j : J, Nonempty (F.obj j)] : F.sections.Nonempty :=
+ by
+ -- Step 1: lift everything to the `max u v w` universe.
+ let J' : Type max w v u := AsSmall.{max w v} J
+ let down : J' ⥤ J := as_small.down
+ let F' : J' ⥤ Type max u v w := down ⋙ F ⋙ uliftFunctor.{max u w, v}
+ haveI : ∀ i, Nonempty (F'.obj i) := fun i => ⟨⟨Classical.arbitrary (F.obj (down.obj i))⟩⟩
+ haveI : ∀ i, Finite (F'.obj i) := fun i => Finite.of_equiv (F.obj (down.obj i)) equiv.ulift.symm
+ -- Step 2: apply the bootstrap theorem
+ cases isEmpty_or_nonempty J
+ · fconstructor <;> exact isEmptyElim
+ haveI : is_cofiltered J := ⟨⟩
+ obtain ⟨u, hu⟩ := NonemptySectionsOfFiniteCofilteredSystem.init F'
+ -- Step 3: interpret the results
+ use fun j => (u ⟨j⟩).down
+ intro j j' f
+ have h := @hu (⟨j⟩ : J') (⟨j'⟩ : J') (ULift.up f)
+ simp only [as_small.down, functor.comp_map, ulift_functor_map, functor.op_map] at h
+ simp_rw [← h]
+ rfl
+#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
+
+/-- The inverse limit of nonempty finite types is nonempty.
+
+See `nonempty_sections_of_finite_cofiltered_system` for a generalization to cofiltered limits.
+That version applies in almost all cases, and the only difference is that this version
+allows `J` to be empty.
+
+This may be regarded as a generalization of Kőnig's lemma.
+To specialize: given a locally finite connected graph, take `Jᵒᵖ` to be `ℕ` and
+`F j` to be length-`j` paths that start from an arbitrary fixed vertex.
+Elements of `F.sections` can be read off as infinite rays in the graph. -/
+theorem nonempty_sections_of_finite_inverse_system {J : Type u} [Preorder J] [IsDirected J (· ≤ ·)]
+ (F : Jᵒᵖ ⥤ Type v) [∀ j : Jᵒᵖ, Finite (F.obj j)] [∀ j : Jᵒᵖ, Nonempty (F.obj j)] :
+ F.sections.Nonempty := by
+ cases isEmpty_or_nonempty J
+ · haveI : IsEmpty Jᵒᵖ := ⟨fun j => isEmptyElim j.unop⟩
+ -- TODO: this should be a global instance
+ exact ⟨isEmptyElim, isEmptyElim⟩
+ · exact nonempty_sections_of_finite_cofiltered_system _
+#align nonempty_sections_of_finite_inverse_system nonempty_sections_of_finite_inverse_system
+
+end FiniteKonig
namespace CategoryTheory
namespace Functor
-open IsCofiltered Set FunctorToTypes
-
variable {J : Type u} [Category J] (F : J ⥤ Type v) {i j k : J} (s : Set (F.obj i))
/-- The eventual range of the functor `F : J ⥤ Type v` at index `j : J` is the intersection
@@ -111,9 +180,9 @@ theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
apply range_comp_subset_range
#align category_theory.functor.eventual_range_eq_range_precomp CategoryTheory.Functor.eventualRange_eq_range_precomp
-theorem isMittagLeffler_of_surjective (h : ∀ (i j : J) (f : i ⟶ j), (F.map f).Surjective) :
+theorem isMittagLeffler_of_surjective (h : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) :
F.IsMittagLeffler := fun j =>
- ⟨j, 𝟙 j, fun k g => by rw [map_id, types_id, range_id, (h k j g).range_eq]⟩
+ ⟨j, 𝟙 j, fun k g => by rw [map_id, types_id, range_id, (h g).range_eq]⟩
#align category_theory.functor.is_mittag_leffler_of_surjective CategoryTheory.Functor.isMittagLeffler_of_surjective
/-- The subfunctor of `F` obtained by restricting to the preimages of a set `s ∈ F.obj i`. -/
@@ -135,6 +204,10 @@ def toPreimages : J ⥤ Type v where
rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
+instance toPreimages_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite ((F.toPreimages s).obj j) :=
+ fun j => Subtype.finite
+#align category_theory.functor.to_preimages_finite CategoryTheory.Functor.toPreimages_finite
+
variable [IsCofilteredOrEmpty J]
theorem eventualRange_mapsTo (f : j ⟶ i) :
@@ -227,6 +300,10 @@ def toEventualRanges : J ⥤ Type v
rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
+instance toEventualRanges_finite [∀ j, Finite (F.obj j)] : ∀ j, Finite (F.toEventualRanges.obj j) :=
+ fun j => Subtype.finite
+#align category_theory.functor.to_eventual_ranges_finite CategoryTheory.Functor.toEventualRanges_finite
+
/-- The sections of the functor `F : J ⥤ Type v` are in bijection with the sections of
`F.eventual_ranges`.
-/
@@ -247,7 +324,7 @@ def toEventualRangesSectionsEquiv : F.toEventualRanges.sections ≃ F.sections
If `F` satisfies the Mittag-Leffler condition, its restriction to eventual ranges is a surjective
functor.
-/
-theorem surjective_toEventualRanges (h : F.IsMittagLeffler) (f : i ⟶ j) :
+theorem surjective_toEventualRanges (h : F.IsMittagLeffler) ⦃i j⦄ (f : i ⟶ j) :
(F.toEventualRanges.map f).Surjective := fun ⟨x, hx⟩ =>
by
obtain ⟨y, hy, rfl⟩ := h.subset_image_eventual_range F f hx
@@ -264,12 +341,74 @@ theorem toEventualRanges_nonempty (h : F.IsMittagLeffler) [∀ j : J, Nonempty (
#align category_theory.functor.to_eventual_ranges_nonempty CategoryTheory.Functor.toEventualRanges_nonempty
/-- If `F` has all arrows surjective, then it "factors through a poset". -/
-theorem thin_diagram_of_surjective (Fsur : ∀ (i j : J) (f : i ⟶ j), (F.map f).Surjective) (i j)
+theorem thin_diagram_of_surjective (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) {i j}
(f g : i ⟶ j) : F.map f = F.map g :=
let ⟨k, φ, hφ⟩ := cone_maps f g
- (Fsur k i φ).injective_comp_right <| by simp_rw [← types_comp, ← F.map_comp, hφ]
+ (Fsur φ).injective_comp_right <| by simp_rw [← types_comp, ← F.map_comp, hφ]
#align category_theory.functor.thin_diagram_of_surjective CategoryTheory.Functor.thin_diagram_of_surjective
+theorem toPreimages_nonempty_of_surjective [hFn : ∀ j : J, Nonempty (F.obj j)]
+ (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective) (hs : s.Nonempty) (j) :
+ Nonempty ((F.toPreimages s).obj j) :=
+ by
+ simp only [to_preimages_obj, nonempty_coe_sort, nonempty_Inter, mem_preimage]
+ obtain h | ⟨⟨ji⟩⟩ := isEmpty_or_nonempty (j ⟶ i)
+ · exact ⟨(hFn j).some, fun ji => h.elim ji⟩
+ · obtain ⟨y, ys⟩ := hs
+ obtain ⟨x, rfl⟩ := Fsur ji y
+ exact ⟨x, fun ji' => (F.thin_diagram_of_surjective Fsur ji' ji).symm ▸ ys⟩
+#align category_theory.functor.to_preimages_nonempty_of_surjective CategoryTheory.Functor.toPreimages_nonempty_of_surjective
+
+theorem eval_section_injective_of_eventually_injective {j}
+ (Finj : ∀ (i) (f : i ⟶ j), (F.map f).Injective) (i) (f : i ⟶ j) :
+ (fun s : F.sections => s.val j).Injective :=
+ by
+ refine' fun s₀ s₁ h => Subtype.ext <| funext fun k => _
+ obtain ⟨m, mi, mk, _⟩ := cone_objs i k
+ dsimp at h
+ rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
+ rw [← s₀.prop mk, ← s₁.prop mk]
+ refine' congr_arg _ (Finj m (mi ≫ f) h)
+#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injective
+
+section FiniteCofilteredSystem
+
+variable [∀ j : J, Nonempty (F.obj j)] [∀ j : J, Finite (F.obj j)]
+ (Fsur : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.map f).Surjective)
+
+include Fsur
+
+theorem eval_section_surjective_of_surjective (i : J) :
+ (fun s : F.sections => s.val i).Surjective := fun x =>
+ by
+ let s : Set (F.obj i) := {x}
+ haveI := F.to_preimages_nonempty_of_surjective s Fsur (singleton_nonempty x)
+ obtain ⟨sec, h⟩ := nonempty_sections_of_finite_cofiltered_system (F.to_preimages s)
+ refine' ⟨⟨fun j => (sec j).val, fun j k jk => by simpa [Subtype.ext_iff] using h jk⟩, _⟩
+ · have := (sec i).Prop
+ simp only [mem_Inter, mem_preimage, mem_singleton_iff] at this
+ replace this := this (𝟙 i)
+ rwa [map_id_apply] at this
+#align category_theory.functor.eval_section_surjective_of_surjective CategoryTheory.Functor.eval_section_surjective_of_surjective
+
+theorem eventually_injective [Nonempty J] [Finite F.sections] :
+ ∃ j, ∀ (i) (f : i ⟶ j), (F.map f).Injective :=
+ by
+ haveI : ∀ j, Fintype (F.obj j) := fun j => Fintype.ofFinite (F.obj j)
+ haveI : Fintype F.sections := Fintype.ofFinite F.sections
+ have card_le : ∀ j, Fintype.card (F.obj j) ≤ Fintype.card F.sections := fun j =>
+ Fintype.card_le_of_surjective _ (F.eval_section_surjective_of_surjective Fsur j)
+ let fn j := Fintype.card F.sections - Fintype.card (F.obj j)
+ refine'
+ ⟨fn.argmin nat.well_founded_lt.wf, fun i f =>
+ ((Fintype.bijective_iff_surjective_and_card _).2
+ ⟨Fsur f, le_antisymm _ (Fintype.card_le_of_surjective _ <| Fsur f)⟩).1⟩
+ rw [← Nat.sub_sub_self (card_le i), tsub_le_iff_tsub_le]
+ apply fn.argmin_le
+#align category_theory.functor.eventually_injective CategoryTheory.Functor.eventually_injective
+
+end FiniteCofilteredSystem
+
end Functor
end CategoryTheory
Subsingleton,Nontrivial
off of Data.Set.Basic
(#11832)
Moves definition of and lemmas related to Set.Subsingleton
and Set.Nontrivial
to a new file, so that Basic
can be shorter.
@@ -6,7 +6,7 @@ Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
import Mathlib.CategoryTheory.Filtered.Basic
import Mathlib.Data.Set.Finite
import Mathlib.Topology.Category.TopCat.Limits.Konig
-import Mathlib.Data.Set.Basic
+import Mathlib.Data.Set.Subsingleton
#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
@@ -185,11 +185,15 @@ def toPreimages : J ⥤ Type v where
rw [← mem_preimage, preimage_preimage, mem_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
map_id j := by
- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
+ -- Adaptation note: nightly-2024-03-16: simp was
+ -- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
+ simp only [MapsTo.restrict, Subtype.map_def, F.map_id]
ext
rfl
map_comp f g := by
- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
+ -- Adaptation note: nightly-2024-03-16: simp was
+ -- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
+ simp only [MapsTo.restrict, Subtype.map_def, F.map_comp]
rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
@@ -272,11 +276,15 @@ def toEventualRanges : J ⥤ Type v where
obj j := F.eventualRange j
map f := (F.eventualRange_mapsTo f).restrict _ _ _
map_id i := by
- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
+ -- Adaptation note: nightly-2024-03-16: simp was
+ -- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
+ simp only [MapsTo.restrict, Subtype.map_def, F.map_id]
ext
rfl
map_comp _ _ := by
- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
+ -- Adaptation note: nightly-2024-03-16: simp was
+ -- simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
+ simp only [MapsTo.restrict, Subtype.map_def, F.map_comp]
rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
@@ -96,7 +96,7 @@ theorem nonempty_sections_of_finite_cofiltered_system {J : Type u} [Category.{w}
use fun j => (u ⟨j⟩).down
intro j j' f
have h := @hu (⟨j⟩ : J') (⟨j'⟩ : J') (ULift.up f)
- simp only [AsSmall.down, Functor.comp_map, uliftFunctor_map, Functor.op_map] at h
+ simp only [F', down, AsSmall.down, Functor.comp_map, uliftFunctor_map, Functor.op_map] at h
simp_rw [← h]
#align nonempty_sections_of_finite_cofiltered_system nonempty_sections_of_finite_cofiltered_system
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.
@@ -159,7 +159,7 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
obtain ⟨k, g, hg⟩ := F.isMittagLeffler_iff_eventualRange.1 h j
rw [hg]; intro x hx
obtain ⟨x, rfl⟩ := F.mem_eventualRange_iff.1 hx (g ≫ f)
- refine' ⟨_, ⟨x, rfl⟩, by rw [map_comp_apply]⟩
+ exact ⟨_, ⟨x, rfl⟩, by rw [map_comp_apply]⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
@@ -340,7 +340,7 @@ theorem eval_section_injective_of_eventually_injective {j}
dsimp at h
rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
rw [← s₀.prop mk, ← s₁.prop mk]
- refine' congr_arg _ (Finj m (mi ≫ f) h)
+ exact congr_arg _ (Finj m (mi ≫ f) h)
#align category_theory.functor.eval_section_injective_of_eventually_injective CategoryTheory.Functor.eval_section_injective_of_eventually_injective
section FiniteCofilteredSystem
@@ -159,7 +159,7 @@ theorem IsMittagLeffler.subset_image_eventualRange (h : F.IsMittagLeffler) (f :
obtain ⟨k, g, hg⟩ := F.isMittagLeffler_iff_eventualRange.1 h j
rw [hg]; intro x hx
obtain ⟨x, rfl⟩ := F.mem_eventualRange_iff.1 hx (g ≫ f)
- refine' ⟨_, ⟨x, rfl⟩, by rw [map_comp_apply] ⟩
+ refine' ⟨_, ⟨x, rfl⟩, by rw [map_comp_apply]⟩
#align category_theory.functor.is_mittag_leffler.subset_image_eventual_range CategoryTheory.Functor.IsMittagLeffler.subset_image_eventualRange
theorem eventualRange_eq_range_precomp (f : i ⟶ j) (g : j ⟶ k)
Data.Set.Basic
from scripts/noshake.json
.example
s only,
move these example
s to a new test file.Order.Filter.Basic
dependency on Control.Traversable.Instances
,
as the relevant parts were moved to Order.Filter.ListTraverse
.lake exe shake --fix
.@@ -6,6 +6,7 @@ Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
import Mathlib.CategoryTheory.Filtered.Basic
import Mathlib.Data.Set.Finite
import Mathlib.Topology.Category.TopCat.Limits.Konig
+import Mathlib.Data.Set.Basic
#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -184,11 +184,11 @@ def toPreimages : J ⥤ Type v where
rw [← mem_preimage, preimage_preimage, mem_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
map_id j := by
- simp_rw [MapsTo.restrict, Subtype.map, F.map_id]
+ simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
ext
rfl
map_comp f g := by
- simp_rw [MapsTo.restrict, Subtype.map, F.map_comp]
+ simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
rfl
#align category_theory.functor.to_preimages CategoryTheory.Functor.toPreimages
@@ -271,11 +271,11 @@ def toEventualRanges : J ⥤ Type v where
obj j := F.eventualRange j
map f := (F.eventualRange_mapsTo f).restrict _ _ _
map_id i := by
- simp_rw [MapsTo.restrict, Subtype.map, F.map_id]
+ simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_id]
ext
rfl
map_comp _ _ := by
- simp_rw [MapsTo.restrict, Subtype.map, F.map_comp]
+ simp (config := { unfoldPartialApp := true }) only [MapsTo.restrict, Subtype.map, F.map_comp]
rfl
#align category_theory.functor.to_eventual_ranges CategoryTheory.Functor.toEventualRanges
@@ -3,7 +3,7 @@ Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rig
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-/
-import Mathlib.CategoryTheory.Filtered
+import Mathlib.CategoryTheory.Filtered.Basic
import Mathlib.Data.Set.Finite
import Mathlib.Topology.Category.TopCat.Limits.Konig
@@ -246,7 +246,7 @@ theorem IsMittagLeffler.toPreimages (h : F.IsMittagLeffler) : (F.toPreimages s).
rw [mem_preimage, ← map_comp_apply, h₄, ← Category.assoc, map_comp_apply, h₃,
← map_comp_apply]
apply mem_iInter.1 hx
- · simp_rw [toPreimages_map, MapsTo.val_restrict_apply, Subtype.coe_mk]
+ · simp_rw [toPreimages_map, MapsTo.val_restrict_apply]
rw [← Category.assoc, map_comp_apply, h₃, map_comp_apply]
#align category_theory.functor.is_mittag_leffler.to_preimages CategoryTheory.Functor.IsMittagLeffler.toPreimages
@@ -2,16 +2,13 @@
Copyright (c) 2022 Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-
-! This file was ported from Lean 3 source module category_theory.cofiltered_system
-! 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.Filtered
import Mathlib.Data.Set.Finite
import Mathlib.Topology.Category.TopCat.Limits.Konig
+#align_import category_theory.cofiltered_system from "leanprover-community/mathlib"@"178a32653e369dce2da68dc6b2694e385d484ef1"
+
/-!
# Cofiltered systems
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -182,7 +182,7 @@ theorem isMittagLeffler_of_surjective (h : ∀ ⦃i j : J⦄ (f : i ⟶ j), (F.m
def toPreimages : J ⥤ Type v where
obj j := ⋂ f : j ⟶ i, F.map f ⁻¹' s
map g := MapsTo.restrict (F.map g) _ _ fun x h => by
- rw [mem_iInter] at h⊢
+ rw [mem_iInter] at h ⊢
intro f
rw [← mem_preimage, preimage_preimage, mem_preimage]
convert h (g ≫ f); rw [F.map_comp]; rfl
@@ -203,7 +203,7 @@ variable [IsCofilteredOrEmpty J]
theorem eventualRange_mapsTo (f : j ⟶ i) :
(F.eventualRange j).MapsTo (F.map f) (F.eventualRange i) := fun x hx => by
- rw [mem_eventualRange_iff] at hx⊢
+ rw [mem_eventualRange_iff] at hx ⊢
intro k f'
obtain ⟨l, g, g', he⟩ := cospan f f'
obtain ⟨x, rfl⟩ := hx g
@@ -10,7 +10,7 @@ Authors: Kyle Miller, Adam Topaz, Rémi Bottinelli, Junyan Xu
-/
import Mathlib.CategoryTheory.Filtered
import Mathlib.Data.Set.Finite
-import Mathlib.Topology.Category.Top.Limits.Konig
+import Mathlib.Topology.Category.TopCat.Limits.Konig
/-!
# Cofiltered systems
The unported dependencies are