category_theory.concrete_category.basic
⟷
Mathlib.CategoryTheory.ConcreteCategory.Basic
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)
(last sync)
These will make life slightly easier dealing with our universe problems. Most of these changes have in fact already been made in mathlib4, and the remainder are in https://github.com/leanprover-community/mathlib4/pull/5605.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -38,7 +38,7 @@ See [Ahrens and Lumsdaine, *Displayed Categories*][ahrens2017] for
related work.
-/
-universes w v v' u
+universes w v v' u u'
namespace category_theory
@@ -60,7 +60,7 @@ class concrete_category (C : Type u) [category.{v} C] :=
attribute [instance] concrete_category.forget_faithful
/-- The forgetful functor from a concrete category to `Type u`. -/
-@[reducible] def forget (C : Type v) [category C] [concrete_category.{u} C] : C ⥤ Type u :=
+@[reducible] def forget (C : Type u) [category.{v} C] [concrete_category.{w} C] : C ⥤ Type w :=
concrete_category.forget C
instance concrete_category.types : concrete_category (Type u) :=
@@ -75,14 +75,14 @@ You can use it on particular examples as:
instance : has_coe_to_sort X := concrete_category.has_coe_to_sort X
```
-/
-def concrete_category.has_coe_to_sort (C : Type v) [category C] [concrete_category C] :
- has_coe_to_sort C (Type u) :=
+def concrete_category.has_coe_to_sort (C : Type u) [category.{v} C] [concrete_category.{w} C] :
+ has_coe_to_sort C (Type w) :=
⟨(concrete_category.forget C).obj⟩
section
local attribute [instance] concrete_category.has_coe_to_sort
-variables {C : Type v} [category C] [concrete_category C]
+variables {C : Type u} [category.{v} C] [concrete_category.{w} C]
@[simp] lemma forget_obj_eq_coe {X : C} : (forget C).obj X = X := rfl
@@ -170,51 +170,54 @@ end
`has_forget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
-class has_forget₂ (C : Type v) (D : Type v') [category C] [concrete_category.{u} C] [category D]
- [concrete_category.{u} D] :=
+class has_forget₂ (C : Type u) (D : Type u') [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] :=
(forget₂ : C ⥤ D)
(forget_comp : forget₂ ⋙ (forget D) = forget C . obviously)
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`has_forget₂ C `. -/
-@[reducible] def forget₂ (C : Type v) (D : Type v') [category C] [concrete_category C] [category D]
- [concrete_category D] [has_forget₂ C D] : C ⥤ D :=
+@[reducible] def forget₂ (C : Type u) (D : Type u') [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] [has_forget₂ C D] : C ⥤ D :=
has_forget₂.forget₂
-instance forget₂_faithful (C : Type v) (D : Type v') [category C] [concrete_category C] [category D]
- [concrete_category D] [has_forget₂ C D] : faithful (forget₂ C D) :=
+instance forget₂_faithful (C : Type u) (D : Type u') [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] [has_forget₂ C D] : faithful (forget₂ C D) :=
has_forget₂.forget_comp.faithful_of_comp
-instance forget₂_preserves_monomorphisms (C : Type v) (D : Type v') [category C]
- [concrete_category C] [category D] [concrete_category D] [has_forget₂ C D]
+instance forget₂_preserves_monomorphisms (C : Type u) (D : Type u')
+ [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] [has_forget₂ C D]
[(forget C).preserves_monomorphisms] : (forget₂ C D).preserves_monomorphisms :=
have (forget₂ C D ⋙ forget D).preserves_monomorphisms,
by { simp only [has_forget₂.forget_comp], apply_instance },
by exactI functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
-instance forget₂_preserves_epimorphisms (C : Type v) (D : Type v') [category C]
- [concrete_category C] [category D] [concrete_category D] [has_forget₂ C D]
+instance forget₂_preserves_epimorphisms (C : Type u) (D : Type u')
+ [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] [has_forget₂ C D]
[(forget C).preserves_epimorphisms] : (forget₂ C D).preserves_epimorphisms :=
have (forget₂ C D ⋙ forget D).preserves_epimorphisms,
by { simp only [has_forget₂.forget_comp], apply_instance },
by exactI functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
-instance induced_category.concrete_category {C : Type v} {D : Type v'} [category D]
- [concrete_category D] (f : C → D) :
- concrete_category (induced_category D f) :=
+instance induced_category.concrete_category {C : Type u} {D : Type u'} [category.{v'} D]
+ [concrete_category.{w} D] (f : C → D) :
+ concrete_category.{w} (induced_category D f) :=
{ forget := induced_functor f ⋙ forget D }
-instance induced_category.has_forget₂ {C : Type v} {D : Type v'} [category D] [concrete_category D]
+instance induced_category.has_forget₂
+ {C : Type u} {D : Type u'} [category.{v'} D] [concrete_category.{w} D]
(f : C → D) :
has_forget₂ (induced_category D f) D :=
{ forget₂ := induced_functor f,
forget_comp := rfl }
-instance full_subcategory.concrete_category {C : Type v} [category C] [concrete_category C]
+instance full_subcategory.concrete_category {C : Type u} [category.{v} C] [concrete_category.{w} C]
(Z : C → Prop) : concrete_category (full_subcategory Z) :=
{ forget := full_subcategory_inclusion Z ⋙ forget C }
-instance full_subcategory.has_forget₂ {C : Type v} [category C] [concrete_category C]
+instance full_subcategory.has_forget₂ {C : Type u} [category.{v} C] [concrete_category.{w} C]
(Z : C → Prop) : has_forget₂ (full_subcategory Z) C :=
{ forget₂ := full_subcategory_inclusion Z,
forget_comp := rfl }
@@ -223,8 +226,9 @@ instance full_subcategory.has_forget₂ {C : Type v} [category C] [concrete_cate
In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
-def has_forget₂.mk' {C : Type v} {D : Type v'} [category C] [concrete_category C] [category D]
- [concrete_category D] (obj : C → D) (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
+def has_forget₂.mk' {C : Type u} {D : Type u'} [category.{v} C] [concrete_category.{w} C]
+ [category.{v'} D] [concrete_category.{w} D] (obj : C → D)
+ (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
(map : Π {X Y}, (X ⟶ Y) → (obj X ⟶ obj Y))
(h_map : ∀ {X Y} {f : X ⟶ Y}, (forget D).map (map f) == (forget C).map f) :
has_forget₂ C D :=
@@ -233,8 +237,8 @@ has_forget₂ C D :=
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
-def has_forget_to_Type (C : Type v) [category C] [concrete_category C] :
- has_forget₂ C (Type u) :=
+def has_forget_to_Type (C : Type u) [category.{v} C] [concrete_category.{w} C] :
+ has_forget₂ C (Type w) :=
{ forget₂ := forget C,
forget_comp := functor.comp_id _ }
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -59,7 +59,7 @@ They are specified that order, to avoid unnecessary universe annotations.
-/
class ConcreteCategory (C : Type u) [Category.{v} C] where
forget : C ⥤ Type w
- [forget_faithful : Faithful forget]
+ [forget_faithful : CategoryTheory.Functor.Faithful forget]
#align category_theory.concrete_category CategoryTheory.ConcreteCategory
-/
@@ -258,7 +258,8 @@ def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w}
#print CategoryTheory.forget₂_faithful /-
instance forget₂_faithful (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
- [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] :
+ CategoryTheory.Functor.Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
-/
@@ -321,7 +322,7 @@ def HasForget₂.mk' {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCatego
(map : ∀ {X Y}, (X ⟶ Y) → (obj X ⟶ obj Y))
(h_map : ∀ {X Y} {f : X ⟶ Y}, HEq ((forget D).map (map f)) ((forget C).map f)) : HasForget₂ C D
where
- forget₂ := Faithful.div _ _ _ @h_obj _ @h_map
+ forget₂ := CategoryTheory.Functor.Faithful.div _ _ _ @h_obj _ @h_map
forget_comp := by apply faithful.div_comp
#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -48,7 +48,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -48,7 +48,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
-/
-import Mathbin.CategoryTheory.Types
-import Mathbin.CategoryTheory.Functor.EpiMono
-import Mathbin.CategoryTheory.Limits.Constructions.EpiMono
+import CategoryTheory.Types
+import CategoryTheory.Functor.EpiMono
+import CategoryTheory.Limits.Constructions.EpiMono
#align_import category_theory.concrete_category.basic from "leanprover-community/mathlib"@"311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872"
@@ -48,7 +48,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
-
-! This file was ported from Lean 3 source module category_theory.concrete_category.basic
-! leanprover-community/mathlib commit 311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Types
import Mathbin.CategoryTheory.Functor.EpiMono
import Mathbin.CategoryTheory.Limits.Constructions.EpiMono
+#align_import category_theory.concrete_category.basic from "leanprover-community/mathlib"@"311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872"
+
/-!
# Concrete categories
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
! This file was ported from Lean 3 source module category_theory.concrete_category.basic
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
+! leanprover-community/mathlib commit 311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -44,7 +44,7 @@ related work.
-/
-universe w v v' u
+universe w v v' u u'
namespace CategoryTheory
@@ -71,7 +71,7 @@ attribute [instance] concrete_category.forget_faithful
#print CategoryTheory.forget /-
/-- The forgetful functor from a concrete category to `Type u`. -/
@[reducible]
-def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
+def forget (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] : C ⥤ Type w :=
ConcreteCategory.forget C
#align category_theory.forget CategoryTheory.forget
-/
@@ -90,8 +90,8 @@ You can use it on particular examples as:
instance : has_coe_to_sort X := concrete_category.has_coe_to_sort X
```
-/
-def ConcreteCategory.hasCoeToSort (C : Type v) [Category C] [ConcreteCategory C] :
- CoeSort C (Type u) :=
+def ConcreteCategory.hasCoeToSort (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] :
+ CoeSort C (Type w) :=
⟨(ConcreteCategory.forget C).obj⟩
#align category_theory.concrete_category.has_coe_to_sort CategoryTheory.ConcreteCategory.hasCoeToSort
-/
@@ -100,7 +100,7 @@ section
attribute [local instance] concrete_category.has_coe_to_sort
-variable {C : Type v} [Category C] [ConcreteCategory C]
+variable {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
@[simp]
theorem forget_obj_eq_coe {X : C} : (forget C).obj X = X :=
@@ -242,8 +242,8 @@ end
/-- `has_forget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
-class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u} C] [Category D]
- [ConcreteCategory.{u} D] where
+class HasForget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] where
forget₂ : C ⥤ D
forget_comp : forget₂ ⋙ forget D = forget C := by obviously
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
@@ -253,23 +253,23 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`has_forget₂ C `. -/
@[reducible]
-def forget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] [HasForget₂ C D] : C ⥤ D :=
+def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C] [Category.{v'} D]
+ [ConcreteCategory.{w} D] [HasForget₂ C D] : C ⥤ D :=
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
-/
#print CategoryTheory.forget₂_faithful /-
-instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
+instance forget₂_faithful (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
-/
#print CategoryTheory.forget₂_preservesMonomorphisms /-
-instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
- [Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
- (forget₂ C D).PreservesMonomorphisms :=
+instance forget₂_preservesMonomorphisms (C : Type u) (D : Type u') [Category.{v} C]
+ [ConcreteCategory.{w} C] [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D]
+ [(forget C).PreservesMonomorphisms] : (forget₂ C D).PreservesMonomorphisms :=
have : (forget₂ C D ⋙ forget D).PreservesMonomorphisms := by simp only [has_forget₂.forget_comp];
infer_instance
functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
@@ -277,9 +277,9 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
-/
#print CategoryTheory.forget₂_preservesEpimorphisms /-
-instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
- [Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
- (forget₂ C D).PreservesEpimorphisms :=
+instance forget₂_preservesEpimorphisms (C : Type u) (D : Type u') [Category.{v} C]
+ [ConcreteCategory.{w} C] [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D]
+ [(forget C).PreservesEpimorphisms] : (forget₂ C D).PreservesEpimorphisms :=
have : (forget₂ C D ⋙ forget D).PreservesEpimorphisms := by simp only [has_forget₂.forget_comp];
infer_instance
functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
@@ -287,28 +287,28 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
-/
#print CategoryTheory.InducedCategory.concreteCategory /-
-instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
- [ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f)
+instance InducedCategory.concreteCategory {C : Type u} {D : Type u'} [Category.{v'} D]
+ [ConcreteCategory.{w} D] (f : C → D) : ConcreteCategory.{w} (InducedCategory D f)
where forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
-/
#print CategoryTheory.InducedCategory.hasForget₂ /-
-instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
- (f : C → D) : HasForget₂ (InducedCategory D f) D
+instance InducedCategory.hasForget₂ {C : Type u} {D : Type u'} [Category.{v'} D]
+ [ConcreteCategory.{w} D] (f : C → D) : HasForget₂ (InducedCategory D f) D
where
forget₂ := inducedFunctor f
forget_comp := rfl
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
-/
-instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
+instance FullSubcategory.concreteCategory {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z)
where forget := fullSubcategoryInclusion Z ⋙ forget C
#align category_theory.full_subcategory.concrete_category CategoryTheory.FullSubcategoryₓ.concreteCategory
-instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategory C] (Z : C → Prop) :
- HasForget₂ (FullSubcategory Z) C
+instance FullSubcategory.hasForget₂ {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
+ (Z : C → Prop) : HasForget₂ (FullSubcategory Z) C
where
forget₂ := fullSubcategoryInclusion Z
forget_comp := rfl
@@ -318,8 +318,9 @@ instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategor
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
-def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] (obj : C → D) (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
+def HasForget₂.mk' {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] (obj : C → D)
+ (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
(map : ∀ {X Y}, (X ⟶ Y) → (obj X ⟶ obj Y))
(h_map : ∀ {X Y} {f : X ⟶ Y}, HEq ((forget D).map (map f)) ((forget C).map f)) : HasForget₂ C D
where
@@ -331,7 +332,7 @@ def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C
#print CategoryTheory.hasForgetToType /-
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
-def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget₂ C (Type u)
+def hasForgetToType (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] : HasForget₂ C (Type w)
where
forget₂ := forget C
forget_comp := Functor.comp_id _
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -51,7 +51,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
@@ -115,6 +115,7 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun f => X → Y :
attribute [local instance] concrete_category.has_coe_to_fun
+#print CategoryTheory.ConcreteCategory.hom_ext /-
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g :=
by
@@ -122,88 +123,122 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
ext
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
+-/
+#print CategoryTheory.forget_map_eq_coe /-
@[simp]
theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
rfl
#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
+-/
+#print CategoryTheory.congr_hom /-
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
-/
theorem congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun k : X ⟶ Y => (k : X → Y)) h) x
#align category_theory.congr_hom CategoryTheory.congr_hom
+-/
+#print CategoryTheory.coe_id /-
theorem coe_id {X : C} : (𝟙 X : X → X) = id :=
(forget _).map_id X
#align category_theory.coe_id CategoryTheory.coe_id
+-/
+#print CategoryTheory.coe_comp /-
theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) = g ∘ f :=
(forget _).map_comp f g
#align category_theory.coe_comp CategoryTheory.coe_comp
+-/
+#print CategoryTheory.id_apply /-
@[simp]
theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
congr_fun ((forget _).map_id X) x
#align category_theory.id_apply CategoryTheory.id_apply
+-/
+#print CategoryTheory.comp_apply /-
@[simp]
theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
congr_fun ((forget _).map_comp _ _) x
#align category_theory.comp_apply CategoryTheory.comp_apply
+-/
+#print CategoryTheory.ConcreteCategory.congr_hom /-
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_hom
+-/
+#print CategoryTheory.ConcreteCategory.congr_arg /-
theorem ConcreteCategory.congr_arg {X Y : C} (f : X ⟶ Y) {x x' : X} (h : x = x') : f x = f x' :=
congr_arg (f : X → Y) h
#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_arg
+-/
+#print CategoryTheory.ConcreteCategory.mono_of_injective /-
/-- In any concrete category, injective morphisms are monomorphisms. -/
theorem ConcreteCategory.mono_of_injective {X Y : C} (f : X ⟶ Y) (i : Function.Injective f) :
Mono f :=
(forget C).mono_of_mono_map ((mono_iff_injective f).2 i)
#align category_theory.concrete_category.mono_of_injective CategoryTheory.ConcreteCategory.mono_of_injective
+-/
+#print CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback /-
theorem ConcreteCategory.injective_of_mono_of_preservesPullback {X Y : C} (f : X ⟶ Y) [Mono f]
[PreservesLimitsOfShape WalkingCospan (forget C)] : Function.Injective f :=
(mono_iff_injective ((forget C).map f)).mp inferInstance
#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback
+-/
+#print CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback /-
theorem ConcreteCategory.mono_iff_injective_of_preservesPullback {X Y : C} (f : X ⟶ Y)
[PreservesLimitsOfShape WalkingCospan (forget C)] : Mono f ↔ Function.Injective f :=
((forget C).mono_map_iff_mono _).symm.trans (mono_iff_injective _)
#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback
+-/
+#print CategoryTheory.ConcreteCategory.epi_of_surjective /-
/-- In any concrete category, surjective morphisms are epimorphisms. -/
theorem ConcreteCategory.epi_of_surjective {X Y : C} (f : X ⟶ Y) (s : Function.Surjective f) :
Epi f :=
(forget C).epi_of_epi_map ((epi_iff_surjective f).2 s)
#align category_theory.concrete_category.epi_of_surjective CategoryTheory.ConcreteCategory.epi_of_surjective
+-/
+#print CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout /-
theorem ConcreteCategory.surjective_of_epi_of_preservesPushout {X Y : C} (f : X ⟶ Y) [Epi f]
[PreservesColimitsOfShape WalkingSpan (forget C)] : Function.Surjective f :=
(epi_iff_surjective ((forget C).map f)).mp inferInstance
#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout
+-/
+#print CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout /-
theorem ConcreteCategory.epi_iff_surjective_of_preservesPushout {X Y : C} (f : X ⟶ Y)
[PreservesColimitsOfShape WalkingSpan (forget C)] : Epi f ↔ Function.Surjective f :=
((forget C).epi_map_iff_epi _).symm.trans (epi_iff_surjective _)
#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout
+-/
+#print CategoryTheory.ConcreteCategory.bijective_of_isIso /-
theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
Function.Bijective ((forget C).map f) := by rw [← is_iso_iff_bijective]; infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
+-/
+#print CategoryTheory.ConcreteCategory.hasCoeToFun_Type /-
@[simp]
theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : coeFn f = f :=
rfl
#align category_theory.concrete_category.has_coe_to_fun_Type CategoryTheory.ConcreteCategory.hasCoeToFun_Type
+-/
end
+#print CategoryTheory.HasForget₂ /-
/-- `has_forget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
@@ -212,7 +247,9 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
forget₂ : C ⥤ D
forget_comp : forget₂ ⋙ forget D = forget C := by obviously
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
+-/
+#print CategoryTheory.forget₂ /-
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`has_forget₂ C `. -/
@[reducible]
@@ -220,12 +257,16 @@ def forget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Cate
[ConcreteCategory D] [HasForget₂ C D] : C ⥤ D :=
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
+-/
+#print CategoryTheory.forget₂_faithful /-
instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
[ConcreteCategory D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
+-/
+#print CategoryTheory.forget₂_preservesMonomorphisms /-
instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
(forget₂ C D).PreservesMonomorphisms :=
@@ -233,7 +274,9 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
infer_instance
functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_monomorphisms CategoryTheory.forget₂_preservesMonomorphisms
+-/
+#print CategoryTheory.forget₂_preservesEpimorphisms /-
instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
(forget₂ C D).PreservesEpimorphisms :=
@@ -241,18 +284,23 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
infer_instance
functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
+-/
+#print CategoryTheory.InducedCategory.concreteCategory /-
instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
[ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f)
where forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
+-/
+#print CategoryTheory.InducedCategory.hasForget₂ /-
instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
(f : C → D) : HasForget₂ (InducedCategory D f) D
where
forget₂ := inducedFunctor f
forget_comp := rfl
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
+-/
instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z)
@@ -266,6 +314,7 @@ instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategor
forget_comp := rfl
#align category_theory.full_subcategory.has_forget₂ CategoryTheory.FullSubcategoryₓ.hasForget₂
+#print CategoryTheory.HasForget₂.mk' /-
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
@@ -277,7 +326,9 @@ def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C
forget₂ := Faithful.div _ _ _ @h_obj _ @h_map
forget_comp := by apply faithful.div_comp
#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'
+-/
+#print CategoryTheory.hasForgetToType /-
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget₂ C (Type u)
@@ -285,6 +336,7 @@ def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget
forget₂ := forget C
forget_comp := Functor.comp_id _
#align category_theory.has_forget_to_Type CategoryTheory.hasForgetToType
+-/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -197,12 +197,10 @@ theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
Function.Bijective ((forget C).map f) := by rw [← is_iso_iff_bijective]; infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
-#print CategoryTheory.ConcreteCategory.hasCoeToFun_Type /-
@[simp]
theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : coeFn f = f :=
rfl
#align category_theory.concrete_category.has_coe_to_fun_Type CategoryTheory.ConcreteCategory.hasCoeToFun_Type
--/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/c471da714c044131b90c133701e51b877c246677
@@ -206,7 +206,6 @@ theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : coeFn f
end
-#print CategoryTheory.HasForget₂ /-
/-- `has_forget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
@@ -215,9 +214,7 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
forget₂ : C ⥤ D
forget_comp : forget₂ ⋙ forget D = forget C := by obviously
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
--/
-#print CategoryTheory.forget₂ /-
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`has_forget₂ C `. -/
@[reducible]
@@ -225,16 +222,12 @@ def forget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Cate
[ConcreteCategory D] [HasForget₂ C D] : C ⥤ D :=
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
--/
-#print CategoryTheory.forget₂_faithful /-
instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
[ConcreteCategory D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
--/
-#print CategoryTheory.forget₂_preservesMonomorphisms /-
instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
(forget₂ C D).PreservesMonomorphisms :=
@@ -242,9 +235,7 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
infer_instance
functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_monomorphisms CategoryTheory.forget₂_preservesMonomorphisms
--/
-#print CategoryTheory.forget₂_preservesEpimorphisms /-
instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
(forget₂ C D).PreservesEpimorphisms :=
@@ -252,23 +243,18 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
infer_instance
functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
--/
-#print CategoryTheory.InducedCategory.concreteCategory /-
instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
[ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f)
where forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
--/
-#print CategoryTheory.InducedCategory.hasForget₂ /-
instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
(f : C → D) : HasForget₂ (InducedCategory D f) D
where
forget₂ := inducedFunctor f
forget_comp := rfl
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
--/
instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z)
@@ -294,7 +280,6 @@ def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C
forget_comp := by apply faithful.div_comp
#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'
-#print CategoryTheory.hasForgetToType /-
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget₂ C (Type u)
@@ -302,7 +287,6 @@ def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget
forget₂ := forget C
forget_comp := Functor.comp_id _
#align category_theory.has_forget_to_Type CategoryTheory.hasForgetToType
--/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -51,7 +51,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -211,7 +211,7 @@ end
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u} C] [Category D]
- [ConcreteCategory.{u} D] where
+ [ConcreteCategory.{u} D] where
forget₂ : C ⥤ D
forget_comp : forget₂ ⋙ forget D = forget C := by obviously
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -102,12 +102,10 @@ attribute [local instance] concrete_category.has_coe_to_sort
variable {C : Type v} [Category C] [ConcreteCategory C]
-/- warning: category_theory.forget_obj_eq_coe clashes with [anonymous] -> [anonymous]
-Case conversion may be inaccurate. Consider using '#align category_theory.forget_obj_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem [anonymous] {X : C} : (forget C).obj X = X :=
+theorem forget_obj_eq_coe {X : C} : (forget C).obj X = X :=
rfl
-#align category_theory.forget_obj_eq_coe [anonymous]
+#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coe
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
@@ -125,12 +123,10 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
-/- warning: category_theory.forget_map_eq_coe clashes with [anonymous] -> [anonymous]
-Case conversion may be inaccurate. Consider using '#align category_theory.forget_map_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem [anonymous] {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
+theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
rfl
-#align category_theory.forget_map_eq_coe [anonymous]
+#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -103,23 +103,12 @@ attribute [local instance] concrete_category.has_coe_to_sort
variable {C : Type v} [Category C] [ConcreteCategory C]
/- warning: category_theory.forget_obj_eq_coe clashes with [anonymous] -> [anonymous]
-warning: category_theory.forget_obj_eq_coe -> [anonymous] is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{v}} [_inst_1 : CategoryTheory.Category.{u_1, v} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u_2, u_1, v} C _inst_1] {X : C}, Eq.{succ (succ u_2)} Type.{u_2} (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X) (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) X)
-but is expected to have type
- forall {C : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> C -> _inst_1) -> Nat -> (List.{u} C) -> (List.{v} _inst_1)
Case conversion may be inaccurate. Consider using '#align category_theory.forget_obj_eq_coe [anonymous]ₓ'. -/
@[simp]
theorem [anonymous] {X : C} : (forget C).obj X = X :=
rfl
#align category_theory.forget_obj_eq_coe [anonymous]
-/- warning: category_theory.concrete_category.has_coe_to_fun -> CategoryTheory.ConcreteCategory.hasCoeToFun is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y))
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u2} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u1, u3, u2} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u3, succ u1} (Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) => (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.forget.{u2, u1, u3} C _inst_1 _inst_2)) X) -> (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.forget.{u2, u1, u3} C _inst_1 _inst_2)) Y))
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.has_coe_to_fun CategoryTheory.ConcreteCategory.hasCoeToFunₓ'. -/
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun f => X → Y :=
@@ -128,12 +117,6 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun f => X → Y :
attribute [local instance] concrete_category.has_coe_to_fun
-/- warning: category_theory.concrete_category.hom_ext -> CategoryTheory.ConcreteCategory.hom_ext is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_extₓ'. -/
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g :=
by
@@ -143,23 +126,12 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
/- warning: category_theory.forget_map_eq_coe clashes with [anonymous] -> [anonymous]
-warning: category_theory.forget_map_eq_coe -> [anonymous] is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{v}} [_inst_1 : CategoryTheory.Category.{u_1, v} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u_2, u_1, v} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y), Eq.{succ u_2} (Quiver.Hom.{succ u_2, succ u_2} Type.{u_2} (CategoryTheory.CategoryStruct.toQuiver.{u_2, succ u_2} Type.{u_2} (CategoryTheory.Category.toCategoryStruct.{u_2, succ u_2} Type.{u_2} CategoryTheory.types.{u_2})) (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X Y f) (coeFn.{succ u_1, succ u_2} (Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y) => (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) X) -> (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{v, u_1, u_2} C _inst_1 _inst_2 X Y) f)
-but is expected to have type
- forall {C : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> C -> _inst_1) -> Nat -> (List.{u} C) -> (List.{v} _inst_1)
Case conversion may be inaccurate. Consider using '#align category_theory.forget_map_eq_coe [anonymous]ₓ'. -/
@[simp]
theorem [anonymous] {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
rfl
#align category_theory.forget_map_eq_coe [anonymous]
-/- warning: category_theory.congr_hom -> CategoryTheory.congr_hom is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
-Case conversion may be inaccurate. Consider using '#align category_theory.congr_hom CategoryTheory.congr_homₓ'. -/
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
-/
@@ -167,142 +139,64 @@ theorem congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun k : X ⟶ Y => (k : X → Y)) h) x
#align category_theory.congr_hom CategoryTheory.congr_hom
-/- warning: category_theory.coe_id -> CategoryTheory.coe_id is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C}, Eq.{succ u3} ((fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X)) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X X) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X)) (id.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C}, 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X)) (id.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X))
-Case conversion may be inaccurate. Consider using '#align category_theory.coe_id CategoryTheory.coe_idₓ'. -/
theorem coe_id {X : C} : (𝟙 X : X → X) = id :=
(forget _).map_id X
#align category_theory.coe_id CategoryTheory.coe_id
-/- warning: category_theory.coe_comp -> CategoryTheory.coe_comp is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z), Eq.{succ u3} ((fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g)) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Z) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g)) (Function.comp.{succ u3, succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 Y Z) g) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z), 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g)) (Function.comp.{succ u2, succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
-Case conversion may be inaccurate. Consider using '#align category_theory.coe_comp CategoryTheory.coe_compₓ'. -/
theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) = g ∘ f :=
(forget _).map_comp f g
#align category_theory.coe_comp CategoryTheory.coe_comp
-/- warning: category_theory.id_apply -> CategoryTheory.id_apply is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X X) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X) x) x
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X) x) x
-Case conversion may be inaccurate. Consider using '#align category_theory.id_apply CategoryTheory.id_applyₓ'. -/
@[simp]
theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
congr_fun ((forget _).map_id X) x
#align category_theory.id_apply CategoryTheory.id_apply
-/- warning: category_theory.comp_apply -> CategoryTheory.comp_apply is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Z) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g) x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 Y Z) g (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z) (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g) x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x))
-Case conversion may be inaccurate. Consider using '#align category_theory.comp_apply CategoryTheory.comp_applyₓ'. -/
@[simp]
theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
congr_fun ((forget _).map_comp _ _) x
#align category_theory.comp_apply CategoryTheory.comp_apply
-/- warning: category_theory.concrete_category.congr_hom -> CategoryTheory.ConcreteCategory.congr_hom is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_homₓ'. -/
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_hom
-/- warning: category_theory.concrete_category.congr_arg -> CategoryTheory.ConcreteCategory.congr_arg is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) {x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X} {x' : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X}, (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) x x') -> (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x'))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) {x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X} {x' : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X}, (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) x x') -> (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x'))
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_argₓ'. -/
theorem ConcreteCategory.congr_arg {X Y : C} (f : X ⟶ Y) {x x' : X} (h : x = x') : f x = f x' :=
congr_arg (f : X → Y) h
#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_arg
-/- warning: category_theory.concrete_category.mono_of_injective -> CategoryTheory.ConcreteCategory.mono_of_injective is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)) -> (CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.mono_of_injective CategoryTheory.ConcreteCategory.mono_of_injectiveₓ'. -/
/-- In any concrete category, injective morphisms are monomorphisms. -/
theorem ConcreteCategory.mono_of_injective {X Y : C} (f : X ⟶ Y) (i : Function.Injective f) :
Mono f :=
(forget C).mono_of_mono_map ((mono_iff_injective f).2 i)
#align category_theory.concrete_category.mono_of_injective CategoryTheory.ConcreteCategory.mono_of_injective
-/- warning: category_theory.concrete_category.injective_of_mono_of_preserves_pullback -> CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullbackₓ'. -/
theorem ConcreteCategory.injective_of_mono_of_preservesPullback {X Y : C} (f : X ⟶ Y) [Mono f]
[PreservesLimitsOfShape WalkingCospan (forget C)] : Function.Injective f :=
(mono_iff_injective ((forget C).map f)).mp inferInstance
#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback
-/- warning: category_theory.concrete_category.mono_iff_injective_of_preserves_pullback -> CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Iff (CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f) (Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Iff (CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f) (Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullbackₓ'. -/
theorem ConcreteCategory.mono_iff_injective_of_preservesPullback {X Y : C} (f : X ⟶ Y)
[PreservesLimitsOfShape WalkingCospan (forget C)] : Mono f ↔ Function.Injective f :=
((forget C).mono_map_iff_mono _).symm.trans (mono_iff_injective _)
#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback
-/- warning: category_theory.concrete_category.epi_of_surjective -> CategoryTheory.ConcreteCategory.epi_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)) -> (CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.epi_of_surjective CategoryTheory.ConcreteCategory.epi_of_surjectiveₓ'. -/
/-- In any concrete category, surjective morphisms are epimorphisms. -/
theorem ConcreteCategory.epi_of_surjective {X Y : C} (f : X ⟶ Y) (s : Function.Surjective f) :
Epi f :=
(forget C).epi_of_epi_map ((epi_iff_surjective f).2 s)
#align category_theory.concrete_category.epi_of_surjective CategoryTheory.ConcreteCategory.epi_of_surjective
-/- warning: category_theory.concrete_category.surjective_of_epi_of_preserves_pushout -> CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushoutₓ'. -/
theorem ConcreteCategory.surjective_of_epi_of_preservesPushout {X Y : C} (f : X ⟶ Y) [Epi f]
[PreservesColimitsOfShape WalkingSpan (forget C)] : Function.Surjective f :=
(epi_iff_surjective ((forget C).map f)).mp inferInstance
#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout
-/- warning: category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout -> CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Iff (CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f) (Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Iff (CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f) (Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushoutₓ'. -/
theorem ConcreteCategory.epi_iff_surjective_of_preservesPushout {X Y : C} (f : X ⟶ Y)
[PreservesColimitsOfShape WalkingSpan (forget C)] : Epi f ↔ Function.Surjective f :=
((forget C).epi_map_iff_epi _).symm.trans (epi_iff_surjective _)
#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout
-/- warning: category_theory.concrete_category.bijective_of_is_iso -> CategoryTheory.ConcreteCategory.bijective_of_isIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.IsIso.{u2, u1} C _inst_1 X Y f], Function.Bijective.{succ u3, succ u3} (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) Y) (CategoryTheory.Functor.map.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X Y f)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.IsIso.{u1, u3} C _inst_1 X Y f], Function.Bijective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIsoₓ'. -/
theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
Function.Bijective ((forget C).map f) := by rw [← is_iso_iff_bijective]; infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
@@ -392,12 +286,6 @@ instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategor
forget_comp := rfl
#align category_theory.full_subcategory.has_forget₂ CategoryTheory.FullSubcategoryₓ.hasForget₂
-/- warning: category_theory.has_forget₂.mk' -> CategoryTheory.HasForget₂.mk' is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u1}} {D : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u4, u3, u1} C _inst_1] [_inst_3 : CategoryTheory.Category.{u5, u2} D] [_inst_4 : CategoryTheory.ConcreteCategory.{u4, u5, u2} D _inst_3] (obj : C -> D), (forall (X : C), Eq.{succ (succ u4)} Type.{u4} (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X)) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X)) -> (forall (map : forall {X : C} {Y : C}, (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y) -> (Quiver.Hom.{succ u5, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) (obj X) (obj Y))), (forall {X : C} {Y : C} {f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y}, HEq.{succ u4} (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X)) (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj Y))) (CategoryTheory.Functor.map.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X) (obj Y) (map X Y f)) (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X Y f)) -> (CategoryTheory.HasForget₂.{u1, u2, u4, u3, u5} C D _inst_1 _inst_2 _inst_3 _inst_4))
-but is expected to have type
- forall {C : Type.{u1}} {D : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u4, u3, u1} C _inst_1] [_inst_3 : CategoryTheory.Category.{u5, u2} D] [_inst_4 : CategoryTheory.ConcreteCategory.{u4, u5, u2} D _inst_3] (obj : C -> D), (forall (X : C), Eq.{succ (succ u4)} Type.{u4} (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X)) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X)) -> (forall (map : forall {X : C} {Y : C}, (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y) -> (Quiver.Hom.{succ u5, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) (obj X) (obj Y))), (forall {X : C} {Y : C} {f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y}, HEq.{succ u4} (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X)) (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj Y))) (Prefunctor.map.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X) (obj Y) (map X Y f)) (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) Y)) (Prefunctor.map.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.HasForget₂.{u1, u2, u4, u3, u5} C D _inst_1 _inst_2 _inst_3 _inst_4))
-Case conversion may be inaccurate. Consider using '#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'ₓ'. -/
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -304,10 +304,7 @@ but is expected to have type
forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.IsIso.{u1, u3} C _inst_1 X Y f], Function.Bijective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIsoₓ'. -/
theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
- Function.Bijective ((forget C).map f) :=
- by
- rw [← is_iso_iff_bijective]
- infer_instance
+ Function.Bijective ((forget C).map f) := by rw [← is_iso_iff_bijective]; infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
#print CategoryTheory.ConcreteCategory.hasCoeToFun_Type /-
@@ -351,9 +348,7 @@ instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCat
instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
(forget₂ C D).PreservesMonomorphisms :=
- have : (forget₂ C D ⋙ forget D).PreservesMonomorphisms :=
- by
- simp only [has_forget₂.forget_comp]
+ have : (forget₂ C D ⋙ forget D).PreservesMonomorphisms := by simp only [has_forget₂.forget_comp];
infer_instance
functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_monomorphisms CategoryTheory.forget₂_preservesMonomorphisms
@@ -363,9 +358,7 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
(forget₂ C D).PreservesEpimorphisms :=
- have : (forget₂ C D ⋙ forget D).PreservesEpimorphisms :=
- by
- simp only [has_forget₂.forget_comp]
+ have : (forget₂ C D ⋙ forget D).PreservesEpimorphisms := by simp only [has_forget₂.forget_comp];
infer_instance
functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -72,7 +72,7 @@ attribute [instance] concrete_category.forget_faithful
/-- The forgetful functor from a concrete category to `Type u`. -/
@[reducible]
def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
- ConcreteCategory.Forget C
+ ConcreteCategory.forget C
#align category_theory.forget CategoryTheory.forget
-/
@@ -92,7 +92,7 @@ instance : has_coe_to_sort X := concrete_category.has_coe_to_sort X
-/
def ConcreteCategory.hasCoeToSort (C : Type v) [Category C] [ConcreteCategory C] :
CoeSort C (Type u) :=
- ⟨(ConcreteCategory.Forget C).obj⟩
+ ⟨(ConcreteCategory.forget C).obj⟩
#align category_theory.concrete_category.has_coe_to_sort CategoryTheory.ConcreteCategory.hasCoeToSort
-/
@@ -102,22 +102,23 @@ attribute [local instance] concrete_category.has_coe_to_sort
variable {C : Type v} [Category C] [ConcreteCategory C]
-/- warning: category_theory.forget_obj_eq_coe -> CategoryTheory.forget_obj_eq_coe is a dubious translation:
+/- warning: category_theory.forget_obj_eq_coe clashes with [anonymous] -> [anonymous]
+warning: category_theory.forget_obj_eq_coe -> [anonymous] is a dubious translation:
lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C}, Eq.{succ (succ u3)} Type.{u3} (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)
+ forall {C : Type.{v}} [_inst_1 : CategoryTheory.Category.{u_1, v} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u_2, u_1, v} C _inst_1] {X : C}, Eq.{succ (succ u_2)} Type.{u_2} (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X) (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) X)
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C}, Eq.{succ (succ u2)} Type.{u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X)
-Case conversion may be inaccurate. Consider using '#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coeₓ'. -/
+ forall {C : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> C -> _inst_1) -> Nat -> (List.{u} C) -> (List.{v} _inst_1)
+Case conversion may be inaccurate. Consider using '#align category_theory.forget_obj_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem forget_obj_eq_coe {X : C} : (forget C).obj X = X :=
+theorem [anonymous] {X : C} : (forget C).obj X = X :=
rfl
-#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coe
+#align category_theory.forget_obj_eq_coe [anonymous]
/- warning: category_theory.concrete_category.has_coe_to_fun -> CategoryTheory.ConcreteCategory.hasCoeToFun is a dubious translation:
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y))
but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u2} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u1, u3, u2} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u3, succ u1} (Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) => (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.ConcreteCategory.Forget.{u1, u3, u2} C _inst_1 _inst_2)) X) -> (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.ConcreteCategory.Forget.{u1, u3, u2} C _inst_1 _inst_2)) Y))
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u2} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u1, u3, u2} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u3, succ u1} (Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) => (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.forget.{u2, u1, u3} C _inst_1 _inst_2)) X) -> (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.forget.{u2, u1, u3} C _inst_1 _inst_2)) Y))
Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.has_coe_to_fun CategoryTheory.ConcreteCategory.hasCoeToFunₓ'. -/
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
@@ -131,7 +132,7 @@ attribute [local instance] concrete_category.has_coe_to_fun
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g)
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g)
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g)
Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_extₓ'. -/
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g :=
@@ -141,22 +142,23 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
-/- warning: category_theory.forget_map_eq_coe -> CategoryTheory.forget_map_eq_coe is a dubious translation:
+/- warning: category_theory.forget_map_eq_coe clashes with [anonymous] -> [anonymous]
+warning: category_theory.forget_map_eq_coe -> [anonymous] is a dubious translation:
lean 3 declaration is
- forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), 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})) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X Y f) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
+ forall {C : Type.{v}} [_inst_1 : CategoryTheory.Category.{u_1, v} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u_2, u_1, v} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y), Eq.{succ u_2} (Quiver.Hom.{succ u_2, succ u_2} Type.{u_2} (CategoryTheory.CategoryStruct.toQuiver.{u_2, succ u_2} Type.{u_2} (CategoryTheory.Category.toCategoryStruct.{u_2, succ u_2} Type.{u_2} CategoryTheory.types.{u_2})) (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u_1, u_2, v, succ u_2} C _inst_1 Type.{u_2} CategoryTheory.types.{u_2} (CategoryTheory.forget.{v, u_2, u_1} C _inst_1 _inst_2) X Y f) (coeFn.{succ u_1, succ u_2} (Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u_1, v} C (CategoryTheory.CategoryStruct.toQuiver.{u_1, v} C (CategoryTheory.Category.toCategoryStruct.{u_1, v} C _inst_1)) X Y) => (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) X) -> (coeSort.{succ v, succ (succ u_2)} C Type.{u_2} (CategoryTheory.ConcreteCategory.hasCoeToSort.{v, u_2, u_1} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{v, u_1, u_2} C _inst_1 _inst_2 X Y) f)
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coeₓ'. -/
+ forall {C : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> C -> _inst_1) -> Nat -> (List.{u} C) -> (List.{v} _inst_1)
+Case conversion may be inaccurate. Consider using '#align category_theory.forget_map_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
+theorem [anonymous] {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
rfl
-#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
+#align category_theory.forget_map_eq_coe [anonymous]
/- warning: category_theory.congr_hom -> CategoryTheory.congr_hom is a dubious translation:
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
Case conversion may be inaccurate. Consider using '#align category_theory.congr_hom CategoryTheory.congr_homₓ'. -/
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
@@ -189,7 +191,7 @@ theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) =
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X X) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X) x) x
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X) x) x
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X) x) x
Case conversion may be inaccurate. Consider using '#align category_theory.id_apply CategoryTheory.id_applyₓ'. -/
@[simp]
theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
@@ -200,7 +202,7 @@ theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Z) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g) x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 Y Z) g (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x))
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z) (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g) x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x))
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z) (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g) x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x))
Case conversion may be inaccurate. Consider using '#align category_theory.comp_apply CategoryTheory.comp_applyₓ'. -/
@[simp]
theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
@@ -211,7 +213,7 @@ theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_homₓ'. -/
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
@@ -221,7 +223,7 @@ theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X)
lean 3 declaration is
forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) {x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X} {x' : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X}, (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) x x') -> (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x'))
but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) {x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X} {x' : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X}, (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X) x x') -> (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x'))
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) {x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X} {x' : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X}, (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) x x') -> (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x'))
Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_argₓ'. -/
theorem ConcreteCategory.congr_arg {X Y : C} (f : X ⟶ Y) {x x' : X} (h : x = x') : f x = f x' :=
congr_arg (f : X → Y) h
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -51,7 +51,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
#print CategoryTheory.ConcreteCategory /-
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
Note that `concrete_category` potentially depends on three independent universe levels,
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
! This file was ported from Lean 3 source module category_theory.concrete_category.basic
-! leanprover-community/mathlib commit 05b820ec79b3c98a7dbf1cb32e181584166da2ca
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Limits.Constructions.EpiMono
/-!
# Concrete categories
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
A concrete category is a category `C` with a fixed faithful functor
`forget : C ⥤ Type*`. We define concrete categories using `class
concrete_category`. In particular, we impose no restrictions on the
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -47,6 +47,7 @@ namespace CategoryTheory
open CategoryTheory.Limits
+#print CategoryTheory.ConcreteCategory /-
/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`forget] [] -/
/-- A concrete category is a category `C` with a fixed faithful functor `forget : C ⥤ Type`.
@@ -60,18 +61,24 @@ class ConcreteCategory (C : Type u) [Category.{v} C] where
forget : C ⥤ Type w
[forget_faithful : Faithful forget]
#align category_theory.concrete_category CategoryTheory.ConcreteCategory
+-/
attribute [instance] concrete_category.forget_faithful
+#print CategoryTheory.forget /-
/-- The forgetful functor from a concrete category to `Type u`. -/
@[reducible]
def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
- ConcreteCategory.forget C
+ ConcreteCategory.Forget C
#align category_theory.forget CategoryTheory.forget
+-/
+#print CategoryTheory.ConcreteCategory.types /-
instance ConcreteCategory.types : ConcreteCategory (Type u) where forget := 𝟭 _
#align category_theory.concrete_category.types CategoryTheory.ConcreteCategory.types
+-/
+#print CategoryTheory.ConcreteCategory.hasCoeToSort /-
/-- Provide a coercion to `Type u` for a concrete category. This is not marked as an instance
as it could potentially apply to every type, and so is too expensive in typeclass search.
@@ -82,8 +89,9 @@ instance : has_coe_to_sort X := concrete_category.has_coe_to_sort X
-/
def ConcreteCategory.hasCoeToSort (C : Type v) [Category C] [ConcreteCategory C] :
CoeSort C (Type u) :=
- ⟨(ConcreteCategory.forget C).obj⟩
+ ⟨(ConcreteCategory.Forget C).obj⟩
#align category_theory.concrete_category.has_coe_to_sort CategoryTheory.ConcreteCategory.hasCoeToSort
+-/
section
@@ -91,11 +99,23 @@ attribute [local instance] concrete_category.has_coe_to_sort
variable {C : Type v} [Category C] [ConcreteCategory C]
+/- warning: category_theory.forget_obj_eq_coe -> CategoryTheory.forget_obj_eq_coe is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C}, Eq.{succ (succ u3)} Type.{u3} (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C}, Eq.{succ (succ u2)} Type.{u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X)
+Case conversion may be inaccurate. Consider using '#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coeₓ'. -/
@[simp]
theorem forget_obj_eq_coe {X : C} : (forget C).obj X = X :=
rfl
#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coe
+/- warning: category_theory.concrete_category.has_coe_to_fun -> CategoryTheory.ConcreteCategory.hasCoeToFun is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y))
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u2} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u1, u3, u2} C _inst_1] {X : C} {Y : C}, CoeFun.{succ u3, succ u1} (Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u3, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _inst_1)) X Y) => (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.ConcreteCategory.Forget.{u1, u3, u2} C _inst_1 _inst_2)) X) -> (Prefunctor.obj.{succ u3, succ u1, u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u2} C (CategoryTheory.Category.toCategoryStruct.{u3, u2} C _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.{u3, u1, u2, succ u1} C _inst_1 Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.ConcreteCategory.Forget.{u1, u3, u2} C _inst_1 _inst_2)) Y))
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.has_coe_to_fun CategoryTheory.ConcreteCategory.hasCoeToFunₓ'. -/
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun f => X → Y :=
@@ -104,6 +124,12 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun f => X → Y :
attribute [local instance] concrete_category.has_coe_to_fun
+/- warning: category_theory.concrete_category.hom_ext -> CategoryTheory.ConcreteCategory.hom_ext is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_extₓ'. -/
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g :=
by
@@ -112,11 +138,23 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
+/- warning: category_theory.forget_map_eq_coe -> CategoryTheory.forget_map_eq_coe is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), 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})) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X Y f) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coeₓ'. -/
@[simp]
theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f :=
rfl
#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
+/- warning: category_theory.congr_hom -> CategoryTheory.congr_hom is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
+Case conversion may be inaccurate. Consider using '#align category_theory.congr_hom CategoryTheory.congr_homₓ'. -/
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
-/
@@ -124,64 +162,142 @@ theorem congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun k : X ⟶ Y => (k : X → Y)) h) x
#align category_theory.congr_hom CategoryTheory.congr_hom
+/- warning: category_theory.coe_id -> CategoryTheory.coe_id is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C}, Eq.{succ u3} ((fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X)) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X X) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X)) (id.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C}, 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X)) (id.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X))
+Case conversion may be inaccurate. Consider using '#align category_theory.coe_id CategoryTheory.coe_idₓ'. -/
theorem coe_id {X : C} : (𝟙 X : X → X) = id :=
(forget _).map_id X
#align category_theory.coe_id CategoryTheory.coe_id
+/- warning: category_theory.coe_comp -> CategoryTheory.coe_comp is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z), Eq.{succ u3} ((fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g)) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Z) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g)) (Function.comp.{succ u3, succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 Y Z) g) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z), 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})) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z)) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g)) (Function.comp.{succ u2, succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
+Case conversion may be inaccurate. Consider using '#align category_theory.coe_comp CategoryTheory.coe_compₓ'. -/
theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) = g ∘ f :=
(forget _).map_comp f g
#align category_theory.coe_comp CategoryTheory.coe_comp
+/- warning: category_theory.id_apply -> CategoryTheory.id_apply is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X X) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X X) (CategoryTheory.CategoryStruct.id.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X) x) x
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X X (CategoryTheory.CategoryStruct.id.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X) x) x
+Case conversion may be inaccurate. Consider using '#align category_theory.id_apply CategoryTheory.id_applyₓ'. -/
@[simp]
theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
congr_fun ((forget _).map_id X) x
#align category_theory.id_apply CategoryTheory.id_apply
+/- warning: category_theory.comp_apply -> CategoryTheory.comp_apply is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Z) (CategoryTheory.CategoryStruct.comp.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1) X Y Z f g) x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) Y Z) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Z)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 Y Z) g (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) Y Z) (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Z) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Z (CategoryTheory.CategoryStruct.comp.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1) X Y Z f g) x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y Z g (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x))
+Case conversion may be inaccurate. Consider using '#align category_theory.comp_apply CategoryTheory.comp_applyₓ'. -/
@[simp]
theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
congr_fun ((forget _).map_comp _ _) x
#align category_theory.comp_apply CategoryTheory.comp_apply
+/- warning: category_theory.concrete_category.congr_hom -> CategoryTheory.ConcreteCategory.congr_hom is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y} {g : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y}, (Eq.{succ u2} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) f g) -> (forall (x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X), Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) g x))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} {f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y} {g : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y}, (Eq.{succ u1} (Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) f g) -> (forall (x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X), Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y g x))
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_homₓ'. -/
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_hom
+/- warning: category_theory.concrete_category.congr_arg -> CategoryTheory.ConcreteCategory.congr_arg is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) {x : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X} {x' : coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X}, (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) x x') -> (Eq.{succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f x'))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) {x : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X} {x' : Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X}, (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.ConcreteCategory.Forget.{u2, u1, u3} C _inst_1 _inst_2)) X) x x') -> (Eq.{succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f x'))
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_argₓ'. -/
theorem ConcreteCategory.congr_arg {X Y : C} (f : X ⟶ Y) {x x' : X} (h : x = x') : f x = f x' :=
congr_arg (f : X → Y) h
#align category_theory.concrete_category.congr_arg CategoryTheory.ConcreteCategory.congr_arg
+/- warning: category_theory.concrete_category.mono_of_injective -> CategoryTheory.ConcreteCategory.mono_of_injective is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)) -> (CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.mono_of_injective CategoryTheory.ConcreteCategory.mono_of_injectiveₓ'. -/
/-- In any concrete category, injective morphisms are monomorphisms. -/
theorem ConcreteCategory.mono_of_injective {X Y : C} (f : X ⟶ Y) (i : Function.Injective f) :
Mono f :=
(forget C).mono_of_mono_map ((mono_iff_injective f).2 i)
#align category_theory.concrete_category.mono_of_injective CategoryTheory.ConcreteCategory.mono_of_injective
-theorem ConcreteCategory.injective_of_mono_of_preserves_pullback {X Y : C} (f : X ⟶ Y) [Mono f]
+/- warning: category_theory.concrete_category.injective_of_mono_of_preserves_pullback -> CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullbackₓ'. -/
+theorem ConcreteCategory.injective_of_mono_of_preservesPullback {X Y : C} (f : X ⟶ Y) [Mono f]
[PreservesLimitsOfShape WalkingCospan (forget C)] : Function.Injective f :=
(mono_iff_injective ((forget C).map f)).mp inferInstance
-#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preserves_pullback
-
-theorem ConcreteCategory.mono_iff_injective_of_preserves_pullback {X Y : C} (f : X ⟶ Y)
+#align category_theory.concrete_category.injective_of_mono_of_preserves_pullback CategoryTheory.ConcreteCategory.injective_of_mono_of_preservesPullback
+
+/- warning: category_theory.concrete_category.mono_iff_injective_of_preserves_pullback -> CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Iff (CategoryTheory.Mono.{u2, u1} C _inst_1 X Y f) (Function.Injective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesLimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingCospan (CategoryTheory.Limits.WidePullbackShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Iff (CategoryTheory.Mono.{u1, u3} C _inst_1 X Y f) (Function.Injective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullbackₓ'. -/
+theorem ConcreteCategory.mono_iff_injective_of_preservesPullback {X Y : C} (f : X ⟶ Y)
[PreservesLimitsOfShape WalkingCospan (forget C)] : Mono f ↔ Function.Injective f :=
((forget C).mono_map_iff_mono _).symm.trans (mono_iff_injective _)
-#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preserves_pullback
-
+#align category_theory.concrete_category.mono_iff_injective_of_preserves_pullback CategoryTheory.ConcreteCategory.mono_iff_injective_of_preservesPullback
+
+/- warning: category_theory.concrete_category.epi_of_surjective -> CategoryTheory.ConcreteCategory.epi_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y), (Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)) -> (CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y), (Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.epi_of_surjective CategoryTheory.ConcreteCategory.epi_of_surjectiveₓ'. -/
/-- In any concrete category, surjective morphisms are epimorphisms. -/
theorem ConcreteCategory.epi_of_surjective {X Y : C} (f : X ⟶ Y) (s : Function.Surjective f) :
Epi f :=
(forget C).epi_of_epi_map ((epi_iff_surjective f).2 s)
#align category_theory.concrete_category.epi_of_surjective CategoryTheory.ConcreteCategory.epi_of_surjective
-theorem ConcreteCategory.surjective_of_epi_of_preserves_pushout {X Y : C} (f : X ⟶ Y) [Epi f]
+/- warning: category_theory.concrete_category.surjective_of_epi_of_preserves_pushout -> CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f] [_inst_4 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushoutₓ'. -/
+theorem ConcreteCategory.surjective_of_epi_of_preservesPushout {X Y : C} (f : X ⟶ Y) [Epi f]
[PreservesColimitsOfShape WalkingSpan (forget C)] : Function.Surjective f :=
(epi_iff_surjective ((forget C).map f)).mp inferInstance
-#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preserves_pushout
-
-theorem ConcreteCategory.epi_iff_surjective_of_preserves_pushout {X Y : C} (f : X ⟶ Y)
+#align category_theory.concrete_category.surjective_of_epi_of_preserves_pushout CategoryTheory.ConcreteCategory.surjective_of_epi_of_preservesPushout
+
+/- warning: category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout -> CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2)], Iff (CategoryTheory.Epi.{u2, u1} C _inst_1 X Y f) (Function.Surjective.{succ u3, succ u3} (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y) (coeFn.{succ u2, succ u3} (Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) (fun (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) => (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) X) -> (coeSort.{succ u1, succ (succ u3)} C Type.{u3} (CategoryTheory.ConcreteCategory.hasCoeToSort.{u1, u3, u2} C _inst_1 _inst_2) Y)) (CategoryTheory.ConcreteCategory.hasCoeToFun.{u1, u2, u3} C _inst_1 _inst_2 X Y) f))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.Limits.PreservesColimitsOfShape.{0, 0, u1, u2, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} CategoryTheory.Limits.WalkingSpan (CategoryTheory.Limits.WidePushoutShape.category.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)], Iff (CategoryTheory.Epi.{u1, u3} C _inst_1 X Y f) (Function.Surjective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f))
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushoutₓ'. -/
+theorem ConcreteCategory.epi_iff_surjective_of_preservesPushout {X Y : C} (f : X ⟶ Y)
[PreservesColimitsOfShape WalkingSpan (forget C)] : Epi f ↔ Function.Surjective f :=
((forget C).epi_map_iff_epi _).symm.trans (epi_iff_surjective _)
-#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preserves_pushout
-
+#align category_theory.concrete_category.epi_iff_surjective_of_preserves_pushout CategoryTheory.ConcreteCategory.epi_iff_surjective_of_preservesPushout
+
+/- warning: category_theory.concrete_category.bijective_of_is_iso -> CategoryTheory.ConcreteCategory.bijective_of_isIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u2, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u3, u2, u1} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u2, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} C (CategoryTheory.Category.toCategoryStruct.{u2, u1} C _inst_1)) X Y) [_inst_3 : CategoryTheory.IsIso.{u2, u1} C _inst_1 X Y f], Function.Bijective.{succ u3, succ u3} (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) Y) (CategoryTheory.Functor.map.{u2, u3, u1, succ u3} C _inst_1 Type.{u3} CategoryTheory.types.{u3} (CategoryTheory.forget.{u1, u3, u2} C _inst_1 _inst_2) X Y f)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u2, u1, u3} C _inst_1] {X : C} {Y : C} (f : Quiver.Hom.{succ u1, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _inst_1)) X Y) [_inst_3 : CategoryTheory.IsIso.{u1, u3} C _inst_1 X Y f], Function.Bijective.{succ u2, succ u2} (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) Y) (Prefunctor.map.{succ u1, succ u2, u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} C (CategoryTheory.Category.toCategoryStruct.{u1, u3} C _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, u3, succ u2} C _inst_1 Type.{u2} CategoryTheory.types.{u2} (CategoryTheory.forget.{u3, u2, u1} C _inst_1 _inst_2)) X Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIsoₓ'. -/
theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
Function.Bijective ((forget C).map f) :=
by
@@ -189,13 +305,16 @@ theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
+#print CategoryTheory.ConcreteCategory.hasCoeToFun_Type /-
@[simp]
theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : coeFn f = f :=
rfl
#align category_theory.concrete_category.has_coe_to_fun_Type CategoryTheory.ConcreteCategory.hasCoeToFun_Type
+-/
end
+#print CategoryTheory.HasForget₂ /-
/-- `has_forget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
@@ -204,7 +323,9 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
forget₂ : C ⥤ D
forget_comp : forget₂ ⋙ forget D = forget C := by obviously
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
+-/
+#print CategoryTheory.forget₂ /-
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`has_forget₂ C `. -/
@[reducible]
@@ -212,12 +333,16 @@ def forget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Cate
[ConcreteCategory D] [HasForget₂ C D] : C ⥤ D :=
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
+-/
+#print CategoryTheory.forget₂_faithful /-
instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
[ConcreteCategory D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
+-/
+#print CategoryTheory.forget₂_preservesMonomorphisms /-
instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
(forget₂ C D).PreservesMonomorphisms :=
@@ -227,7 +352,9 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
infer_instance
functor.preserves_monomorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_monomorphisms CategoryTheory.forget₂_preservesMonomorphisms
+-/
+#print CategoryTheory.forget₂_preservesEpimorphisms /-
instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
[Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
(forget₂ C D).PreservesEpimorphisms :=
@@ -237,18 +364,23 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
infer_instance
functor.preserves_epimorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
+-/
+#print CategoryTheory.InducedCategory.concreteCategory /-
instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
[ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f)
where forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
+-/
+#print CategoryTheory.InducedCategory.hasForget₂ /-
instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
(f : C → D) : HasForget₂ (InducedCategory D f) D
where
forget₂ := inducedFunctor f
forget_comp := rfl
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
+-/
instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z)
@@ -262,6 +394,12 @@ instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategor
forget_comp := rfl
#align category_theory.full_subcategory.has_forget₂ CategoryTheory.FullSubcategoryₓ.hasForget₂
+/- warning: category_theory.has_forget₂.mk' -> CategoryTheory.HasForget₂.mk' is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u1}} {D : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u4, u3, u1} C _inst_1] [_inst_3 : CategoryTheory.Category.{u5, u2} D] [_inst_4 : CategoryTheory.ConcreteCategory.{u4, u5, u2} D _inst_3] (obj : C -> D), (forall (X : C), Eq.{succ (succ u4)} Type.{u4} (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X)) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X)) -> (forall (map : forall {X : C} {Y : C}, (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y) -> (Quiver.Hom.{succ u5, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) (obj X) (obj Y))), (forall {X : C} {Y : C} {f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y}, HEq.{succ u4} (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X)) (CategoryTheory.Functor.obj.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj Y))) (CategoryTheory.Functor.map.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4) (obj X) (obj Y) (map X Y f)) (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X) (CategoryTheory.Functor.obj.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) Y)) (CategoryTheory.Functor.map.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2) X Y f)) -> (CategoryTheory.HasForget₂.{u1, u2, u4, u3, u5} C D _inst_1 _inst_2 _inst_3 _inst_4))
+but is expected to have type
+ forall {C : Type.{u1}} {D : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] [_inst_2 : CategoryTheory.ConcreteCategory.{u4, u3, u1} C _inst_1] [_inst_3 : CategoryTheory.Category.{u5, u2} D] [_inst_4 : CategoryTheory.ConcreteCategory.{u4, u5, u2} D _inst_3] (obj : C -> D), (forall (X : C), Eq.{succ (succ u4)} Type.{u4} (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X)) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X)) -> (forall (map : forall {X : C} {Y : C}, (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y) -> (Quiver.Hom.{succ u5, u2} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) (obj X) (obj Y))), (forall {X : C} {Y : C} {f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X Y}, HEq.{succ u4} (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X)) (Prefunctor.obj.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj Y))) (Prefunctor.map.{succ u5, succ u4, u2, succ u4} D (CategoryTheory.CategoryStruct.toQuiver.{u5, u2} D (CategoryTheory.Category.toCategoryStruct.{u5, u2} D _inst_3)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u5, u4, u2, succ u4} D _inst_3 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u2, u4, u5} D _inst_3 _inst_4)) (obj X) (obj Y) (map X Y f)) (Quiver.Hom.{succ u4, succ u4} Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X) (Prefunctor.obj.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) Y)) (Prefunctor.map.{succ u3, succ u4, u1, succ u4} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) Type.{u4} (CategoryTheory.CategoryStruct.toQuiver.{u4, succ u4} Type.{u4} (CategoryTheory.Category.toCategoryStruct.{u4, succ u4} Type.{u4} CategoryTheory.types.{u4})) (CategoryTheory.Functor.toPrefunctor.{u3, u4, u1, succ u4} C _inst_1 Type.{u4} CategoryTheory.types.{u4} (CategoryTheory.forget.{u1, u4, u3} C _inst_1 _inst_2)) X Y f)) -> (CategoryTheory.HasForget₂.{u1, u2, u4, u3, u5} C D _inst_1 _inst_2 _inst_3 _inst_4))
+Case conversion may be inaccurate. Consider using '#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'ₓ'. -/
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
@@ -274,6 +412,7 @@ def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C
forget_comp := by apply faithful.div_comp
#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'
+#print CategoryTheory.hasForgetToType /-
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget₂ C (Type u)
@@ -281,6 +420,7 @@ def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget
forget₂ := forget C
forget_comp := Functor.comp_id _
#align category_theory.has_forget_to_Type CategoryTheory.hasForgetToType
+-/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -56,7 +56,7 @@ class ConcreteCategory (C : Type u) [Category.{v} C] where
/-- We have a functor to Type -/
protected forget : C ⥤ Type w
/-- That functor is faithful -/
- [forget_faithful : Faithful forget]
+ [forget_faithful : forget.Faithful]
#align category_theory.concrete_category CategoryTheory.ConcreteCategory
#align category_theory.concrete_category.forget CategoryTheory.ConcreteCategory.forget
@@ -106,7 +106,7 @@ attribute [local instance] ConcreteCategory.instFunLike
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations. -/
@[ext low] -- Porting note: lowered priority
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
- apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
+ apply (forget C).map_injective
dsimp [forget]
funext x
exact w x
@@ -189,7 +189,7 @@ theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
/-- If the forgetful functor of a concrete category reflects isomorphisms, being an isomorphism
is equivalent to being bijective. -/
-theorem ConcreteCategory.isIso_iff_bijective [ReflectsIsomorphisms (forget C)]
+theorem ConcreteCategory.isIso_iff_bijective [(forget C).ReflectsIsomorphisms]
{X Y : C} (f : X ⟶ Y) : IsIso f ↔ Function.Bijective ((forget C).map f) := by
rw [← CategoryTheory.isIso_iff_bijective]
exact ⟨fun _ ↦ inferInstance, fun _ ↦ isIso_of_reflects_iso f (forget C)⟩
@@ -229,7 +229,7 @@ lemma forget₂_comp_apply {C : Type u} {D : Type u'} [Category.{v} C] [Concrete
rw [Functor.map_comp, comp_apply]
instance forget₂_faithful (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
- [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : (forget₂ C D).Faithful :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
@@ -285,8 +285,8 @@ def HasForget₂.mk' {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCatego
(map : ∀ {X Y}, (X ⟶ Y) → (obj X ⟶ obj Y))
(h_map : ∀ {X Y} {f : X ⟶ Y}, HEq ((forget D).map (map f)) ((forget C).map f)) : HasForget₂ C D
where
- forget₂ := Faithful.div _ _ _ @h_obj _ @h_map
- forget_comp := by apply Faithful.div_comp
+ forget₂ := Functor.Faithful.div _ _ _ @h_obj _ @h_map
+ forget_comp := by apply Functor.Faithful.div_comp
#align category_theory.has_forget₂.mk' CategoryTheory.HasForget₂.mk'
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -103,7 +103,7 @@ def ConcreteCategory.instFunLike {X Y : C} : FunLike (X ⟶ Y) X Y where
coe_injective' _ _ h := (forget C).map_injective h
attribute [local instance] ConcreteCategory.instFunLike
-/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
+/-- In any concrete category, we can test equality of morphisms by pointwise evaluations. -/
@[ext low] -- Porting note: lowered priority
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
G
-sets (#10228)
A finite G
-set is connected if and only if the G
-action is transitive.
@@ -187,6 +187,13 @@ theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
infer_instance
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
+/-- If the forgetful functor of a concrete category reflects isomorphisms, being an isomorphism
+is equivalent to being bijective. -/
+theorem ConcreteCategory.isIso_iff_bijective [ReflectsIsomorphisms (forget C)]
+ {X Y : C} (f : X ⟶ Y) : IsIso f ↔ Function.Bijective ((forget C).map f) := by
+ rw [← CategoryTheory.isIso_iff_bijective]
+ exact ⟨fun _ ↦ inferInstance, fun _ ↦ isIso_of_reflects_iso f (forget C)⟩
+
@[simp]
theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : CoeFun.coe f = f := rfl
#align category_theory.concrete_category.has_coe_to_fun_Type CategoryTheory.ConcreteCategory.hasCoeToFun_Type
FunLike
(#9833)
This follows up from #9785, which renamed FunLike
to DFunLike
, by introducing a new abbreviation FunLike F α β := DFunLike F α (fun _ => β)
, to make the non-dependent use of FunLike
easier.
I searched for the pattern DFunLike.*fun
and DFunLike.*λ
in all files to replace expressions of the form DFunLike F α (fun _ => β)
with FunLike F α β
. I did this everywhere except for extends
clauses for two reasons: it would conflict with #8386, and more importantly extends
must directly refer to a structure with no unfolding of def
s or abbrev
s.
@@ -98,10 +98,10 @@ variable {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
#noalign category_theory.forget_obj_eq_coe
@[reducible]
-def ConcreteCategory.instDFunLike {X Y : C} : DFunLike (X ⟶ Y) X (fun _ => Y) where
+def ConcreteCategory.instFunLike {X Y : C} : FunLike (X ⟶ Y) X Y where
coe f := (forget C).map f
coe_injective' _ _ h := (forget C).map_injective h
-attribute [local instance] ConcreteCategory.instDFunLike
+attribute [local instance] ConcreteCategory.instFunLike
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
@[ext low] -- Porting note: lowered priority
@@ -212,7 +212,7 @@ def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w}
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
-attribute [local instance] ConcreteCategory.instDFunLike ConcreteCategory.hasCoeToSort
+attribute [local instance] ConcreteCategory.instFunLike ConcreteCategory.hasCoeToSort
lemma forget₂_comp_apply {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCategory.{w} C]
[Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] {X Y Z : C}
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -98,10 +98,10 @@ variable {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
#noalign category_theory.forget_obj_eq_coe
@[reducible]
-def ConcreteCategory.funLike {X Y : C} : FunLike (X ⟶ Y) X (fun _ => Y) where
+def ConcreteCategory.instDFunLike {X Y : C} : DFunLike (X ⟶ Y) X (fun _ => Y) where
coe f := (forget C).map f
coe_injective' _ _ h := (forget C).map_injective h
-attribute [local instance] ConcreteCategory.funLike
+attribute [local instance] ConcreteCategory.instDFunLike
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
@[ext low] -- Porting note: lowered priority
@@ -212,7 +212,7 @@ def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w}
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
-attribute [local instance] ConcreteCategory.funLike ConcreteCategory.hasCoeToSort
+attribute [local instance] ConcreteCategory.instDFunLike ConcreteCategory.hasCoeToSort
lemma forget₂_comp_apply {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCategory.{w} C]
[Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] {X Y Z : C}
This PR adds a variant of a lemma introduced in #8512: ShortComplex.SnakeInput.δ_apply'
computes the connecting homomorphism of the snake lemma in a concrete categoriy C
with a phrasing based on the functor forget₂ C Ab
rather than forget C
. From this, the lemma ShortComplex.ShortExact.δ_apply
is obtained in a new file Algebra.Homology.ConcreteCategory
: it gives a computation in terms of (co)cycles of the connecting homomorphism in homology attached to a short exact sequence of homological complexes in C
.
This PR also adds a lemma which computes "up to refinements" the connecting homomorphism of the homology sequence in general abelian categories.
@@ -212,6 +212,15 @@ def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w}
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
+attribute [local instance] ConcreteCategory.funLike ConcreteCategory.hasCoeToSort
+
+lemma forget₂_comp_apply {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] {X Y Z : C}
+ (f : X ⟶ Y) (g : Y ⟶ Z) (x : (forget₂ C D).obj X) :
+ ((forget₂ C D).map (f ≫ g) x) =
+ (forget₂ C D).map g ((forget₂ C D).map f x) := by
+ rw [Functor.map_comp, comp_apply]
+
instance forget₂_faithful (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
[Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
This will improve spaces in the mathlib4 docs.
@@ -205,7 +205,7 @@ class HasForget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
-`HasForget₂ C `. -/
+`HasForget₂ C`. -/
@[reducible]
def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
[Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : C ⥤ D :=
@@ -139,7 +139,7 @@ theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) =
#align category_theory.comp_apply CategoryTheory.comp_apply
theorem comp_apply' {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) :
- (forget C).map (f ≫ g) x = (forget C).map g ((forget C).map f x) := comp_apply f g x
+ (forget C).map (f ≫ g) x = (forget C).map g ((forget C).map f x) := comp_apply f g x
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -13,13 +13,13 @@ import Mathlib.CategoryTheory.Limits.Constructions.EpiMono
# Concrete categories
A concrete category is a category `C` with a fixed faithful functor
-`forget : C ⥤ Type _`. We define concrete categories using `class ConcreteCategory`.
+`forget : C ⥤ Type*`. We define concrete categories using `class ConcreteCategory`.
In particular, we impose no restrictions on the
carrier type `C`, so `Type` is a concrete category with the identity
forgetful functor.
Each concrete category `C` comes with a canonical faithful functor
-`forget C : C ⥤ Type _`. We say that a concrete category `C` admits a
+`forget C : C ⥤ Type*`. We say that a concrete category `C` admits a
*forgetful functor* to a concrete category `D`, if it has a functor
`forget₂ C D : C ⥤ D` such that `(forget₂ C D) ⋙ (forget D) = forget C`,
see `class HasForget₂`. Due to `Faithful.div_comp`, it suffices
@@ -2,16 +2,13 @@
Copyright (c) 2018 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
-
-! This file was ported from Lean 3 source module category_theory.concrete_category.basic
-! leanprover-community/mathlib commit 311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Types
import Mathlib.CategoryTheory.Functor.EpiMono
import Mathlib.CategoryTheory.Limits.Constructions.EpiMono
+#align_import category_theory.concrete_category.basic from "leanprover-community/mathlib"@"311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872"
+
/-!
# Concrete categories
@@ -191,7 +191,7 @@ theorem ConcreteCategory.bijective_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] :
#align category_theory.concrete_category.bijective_of_is_iso CategoryTheory.ConcreteCategory.bijective_of_isIso
@[simp]
-theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : CoeFun.coe f = f := rfl
+theorem ConcreteCategory.hasCoeToFun_Type {X Y : Type u} (f : X ⟶ Y) : CoeFun.coe f = f := rfl
#align category_theory.concrete_category.has_coe_to_fun_Type CategoryTheory.ConcreteCategory.hasCoeToFun_Type
end
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Johannes Hölzl, Reid Barton, Sean Leather, Yury Kudryashov
! This file was ported from Lean 3 source module category_theory.concrete_category.basic
-! leanprover-community/mathlib commit 05b820ec79b3c98a7dbf1cb32e181584166da2ca
+! leanprover-community/mathlib commit 311ef8c4b4ae2804ea76b8a611bc5ea1d9c16872
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -41,7 +41,7 @@ related work.
-/
-universe w w' v v' u
+universe w w' v v' u u'
namespace CategoryTheory
@@ -68,13 +68,13 @@ attribute [instance] ConcreteCategory.forget_faithful
/-- The forgetful functor from a concrete category to `Type u`. -/
@[reducible]
-def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
+def forget (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] : C ⥤ Type w :=
ConcreteCategory.forget
#align category_theory.forget CategoryTheory.forget
-- this is reducible because we want `forget (Type u)` to unfold to `𝟭 _`
@[reducible]
-instance ConcreteCategory.types : ConcreteCategory (Type u) where
+instance ConcreteCategory.types : ConcreteCategory.{u, u, u+1} (Type u) where
forget := 𝟭 _
#align category_theory.concrete_category.types CategoryTheory.ConcreteCategory.types
@@ -86,8 +86,8 @@ You can use it on particular examples as:
instance : HasCoeToSort X := ConcreteCategory.hasCoeToSort X
```
-/
-def ConcreteCategory.hasCoeToSort (C : Type v) [Category C] [ConcreteCategory C] :
- CoeSort C (Type u) where
+def ConcreteCategory.hasCoeToSort (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] :
+ CoeSort C (Type w) where
coe := fun X => (forget C).obj X
#align category_theory.concrete_category.has_coe_to_sort CategoryTheory.ConcreteCategory.hasCoeToSort
@@ -95,7 +95,7 @@ section
attribute [local instance] ConcreteCategory.hasCoeToSort
-variable {C : Type v} [Category C] [ConcreteCategory.{w} C]
+variable {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
-- Porting note: forget_obj_eq_coe has become a syntactic tautology.
#noalign category_theory.forget_obj_eq_coe
@@ -107,7 +107,7 @@ def ConcreteCategory.funLike {X Y : C} : FunLike (X ⟶ Y) X (fun _ => Y) where
attribute [local instance] ConcreteCategory.funLike
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
-@[ext 900] -- Porting note: lowered priority
+@[ext low] -- Porting note: lowered priority
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
dsimp [forget]
I wrote a script to find lines that contain an odd number of backticks
@@ -16,8 +16,8 @@ import Mathlib.CategoryTheory.Limits.Constructions.EpiMono
# Concrete categories
A concrete category is a category `C` with a fixed faithful functor
-`forget : C ⥤ Type _`. We define concrete categories using `class
-concrete_category`. In particular, we impose no restrictions on the
+`forget : C ⥤ Type _`. We define concrete categories using `class ConcreteCategory`.
+In particular, we impose no restrictions on the
carrier type `C`, so `Type` is a concrete category with the identity
forgetful functor.
@@ -100,14 +100,11 @@ variable {C : Type v} [Category C] [ConcreteCategory.{w} C]
-- Porting note: forget_obj_eq_coe has become a syntactic tautology.
#noalign category_theory.forget_obj_eq_coe
-/-- Usually a bundled hom structure already has a coercion to function
-that works with different universes. So we don't use this as a global instance. -/
@[reducible]
-def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun _ => X → Y :=
- ⟨fun f => (forget _).map f⟩
-#align category_theory.concrete_category.has_coe_to_fun CategoryTheory.ConcreteCategory.hasCoeToFun
-
-attribute [local instance] ConcreteCategory.hasCoeToFun
+def ConcreteCategory.funLike {X Y : C} : FunLike (X ⟶ Y) X (fun _ => Y) where
+ coe f := (forget C).map f
+ coe_injective' _ _ h := (forget C).map_injective h
+attribute [local instance] ConcreteCategory.funLike
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
@[ext 900] -- Porting note: lowered priority
@@ -118,8 +115,8 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
--- Porting note: `forget_map_eq_coe` becomes a syntactic tautology.
-#noalign category_theory.forget_map_eq_coe
+theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f := rfl
+#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
@@ -136,16 +133,17 @@ theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) =
(forget _).map_comp f g
#align category_theory.coe_comp CategoryTheory.coe_comp
--- Porting note: removed @[simp] since simp can prove this
-theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
+@[simp] theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
congr_fun ((forget _).map_id X) x
#align category_theory.id_apply CategoryTheory.id_apply
--- Porting note: removed @[simp] since simp can prove this
-theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
+@[simp] theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
congr_fun ((forget _).map_comp _ _) x
#align category_theory.comp_apply CategoryTheory.comp_apply
+theorem comp_apply' {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) :
+ (forget C).map (f ≫ g) x = (forget C).map g ((forget C).map f x) := comp_apply f g x
+
theorem ConcreteCategory.congr_hom {X Y : C} {f g : X ⟶ Y} (h : f = g) (x : X) : f x = g x :=
congr_fun (congr_arg (fun f : X ⟶ Y => (f : X → Y)) h) x
#align category_theory.concrete_category.congr_hom CategoryTheory.ConcreteCategory.congr_hom
@@ -41,7 +41,7 @@ related work.
-/
-universe w v v' u
+universe w w' v v' u
namespace CategoryTheory
@@ -201,8 +201,8 @@ end
/-- `HasForget₂ C D`, where `C` and `D` are both concrete categories, provides a functor
`forget₂ C D : C ⥤ D` and a proof that `forget₂ ⋙ (forget D) = forget C`.
-/
-class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u} C] [Category D]
- [ConcreteCategory.{u} D] where
+class HasForget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] where
/-- A functor from `C` to `D` -/
forget₂ : C ⥤ D
/-- It covers the `ConcreteCategory.forget` for `C` and `D` -/
@@ -212,18 +212,19 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
/-- The forgetful functor `C ⥤ D` between concrete categories for which we have an instance
`HasForget₂ C `. -/
@[reducible]
-def forget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] [HasForget₂ C D] : C ⥤ D :=
+def forget₂ (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : C ⥤ D :=
HasForget₂.forget₂
#align category_theory.forget₂ CategoryTheory.forget₂
-instance forget₂_faithful (C : Type v) (D : Type v') [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
+instance forget₂_faithful (C : Type u) (D : Type u') [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D] [HasForget₂ C D] : Faithful (forget₂ C D) :=
HasForget₂.forget_comp.faithful_of_comp
#align category_theory.forget₂_faithful CategoryTheory.forget₂_faithful
-instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
- [Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
+instance forget₂_preservesMonomorphisms (C : Type u) (D : Type u')
+ [Category.{v} C] [ConcreteCategory.{w} C] [Category.{v'} D] [ConcreteCategory.{w} D]
+ [HasForget₂ C D] [(forget C).PreservesMonomorphisms] :
(forget₂ C D).PreservesMonomorphisms :=
have : (forget₂ C D ⋙ forget D).PreservesMonomorphisms := by
simp only [HasForget₂.forget_comp]
@@ -231,8 +232,9 @@ instance forget₂_preservesMonomorphisms (C : Type v) (D : Type v') [Category C
Functor.preservesMonomorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_monomorphisms CategoryTheory.forget₂_preservesMonomorphisms
-instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C] [ConcreteCategory C]
- [Category D] [ConcreteCategory D] [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
+instance forget₂_preservesEpimorphisms (C : Type u) (D : Type u')
+ [Category.{v} C] [ConcreteCategory.{w} C] [Category.{v'} D] [ConcreteCategory.{w} D]
+ [HasForget₂ C D] [(forget C).PreservesEpimorphisms] :
(forget₂ C D).PreservesEpimorphisms :=
have : (forget₂ C D ⋙ forget D).PreservesEpimorphisms := by
simp only [HasForget₂.forget_comp]
@@ -240,24 +242,25 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
Functor.preservesEpimorphisms_of_preserves_of_reflects _ (forget D)
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
-instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
- [ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f) where
+instance InducedCategory.concreteCategory {C : Type u} {D : Type u'}
+ [Category.{v'} D] [ConcreteCategory.{w} D] (f : C → D) :
+ ConcreteCategory (InducedCategory D f) where
forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
-instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
- (f : C → D) : HasForget₂ (InducedCategory D f) D where
+instance InducedCategory.hasForget₂ {C : Type u} {D : Type u'} [Category.{v} D]
+ [ConcreteCategory.{w} D] (f : C → D) : HasForget₂ (InducedCategory D f) D where
forget₂ := inducedFunctor f
forget_comp := rfl
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
-instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
+instance FullSubcategory.concreteCategory {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z) where
forget := fullSubcategoryInclusion Z ⋙ forget C
#align category_theory.full_subcategory.concrete_category CategoryTheory.FullSubcategoryₓ.concreteCategory
-instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategory C] (Z : C → Prop) :
- HasForget₂ (FullSubcategory Z) C where
+instance FullSubcategory.hasForget₂ {C : Type u} [Category.{v} C] [ConcreteCategory.{w} C]
+ (Z : C → Prop) : HasForget₂ (FullSubcategory Z) C where
forget₂ := fullSubcategoryInclusion Z
forget_comp := rfl
#align category_theory.full_subcategory.has_forget₂ CategoryTheory.FullSubcategoryₓ.hasForget₂
@@ -265,8 +268,9 @@ instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategor
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
-/
-def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C] [Category D]
- [ConcreteCategory D] (obj : C → D) (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
+def HasForget₂.mk' {C : Type u} {D : Type u'} [Category.{v} C] [ConcreteCategory.{w} C]
+ [Category.{v'} D] [ConcreteCategory.{w} D]
+ (obj : C → D) (h_obj : ∀ X, (forget D).obj (obj X) = (forget C).obj X)
(map : ∀ {X Y}, (X ⟶ Y) → (obj X ⟶ obj Y))
(h_map : ∀ {X Y} {f : X ⟶ Y}, HEq ((forget D).map (map f)) ((forget C).map f)) : HasForget₂ C D
where
@@ -276,7 +280,8 @@ def HasForget₂.mk' {C : Type v} {D : Type v'} [Category C] [ConcreteCategory C
/-- Every forgetful functor factors through the identity functor. This is not a global instance as
it is prone to creating type class resolution loops. -/
-def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget₂ C (Type u) where
+def hasForgetToType (C : Type u) [Category.{v} C] [ConcreteCategory.{w} C] :
+ HasForget₂ C (Type w) where
forget₂ := forget C
forget_comp := Functor.comp_id _
#align category_theory.has_forget_to_Type CategoryTheory.hasForgetToType
Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: int-y1 <jason_yuen2007@hotmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -102,6 +102,7 @@ variable {C : Type v} [Category C] [ConcreteCategory.{w} C]
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
+@[reducible]
def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun _ => X → Y :=
⟨fun f => (forget _).map f⟩
#align category_theory.concrete_category.has_coe_to_fun CategoryTheory.ConcreteCategory.hasCoeToFun
I think the ports
didn't quite get things right, and also have some variation between them. This PR tries to straighten things out.
Major changes:
X.\a
, and put attribute @[coe]
on this.lemma Hom.map_mul {X Y : MonCat} (f : X ⟶ Y) (x y : X) : ((forget MonCat).map f) (x * y) = f x * f y
lemma coe_comp {X Y Z : MonCat} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g : X → Z) = g ∘ f := rfl
Overall I'm pretty happy, and it allows me to unstick the long stuck https://github.com/leanprover-community/mathlib4/pull/3105.
This is not everything I want to do to refactor these files, but once I was satisfied that I can move forward with RingCat, I want to get this merged so we can unblock porting progress. I'll promise to come back to this soon! :-)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>
@@ -57,25 +57,25 @@ They are specified that order, to avoid unnecessary universe annotations.
-/
class ConcreteCategory (C : Type u) [Category.{v} C] where
/-- We have a functor to Type -/
- Forget : C ⥤ Type w -- Porting note: it has Type in the signature...
+ protected forget : C ⥤ Type w
/-- That functor is faithful -/
- [forget_faithful : Faithful Forget]
+ [forget_faithful : Faithful forget]
#align category_theory.concrete_category CategoryTheory.ConcreteCategory
-#align category_theory.concrete_category.forget CategoryTheory.ConcreteCategory.Forget
+#align category_theory.concrete_category.forget CategoryTheory.ConcreteCategory.forget
-attribute [reducible] ConcreteCategory.Forget
+attribute [reducible] ConcreteCategory.forget
attribute [instance] ConcreteCategory.forget_faithful
/-- The forgetful functor from a concrete category to `Type u`. -/
@[reducible]
def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
- ConcreteCategory.Forget
+ ConcreteCategory.forget
#align category_theory.forget CategoryTheory.forget
-- this is reducible because we want `forget (Type u)` to unfold to `𝟭 _`
@[reducible]
instance ConcreteCategory.types : ConcreteCategory (Type u) where
- Forget := 𝟭 _
+ forget := 𝟭 _
#align category_theory.concrete_category.types CategoryTheory.ConcreteCategory.types
/-- Provide a coercion to `Type u` for a concrete category. This is not marked as an instance
@@ -88,7 +88,7 @@ instance : HasCoeToSort X := ConcreteCategory.hasCoeToSort X
-/
def ConcreteCategory.hasCoeToSort (C : Type v) [Category C] [ConcreteCategory C] :
CoeSort C (Type u) where
- coe := fun X => ConcreteCategory.Forget.obj X
+ coe := fun X => (forget C).obj X
#align category_theory.concrete_category.has_coe_to_sort CategoryTheory.ConcreteCategory.hasCoeToSort
section
@@ -97,9 +97,8 @@ attribute [local instance] ConcreteCategory.hasCoeToSort
variable {C : Type v} [Category C] [ConcreteCategory.{w} C]
-@[simp]
-theorem forget_obj_eq_coe {X : C} : (forget C).obj X = X := rfl
-#align category_theory.forget_obj_eq_coe CategoryTheory.forget_obj_eq_coe
+-- Porting note: forget_obj_eq_coe has become a syntactic tautology.
+#noalign category_theory.forget_obj_eq_coe
/-- Usually a bundled hom structure already has a coercion to function
that works with different universes. So we don't use this as a global instance. -/
@@ -118,9 +117,8 @@ theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x =
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
-@[simp, nolint synTaut] -- Porting note: synTaut is fine with CoeFun.coe explicitly on the RHS
-theorem forget_map_eq_coe {X Y : C} (f : X ⟶ Y) : (forget C).map f = f := rfl
-#align category_theory.forget_map_eq_coe CategoryTheory.forget_map_eq_coe
+-- Porting note: `forget_map_eq_coe` becomes a syntactic tautology.
+#noalign category_theory.forget_map_eq_coe
/-- Analogue of `congr_fun h x`,
when `h : f = g` is an equality between morphisms in a concrete category.
@@ -206,7 +204,7 @@ class HasForget₂ (C : Type v) (D : Type v') [Category C] [ConcreteCategory.{u}
[ConcreteCategory.{u} D] where
/-- A functor from `C` to `D` -/
forget₂ : C ⥤ D
- /-- It covers the `ConcreteCategory.Forget` for `C` and `D` -/
+ /-- It covers the `ConcreteCategory.forget` for `C` and `D` -/
forget_comp : forget₂ ⋙ forget D = forget C := by aesop
#align category_theory.has_forget₂ CategoryTheory.HasForget₂
@@ -243,7 +241,7 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
[ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f) where
- Forget := inducedFunctor f ⋙ forget D
+ forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [ConcreteCategory D]
@@ -254,7 +252,7 @@ instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [C
instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
(Z : C → Prop) : ConcreteCategory (FullSubcategory Z) where
- Forget := fullSubcategoryInclusion Z ⋙ forget C
+ forget := fullSubcategoryInclusion Z ⋙ forget C
#align category_theory.full_subcategory.concrete_category CategoryTheory.FullSubcategoryₓ.concreteCategory
instance FullSubcategory.hasForget₂ {C : Type v} [Category C] [ConcreteCategory C] (Z : C → Prop) :
@@ -63,6 +63,7 @@ class ConcreteCategory (C : Type u) [Category.{v} C] where
#align category_theory.concrete_category CategoryTheory.ConcreteCategory
#align category_theory.concrete_category.forget CategoryTheory.ConcreteCategory.Forget
+attribute [reducible] ConcreteCategory.Forget
attribute [instance] ConcreteCategory.forget_faithful
/-- The forgetful functor from a concrete category to `Type u`. -/
@@ -71,6 +72,8 @@ def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
ConcreteCategory.Forget
#align category_theory.forget CategoryTheory.forget
+-- this is reducible because we want `forget (Type u)` to unfold to `𝟭 _`
+@[reducible]
instance ConcreteCategory.types : ConcreteCategory (Type u) where
Forget := 𝟭 _
#align category_theory.concrete_category.types CategoryTheory.ConcreteCategory.types
@@ -16,23 +16,23 @@ import Mathlib.CategoryTheory.Limits.Constructions.EpiMono
# Concrete categories
A concrete category is a category `C` with a fixed faithful functor
-`forget : C ⥤ Type*`. We define concrete categories using `class
+`forget : C ⥤ Type _`. We define concrete categories using `class
concrete_category`. In particular, we impose no restrictions on the
carrier type `C`, so `Type` is a concrete category with the identity
forgetful functor.
Each concrete category `C` comes with a canonical faithful functor
-`forget C : C ⥤ Type*`. We say that a concrete category `C` admits a
+`forget C : C ⥤ Type _`. We say that a concrete category `C` admits a
*forgetful functor* to a concrete category `D`, if it has a functor
`forget₂ C D : C ⥤ D` such that `(forget₂ C D) ⋙ (forget D) = forget C`,
-see `class has_forget₂`. Due to `faithful.div_comp`, it suffices
+see `class HasForget₂`. Due to `Faithful.div_comp`, it suffices
to verify that `forget₂.obj` and `forget₂.map` agree with the equality
above; then `forget₂` will satisfy the functor laws automatically, see
-`has_forget₂.mk'`.
+`HasForget₂.mk'`.
Two classes helping construct concrete categories in the two most
-common cases are provided in the files `bundled_hom` and
-`unbundled_hom`, see their documentation for details.
+common cases are provided in the files `BundledHom` and
+`UnbundledHom`, see their documentation for details.
## References
Co-authored-by: adamtopaz <github@adamtopaz.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Adam Topaz <adamtopaz@users.noreply.github.com> Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -107,6 +107,7 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun _ => X → Y :
attribute [local instance] ConcreteCategory.hasCoeToFun
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
+@[ext 900] -- Porting note: lowered priority
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
dsimp [forget]
@@ -107,7 +107,6 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun _ => X → Y :
attribute [local instance] ConcreteCategory.hasCoeToFun
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
-@[ext]
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
dsimp [forget]
Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
@@ -107,6 +107,7 @@ def ConcreteCategory.hasCoeToFun {X Y : C} : CoeFun (X ⟶ Y) fun _ => X → Y :
attribute [local instance] ConcreteCategory.hasCoeToFun
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
+@[ext]
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
dsimp [forget]
vscode is already configured by .vscode/settings.json
to trim these on save. It's not clear how they've managed to stick around.
By doing this all in one PR now, it avoids getting random whitespace diffs in PRs later.
This was done with a regex search in vscode,
@@ -71,7 +71,7 @@ def forget (C : Type v) [Category C] [ConcreteCategory.{u} C] : C ⥤ Type u :=
ConcreteCategory.Forget
#align category_theory.forget CategoryTheory.forget
-instance ConcreteCategory.types : ConcreteCategory (Type u) where
+instance ConcreteCategory.types : ConcreteCategory (Type u) where
Forget := 𝟭 _
#align category_theory.concrete_category.types CategoryTheory.ConcreteCategory.types
@@ -108,9 +108,9 @@ attribute [local instance] ConcreteCategory.hasCoeToFun
/-- In any concrete category, we can test equality of morphisms by pointwise evaluations.-/
theorem ConcreteCategory.hom_ext {X Y : C} (f g : X ⟶ Y) (w : ∀ x : X, f x = g x) : f = g := by
- apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
+ apply @Faithful.map_injective C _ (Type w) _ (forget C) _ X Y
dsimp [forget]
- funext x
+ funext x
exact w x
#align category_theory.concrete_category.hom_ext CategoryTheory.ConcreteCategory.hom_ext
@@ -133,12 +133,12 @@ theorem coe_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : (f ≫ g : X → Z) =
(forget _).map_comp f g
#align category_theory.coe_comp CategoryTheory.coe_comp
--- Porting note: removed @[simp] since simp can prove this
+-- Porting note: removed @[simp] since simp can prove this
theorem id_apply {X : C} (x : X) : (𝟙 X : X → X) x = x :=
congr_fun ((forget _).map_id X) x
#align category_theory.id_apply CategoryTheory.id_apply
--- Porting note: removed @[simp] since simp can prove this
+-- Porting note: removed @[simp] since simp can prove this
theorem comp_apply {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (x : X) : (f ≫ g) x = g (f x) :=
congr_fun ((forget _).map_comp _ _) x
#align category_theory.comp_apply CategoryTheory.comp_apply
@@ -238,7 +238,7 @@ instance forget₂_preservesEpimorphisms (C : Type v) (D : Type v') [Category C]
#align category_theory.forget₂_preserves_epimorphisms CategoryTheory.forget₂_preservesEpimorphisms
instance InducedCategory.concreteCategory {C : Type v} {D : Type v'} [Category D]
- [ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f) where
+ [ConcreteCategory D] (f : C → D) : ConcreteCategory (InducedCategory D f) where
Forget := inducedFunctor f ⋙ forget D
#align category_theory.induced_category.concrete_category CategoryTheory.InducedCategory.concreteCategory
@@ -249,7 +249,7 @@ instance InducedCategory.hasForget₂ {C : Type v} {D : Type v'} [Category D] [C
#align category_theory.induced_category.has_forget₂ CategoryTheory.InducedCategory.hasForget₂
instance FullSubcategory.concreteCategory {C : Type v} [Category C] [ConcreteCategory C]
- (Z : C → Prop) : ConcreteCategory (FullSubcategory Z) where
+ (Z : C → Prop) : ConcreteCategory (FullSubcategory Z) where
Forget := fullSubcategoryInclusion Z ⋙ forget C
#align category_theory.full_subcategory.concrete_category CategoryTheory.FullSubcategoryₓ.concreteCategory
@@ -279,4 +279,3 @@ def hasForgetToType (C : Type v) [Category C] [ConcreteCategory C] : HasForget
#align category_theory.has_forget_to_Type CategoryTheory.hasForgetToType
end CategoryTheory
-
All dependencies are ported!