Skip to content

Commit 1cd061f

Browse files
Jlh18Vtec234
andauthored
refactor: Unstructured (#152)
* feat: Unstructured * refactor: Groupoid sigma via PolymorphicSigma.mk' * feat: Hurewicz * feat: connection * feat: Hurewitz sorry free * remove backups * Update HoTTLean/ForMathlib.lean * ci: build natural model * chore: remove comments * chore: add NaturalModel old Groupoids directory to attic --------- Co-authored-by: Wojciech Nawrocki <wjnawrocki@protonmail.com>
1 parent 0bffdc4 commit 1cd061f

36 files changed

+8372
-1722
lines changed

.github/workflows/push.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ jobs:
4242
- name: Build project
4343
run: ~/.elan/bin/lake build
4444

45+
- name: Build HoTTLean.Model.Natural
46+
run: ~/.elan/bin/lake build NaturalModel
47+
4548
- name: Run tests
4649
run: ~/.elan/bin/lake test
4750

.github/workflows/push_pr.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@ jobs:
2020
- name: Build project
2121
run: ~/.elan/bin/lake build
2222

23+
- name: Build HoTTLean.Model.Natural
24+
run: ~/.elan/bin/lake build NaturalModel
25+
2326
- name: Run tests
2427
run: ~/.elan/bin/lake test

HoTTLean.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import HoTTLean.Model.Interpretation
2-
import HoTTLean.Groupoids.NaturalModelBase
31
import HoTTLean.Groupoids.Sigma
42
import HoTTLean.Groupoids.Pi
53
import HoTTLean.Groupoids.Id
4+
import HoTTLean.Model.Unstructured.Interpretation

HoTTLean/ForMathlib.lean

Lines changed: 82 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import Mathlib.Data.Part
99
import Mathlib.CategoryTheory.Monoidal.Cartesian.Basic
1010
import Mathlib.CategoryTheory.Core
1111
import Mathlib.CategoryTheory.Adjunction.Limits
12-
import HoTTLean.ForMathlib.CategoryTheory.Bicategory.Grothendieck
1312

1413
/-! This file contains declarations missing from mathlib,
1514
to 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+
356379
open ULift
357380

358381
instance (C : Type u) [Category.{v} C] :
@@ -391,154 +414,6 @@ theorem Cat.map_id_map {A : Γ ⥤ Cat.{v₁,u₁}}
391414

392415
end
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-
542417
section
543418
variable {C : Type u₁} [Category.{v₁} C]
544419
{D : Type u₂} [Category.{v₂} D]
@@ -600,6 +475,64 @@ end CategoryTheory.IsPullback
600475

601476
namespace 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+
603536
variable {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

Comments
 (0)