@@ -9,7 +9,6 @@ import Mathlib.Data.Part
99import Mathlib.CategoryTheory.Monoidal.Cartesian.Basic
1010import Mathlib.CategoryTheory.Core
1111import Mathlib.CategoryTheory.Adjunction.Limits
12- import HoTTLean.ForMathlib.CategoryTheory.Bicategory.Grothendieck
1312
1413/-! This file contains declarations missing from mathlib,
1514to be upstreamed. -/
@@ -353,6 +352,30 @@ def functorToAsSmallEquiv {D : Type u₁} [Category.{v₁} D] {C : Type u} [Cate
353352 left_inv _ := rfl
354353 right_inv _ := rfl
355354
355+ section
356+
357+ variable {D : Type u₁} [Category.{v₁} D] {C : Type u} [Category.{v} C]
358+ {E : Type u₂} [Category.{v₂} E] (A : D ⥤ AsSmall.{w} C) (B : D ⥤ C)
359+
360+ lemma functorToAsSmallEquiv_apply_comp_left (F : E ⥤ D) :
361+ functorToAsSmallEquiv (F ⋙ A) = F ⋙ functorToAsSmallEquiv A :=
362+ rfl
363+
364+ lemma functorToAsSmallEquiv_symm_apply_comp_left (F : E ⥤ D) :
365+ functorToAsSmallEquiv.symm (F ⋙ B) = F ⋙ functorToAsSmallEquiv.symm B :=
366+ rfl
367+
368+ lemma functorToAsSmallEquiv_apply_comp_right (F : C ⥤ E) :
369+ functorToAsSmallEquiv (A ⋙ AsSmall.down ⋙ F ⋙ AsSmall.up) = functorToAsSmallEquiv A ⋙ F :=
370+ rfl
371+
372+ lemma functorToAsSmallEquiv_symm_apply_comp_right (F : C ⥤ E) :
373+ functorToAsSmallEquiv.symm (B ⋙ F) =
374+ functorToAsSmallEquiv.symm B ⋙ AsSmall.down ⋙ F ⋙ AsSmall.up :=
375+ rfl
376+
377+ end
378+
356379open ULift
357380
358381instance (C : Type u) [Category.{v} C] :
@@ -391,154 +414,6 @@ theorem Cat.map_id_map {A : Γ ⥤ Cat.{v₁,u₁}}
391414
392415end
393416
394- namespace Functor.Grothendieck
395-
396- variable {Γ : Type *} [Category Γ] {A : Γ ⥤ Cat}
397- {x y : Grothendieck A}
398-
399- theorem cast_eq {F G : Γ ⥤ Cat}
400- (h : F = G) (p : Grothendieck F) :
401- (cast (by subst h; rfl) p : Grothendieck G)
402- = ⟨ p.base , cast (by subst h; rfl) p.fiber ⟩ := by
403- subst h
404- rfl
405-
406- theorem map_eqToHom_base_pf {G1 G2 : Grothendieck A} (eq : G1 = G2) :
407- A.obj G1.base = A.obj G2.base := by subst eq; rfl
408-
409- theorem map_eqToHom_base {G1 G2 : Grothendieck A} (eq : G1 = G2)
410- : A.map (eqToHom eq).base = eqToHom (map_eqToHom_base_pf eq) := by
411- simp [eqToHom_map]
412-
413- theorem map_eqToHom_obj_base {F G : Γ ⥤ Cat.{v,u}} (h : F = G)
414- (x) : ((Grothendieck.map (eqToHom h)).obj x).base = x.base := rfl
415-
416- theorem map_forget {F G : Γ ⥤ Cat.{v,u}} (α : F ⟶ G) :
417- Grothendieck.map α ⋙ Grothendieck.forget G =
418- Grothendieck.forget F :=
419- rfl
420-
421- variable {C : Type u} [Category.{v} C]
422- {F : C ⥤ Cat.{v₁,u₁}}
423-
424- variable {E : Type *} [Category E]
425- variable (fib : ∀ c, F.obj c ⥤ E) (hom : ∀ {c c' : C} (f : c ⟶ c'), fib c ⟶ F.map f ⋙ fib c')
426- variable (hom_id : ∀ c, hom (𝟙 c) = eqToHom (by simp only [Functor.map_id]; rfl))
427- variable (hom_comp : ∀ c₁ c₂ c₃ (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃), hom (f ≫ g) =
428- hom f ≫ Functor.whiskerLeft (F.map f) (hom g) ≫ eqToHom (by simp only [Functor.map_comp]; rfl))
429-
430- variable (K : Grothendieck F ⥤ E)
431-
432- def asFunctorFrom_fib (c : C) : (F.obj c) ⥤ E := ι F c ⋙ K
433-
434- def asFunctorFrom_hom {c c' : C} (f: c ⟶ c') :
435- asFunctorFrom_fib K c ⟶ F.map f ⋙ asFunctorFrom_fib K c' :=
436- Functor.whiskerRight (ιNatTrans f) K
437-
438- lemma asFunctorFrom_hom_app {c c' : C} (f: c ⟶ c') (p : F.obj c) :
439- (asFunctorFrom_hom K f).app p = K.map ((ιNatTrans f).app p) :=
440- rfl
441-
442- lemma asFunctorFrom_hom_id (c : C) : asFunctorFrom_hom K (𝟙 c) =
443- eqToHom (by simp only[Functor.map_id,Cat.id_eq_id,Functor.id_comp]) := by
444- ext p
445- simp [asFunctorFrom_hom_app, eqToHom_map, ιNatTrans_id_app]
446-
447- lemma asFunctorFrom_hom_comp (c₁ c₂ c₃ : C) (f : c₁ ⟶ c₂) (g: c₂ ⟶ c₃) :
448- asFunctorFrom_hom K (f ≫ g) =
449- asFunctorFrom_hom K f ≫ Functor.whiskerLeft (F.map f) (asFunctorFrom_hom K g) ≫ eqToHom
450- (by simp[← Functor.assoc]; congr) := by
451- ext p
452- simp [asFunctorFrom_hom, eqToHom_map, ιNatTrans_comp_app]
453-
454- theorem asFunctorFrom : Grothendieck.functorFrom (asFunctorFrom_fib K) (asFunctorFrom_hom K)
455- (asFunctorFrom_hom_id K) (asFunctorFrom_hom_comp K) = K := by
456- fapply CategoryTheory.Functor.ext
457- · intro X
458- rfl
459- · intro x y f
460- simp only [functorFrom_obj, asFunctorFrom_fib, Functor.comp_obj, functorFrom_map,
461- asFunctorFrom_hom, Functor.whiskerRight_app, Functor.comp_map, ← Functor.map_comp,
462- eqToHom_refl, Category.comp_id, Category.id_comp]
463- congr
464- fapply Hom.ext
465- · simp
466- · simp
467-
468- variable {D : Type *} [Category D] (G : E ⥤ D)
469-
470- def functorFrom_comp_fib (c : C) : F.obj c ⥤ D := fib c ⋙ G
471-
472- def functorFrom_comp_hom {c c' : C} (f : c ⟶ c') :
473- functorFrom_comp_fib fib G c ⟶ F.map f ⋙ functorFrom_comp_fib fib G c' :=
474- Functor.whiskerRight (hom f) G
475-
476- include hom_id in
477- lemma functorFrom_comp_hom_id (c : C) : functorFrom_comp_hom fib hom G (𝟙 c)
478- = eqToHom (by simp [Cat.id_eq_id, Functor.id_comp]) := by
479- ext x
480- simp [hom_id, eqToHom_map, functorFrom_comp_hom]
481-
482- include hom_comp in
483- lemma functorFrom_comp_hom_comp (c₁ c₂ c₃ : C) (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃):
484- functorFrom_comp_hom fib (fun {c c'} ↦ hom) G (f ≫ g)
485- = functorFrom_comp_hom fib (fun {c c'} ↦ hom) G f ≫
486- Functor.whiskerLeft (F.map f) (functorFrom_comp_hom fib hom G g) ≫
487- eqToHom (by simp[Cat.comp_eq_comp, Functor.map_comp, Functor.assoc]) := by
488- ext
489- simp [functorFrom_comp_hom, hom_comp, eqToHom_map]
490-
491- theorem functorFrom_comp : functorFrom fib hom hom_id hom_comp ⋙ G =
492- functorFrom (functorFrom_comp_fib fib G) (functorFrom_comp_hom fib hom G)
493- (functorFrom_comp_hom_id fib hom hom_id G)
494- (functorFrom_comp_hom_comp fib hom hom_comp G) := by
495- fapply CategoryTheory.Functor.ext
496- · intro X
497- simp [functorFrom_comp_fib]
498- · intro x y f
499- simp [functorFrom_comp_hom, functorFrom_comp_fib]
500-
501- variable (fib' : ∀ c, F.obj c ⥤ E) (hom' : ∀ {c c' : C} (f : c ⟶ c'), fib' c ⟶ F.map f ⋙ fib' c')
502- variable (hom_id' : ∀ c, hom' (𝟙 c) = eqToHom (by simp only [Functor.map_id]; rfl))
503- variable (hom_comp' : ∀ c₁ c₂ c₃ (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃), hom' (f ≫ g) =
504- hom' f ≫ Functor.whiskerLeft (F.map f) (hom' g) ≫ eqToHom (by simp only [Functor.map_comp]; rfl))
505-
506- theorem functorFrom_eq_of (ef : fib = fib')
507- (hhom : ∀ {c c' : C} (f : c ⟶ c'), hom f ≫ eqToHom (by rw[ef]) = eqToHom (by rw[ef]) ≫ hom' f) :
508- functorFrom fib hom hom_id hom_comp = functorFrom fib' hom' hom_id' hom_comp' := by
509- subst ef
510- congr!
511- · aesop_cat
512-
513- theorem functorFrom_ext {K K' : Grothendieck F ⥤ E}
514- (hfib : asFunctorFrom_fib K = asFunctorFrom_fib K')
515- (hhom : ∀ {c c' : C} (f : c ⟶ c'), asFunctorFrom_hom K f ≫ eqToHom (by rw [hfib])
516- = eqToHom (by rw[hfib]) ≫ asFunctorFrom_hom K' f)
517- : K = K' :=
518- calc K
519- _ = functorFrom (asFunctorFrom_fib K) (asFunctorFrom_hom K)
520- (asFunctorFrom_hom_id K) (asFunctorFrom_hom_comp K) :=
521- (asFunctorFrom K).symm
522- _ = functorFrom (asFunctorFrom_fib K') (asFunctorFrom_hom K')
523- (asFunctorFrom_hom_id K') (asFunctorFrom_hom_comp K') := by
524- apply functorFrom_eq_of
525- · exact hhom
526- · exact hfib
527- _ = K' := asFunctorFrom K'
528-
529- theorem functorFrom_hext {K K' : Grothendieck F ⥤ E}
530- (hfib : asFunctorFrom_fib K = asFunctorFrom_fib K')
531- (hhom : ∀ {c c' : C} (f : c ⟶ c'), asFunctorFrom_hom K f ≍ asFunctorFrom_hom K' f)
532- : K = K' := by
533- fapply functorFrom_ext
534- · assumption
535- · intros
536- apply eq_of_heq
537- simp only [heq_eqToHom_comp_iff, comp_eqToHom_heq_iff]
538- apply hhom
539-
540- end Functor.Grothendieck
541-
542417section
543418variable {C : Type u₁} [Category.{v₁} C]
544419 {D : Type u₂} [Category.{v₂} D]
@@ -600,6 +475,64 @@ end CategoryTheory.IsPullback
600475
601476namespace CategoryTheory
602477
478+ def ofYoneda {C : Type *} [Category C] {X Y : C}
479+ (app : ∀ {Γ}, (Γ ⟶ X) ⟶ (Γ ⟶ Y))
480+ (naturality : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (A), app (σ ≫ A) = σ ≫ app A) :
481+ X ⟶ Y :=
482+ Yoneda.fullyFaithful.preimage {
483+ app Γ := app
484+ naturality Δ Γ σ := by ext; simp [naturality] }
485+
486+ @[simp]
487+ lemma ofYoneda_comp_left {C : Type *} [Category C] {X Y : C}
488+ (app : ∀ {Γ}, (Γ ⟶ X) ⟶ (Γ ⟶ Y))
489+ (naturality : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (A), app (σ ≫ A) = σ ≫ app A)
490+ {Γ} (A : Γ ⟶ X) : A ≫ ofYoneda app naturality = app A := by
491+ apply Yoneda.fullyFaithful.map_injective
492+ ext
493+ simp [ofYoneda, naturality]
494+
495+ lemma ofYoneda_comm_sq {C : Type *} [Category C] {TL TR BL BR : C}
496+ (left : TL ⟶ BL) (right : TR ⟶ BR)
497+ (top : ∀ {Γ}, (Γ ⟶ TL) ⟶ (Γ ⟶ TR))
498+ (top_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (tr), top (σ ≫ tr) = σ ≫ top tr)
499+ (bottom : ∀ {Γ}, (Γ ⟶ BL) ⟶ (Γ ⟶ BR))
500+ (bottom_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (br), bottom (σ ≫ br) = σ ≫ bottom br)
501+ (comm_sq : ∀ {Γ} (ab : Γ ⟶ TL), top ab ≫ right = bottom (ab ≫ left)) :
502+ (ofYoneda top top_comp) ≫ right = left ≫ (ofYoneda bottom bottom_comp) := by
503+ apply Yoneda.fullyFaithful.map_injective
504+ ext Γ ab
505+ simp [comm_sq, ofYoneda]
506+
507+ open Limits in
508+ lemma ofYoneda_isPullback {C : Type u} [Category.{v} C] {TL TR BL BR : C}
509+ (left : TL ⟶ BL) (right : TR ⟶ BR)
510+ (top : ∀ {Γ}, (Γ ⟶ TL) ⟶ (Γ ⟶ TR))
511+ (top_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (tr), top (σ ≫ tr) = σ ≫ top tr)
512+ (bot : ∀ {Γ}, (Γ ⟶ BL) ⟶ (Γ ⟶ BR))
513+ (bot_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (br), bot (σ ≫ br) = σ ≫ bot br)
514+ (comm_sq : ∀ {Γ} (ab : Γ ⟶ TL), top ab ≫ right = bot (ab ≫ left))
515+ (lift : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), Γ ⟶ TL)
516+ (top_lift : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), top (lift t p ht) = t)
517+ (lift_comp_left : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), lift t p ht ≫ left = p)
518+ (lift_uniq : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p) (m : Γ ⟶ TL),
519+ top m = t → m ≫ left = p → m = lift t p ht) :
520+ IsPullback (ofYoneda top top_comp) left right (ofYoneda bot bot_comp) := by
521+ let c : PullbackCone right (ofYoneda bot bot_comp) :=
522+ PullbackCone.mk (ofYoneda top top_comp) left
523+ (ofYoneda_comm_sq _ _ _ _ _ _ comm_sq)
524+ apply IsPullback.of_isLimit (c := c)
525+ apply c.isLimitAux (fun s => lift (PullbackCone.fst s) (PullbackCone.snd s) (by
526+ simp [PullbackCone.condition s]))
527+ · simp [c, top_lift]
528+ · simp [c, lift_comp_left]
529+ · intro s m h
530+ apply lift_uniq
531+ · specialize h (some .left)
532+ simpa [c] using h
533+ · specialize h (some .right)
534+ exact h
535+
603536variable {C : Type u₁} [SmallCategory C] {F G : Cᵒᵖ ⥤ Type u₁}
604537 (app : ∀ {X : C}, (yoneda.obj X ⟶ F) → (yoneda.obj X ⟶ G))
605538 (naturality : ∀ {X Y : C} (f : X ⟶ Y) (α : yoneda.obj Y ⟶ F),
0 commit comments