Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit c6dd521

Browse files
bottinekim-em
andcommitted
feat(combinatorics/quiver/*) Notation for prefunctors (#17576)
Co-authored-by: Scott Morrison <scott@tqft.net>
1 parent c3019c7 commit c6dd521

4 files changed

Lines changed: 29 additions & 30 deletions

File tree

src/category_theory/groupoid/free_groupoid.lean

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,12 @@ instance : groupoid (free_groupoid V) :=
129129
comp_inv' := λ X Y p, quot.induction_on p $ λ pp, congr_comp_reverse pp }
130130

131131
/-- The inclusion of the quiver on `V` to the underlying quiver on `free_groupoid V`-/
132-
def of (V) [quiver V] : prefunctor V (free_groupoid V) :=
132+
def of (V) [quiver V] : V ⥤q (free_groupoid V) :=
133133
{ obj := λ X, ⟨X⟩,
134134
map := λ X Y f, quot.mk _ f.to_pos_path }
135135

136136
lemma of_eq : of V =
137-
((quiver.symmetrify.of).comp
138-
paths.of).comp (quotient.functor $ @red_step V _).to_prefunctor :=
137+
(quiver.symmetrify.of ⋙q paths.of).comp (quotient.functor $ @red_step V _).to_prefunctor :=
139138
begin
140139
apply prefunctor.ext, rotate,
141140
{ rintro X, refl, },
@@ -144,10 +143,10 @@ end
144143

145144
section universal_property
146145

147-
variables {V' : Type u'} [groupoid V'] (φ : prefunctor V V')
146+
variables {V' : Type u'} [groupoid V'] (φ : V ⥤q V')
148147

149148
/-- The lift of a prefunctor to a groupoid, to a functor from `free_groupoid V` -/
150-
def lift (φ : prefunctor V V') : free_groupoid V ⥤ V' :=
149+
def lift (φ : V ⥤q V') : free_groupoid V ⥤ V' :=
151150
quotient.lift _
152151
(paths.lift $ quiver.symmetrify.lift φ)
153152
(by
@@ -157,15 +156,15 @@ quotient.lift _
157156
symmetry,
158157
apply groupoid.comp_inv, })
159158

160-
lemma lift_spec (φ : prefunctor V V') : (of V).comp (lift φ).to_prefunctor = φ :=
159+
lemma lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).to_prefunctor = φ :=
161160
begin
162161
rw [of_eq, prefunctor.comp_assoc, prefunctor.comp_assoc, functor.to_prefunctor_comp],
163162
dsimp [lift],
164163
rw [quotient.lift_spec, paths.lift_spec, quiver.symmetrify.lift_spec],
165164
end
166165

167-
lemma lift_unique (φ : prefunctor V V') (Φ : free_groupoid V ⥤ V')
168-
(hΦ : (of V).comp Φ.to_prefunctor = φ) : Φ = (lift φ) :=
166+
lemma lift_unique (φ : V ⥤q V') (Φ : free_groupoid V ⥤ V')
167+
(hΦ : of V ⋙q Φ.to_prefunctor = φ) : Φ = lift φ :=
169168
begin
170169
apply quotient.lift_unique,
171170
apply paths.lift_unique,
@@ -186,8 +185,8 @@ section functoriality
186185
variables {V' : Type u'} [quiver.{v'+1} V'] {V'' : Type u''} [quiver.{v''+1} V'']
187186

188187
/-- The functor of free groupoid induced by a prefunctor of quivers -/
189-
def _root_.category_theory.free_groupoid_functor (φ : prefunctor V V') :
190-
free_groupoid V ⥤ free_groupoid V' := lift (φ.comp (of V'))
188+
def _root_.category_theory.free_groupoid_functor (φ : V ⥤q V') :
189+
free_groupoid V ⥤ free_groupoid V' := lift (φ ⋙q of V')
191190

192191
lemma free_groupoid_functor_id :
193192
free_groupoid_functor (prefunctor.id V) = functor.id (free_groupoid V) :=
@@ -197,8 +196,8 @@ begin
197196
end
198197

199198
lemma free_groupoid_functor_comp
200-
(φ : prefunctor V V') (φ' : prefunctor V' V'') :
201-
free_groupoid_functor (φ.comp φ') = (free_groupoid_functor φ)(free_groupoid_functor φ') :=
199+
(φ : V ⥤q V') (φ' : V' ⥤q V'') :
200+
free_groupoid_functor (φ ⋙q φ') = free_groupoid_functor φ ⋙ free_groupoid_functor φ' :=
202201
begin
203202
dsimp only [free_groupoid_functor], symmetry,
204203
apply lift_unique, refl,

src/category_theory/path_category.lean

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ variables {V}
4646
The inclusion of a quiver `V` into its path category, as a prefunctor.
4747
-/
4848
@[simps]
49-
def of : prefunctor V (paths V) :=
49+
def of : V ⥤q (paths V) :=
5050
{ obj := λ X, X,
5151
map := λ X Y f, f.to_path, }
5252

5353
local attribute [ext] functor.ext
5454

5555
/-- Any prefunctor from `V` lifts to a functor from `paths V` -/
56-
def lift {C} [category C] (φ : prefunctor V C) : (paths V) ⥤ C :=
56+
def lift {C} [category C] (φ : V ⥤q C) : paths V ⥤ C :=
5757
{ obj := φ.obj,
5858
map := λ X Y f, @quiver.path.rec V _ X (λ Y f, φ.obj X ⟶ φ.obj Y) (𝟙 $ φ.obj X)
5959
(λ Y Z p f ihp, ihp ≫ (φ.map f)) Y f,
@@ -64,18 +64,18 @@ def lift {C} [category C] (φ : prefunctor V C) : (paths V) ⥤ C :=
6464
{ have : f ≫ g'.cons p = (f ≫ g').cons p, by apply quiver.path.comp_cons,
6565
rw this, simp only, rw [ih, category.assoc], } } }
6666

67-
@[simp] lemma lift_nil {C} [category C] (φ : prefunctor V C) (X : V) :
67+
@[simp] lemma lift_nil {C} [category C] (φ : V ⥤q C) (X : V) :
6868
(lift φ).map (quiver.path.nil) = 𝟙 (φ.obj X) := rfl
6969

70-
@[simp] lemma lift_cons {C} [category C] (φ : prefunctor V C) {X Y Z : V}
70+
@[simp] lemma lift_cons {C} [category C] (φ : V ⥤q C) {X Y Z : V}
7171
(p : quiver.path X Y) (f : Y ⟶ Z) :
7272
(lift φ).map (p.cons f) = (lift φ).map p ≫ (φ.map f) := rfl
7373

74-
@[simp] lemma lift_to_path {C} [category C] (φ : prefunctor V C) {X Y : V} (f : X ⟶ Y) :
74+
@[simp] lemma lift_to_path {C} [category C] (φ : V ⥤q C) {X Y : V} (f : X ⟶ Y) :
7575
(lift φ).map f.to_path = φ.map f := by {dsimp [quiver.hom.to_path,lift], simp, }
7676

77-
lemma lift_spec {C} [category C] (φ : prefunctor V C) :
78-
of.comp (lift φ).to_prefunctor = φ :=
77+
lemma lift_spec {C} [category C] (φ : V ⥤q C) :
78+
of ⋙q (lift φ).to_prefunctor = φ :=
7979
begin
8080
apply prefunctor.ext, rotate,
8181
{ rintro X, refl, },
@@ -84,8 +84,8 @@ begin
8484
simp only [category.id_comp], },
8585
end
8686

87-
lemma lift_unique {C} [category C] (φ : prefunctor V C) (Φ : paths V ⥤ C)
88-
(hΦ : of.comp Φ.to_prefunctor = φ) : Φ = lift φ :=
87+
lemma lift_unique {C} [category C] (φ : V ⥤q C) (Φ : paths V ⥤ C)
88+
(hΦ : of ⋙q Φ.to_prefunctor = φ) : Φ = lift φ :=
8989
begin
9090
subst_vars,
9191
apply functor.ext, rotate,
@@ -122,8 +122,7 @@ end paths
122122
variables (W : Type u₂) [quiver.{v₂+1} W]
123123

124124
-- A restatement of `prefunctor.map_path_comp` using `f ≫ g` instead of `f.comp g`.
125-
@[simp] lemma prefunctor.map_path_comp' (F : prefunctor V W)
126-
{X Y Z : paths V} (f : X ⟶ Y) (g : Y ⟶ Z) :
125+
@[simp] lemma prefunctor.map_path_comp' (F : V ⥤q W) {X Y Z : paths V} (f : X ⟶ Y) (g : Y ⟶ Z) :
127126
F.map_path (f ≫ g) = (F.map_path f).comp (F.map_path g) :=
128127
prefunctor.map_path_comp _ _ _
129128

src/combinatorics/quiver/basic.lean

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,13 @@ def comp {U : Type*} [quiver U] {V : Type*} [quiver V] {W : Type*} [quiver W]
9090
lemma comp_assoc
9191
{U V W Z : Type*} [quiver U] [quiver V] [quiver W] [quiver Z]
9292
(F : prefunctor U V) (G : prefunctor V W) (H : prefunctor W Z) :
93-
(F.comp G).comp H = F.comp (G.comp H) :=
94-
begin
95-
apply prefunctor.ext, rotate,
96-
{ rintro X, refl, },
97-
{ rintro X Y Z, refl, }
98-
end
93+
(F.comp G).comp H = F.comp (G.comp H) := rfl
94+
95+
infix ` ⥤q `:50 := prefunctor
96+
97+
infix ` ⋙q `:50 := prefunctor.comp
98+
99+
notation `𝟭q` := id
99100

100101
end prefunctor
101102

src/combinatorics/quiver/path.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ namespace prefunctor
142142

143143
open quiver
144144

145-
variables {V : Type u₁} [quiver.{v₁} V] {W : Type u₂} [quiver.{v₂} W] (F : prefunctor V W)
145+
variables {V : Type u₁} [quiver.{v₁} V] {W : Type u₂} [quiver.{v₂} W] (F : V ⥤q W)
146146

147147
/-- The image of a path under a prefunctor. -/
148148
def map_path {a : V} :

0 commit comments

Comments
 (0)