Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
6a6cbc3
refactor: NaturalModel file
Jlh18 Sep 25, 2025
26a9438
refactor: some of UHom
Jlh18 Sep 25, 2025
9e019ba
refactor: up to GroupoidModel.NaturalModelBase
Jlh18 Sep 26, 2025
a03ab5b
refactor: up to Groupoids.Id
Jlh18 Sep 26, 2025
3a20884
feat: all UvPoly.Equiv lemmas
Jlh18 Sep 26, 2025
b3598b8
feat: UvPoly.compDomEquiv
Jlh18 Sep 27, 2025
74acbc9
refactor: NaturalModel Sigma
Jlh18 Sep 27, 2025
14fa89d
refactor: NaturalModel compDomEquiv
Jlh18 Sep 27, 2025
74246db
attempt to make sigma helper
Jlh18 Sep 28, 2025
abb4e34
refactor: Groupoid model Sigma
Jlh18 Sep 28, 2025
331e4ae
pushforwardPullbackTwoSquare
Jlh18 Sep 28, 2025
5918d59
feat: verticalNatTrans
Jlh18 Sep 29, 2025
35316d2
cartesianNatTrans
Jlh18 Sep 30, 2025
54191f7
refactor: interpretation
Jlh18 Sep 30, 2025
2ffef86
some more id refactoring
Jlh18 Sep 30, 2025
2fc4bb3
feat: ofUnstructured
Jlh18 Sep 30, 2025
7f5ba2a
sigma full refactor through unstructured model
Jlh18 Oct 1, 2025
77742a1
refactor pi through unstructured API
Jlh18 Oct 2, 2025
1685339
feat: isofibration pushforward proof skeleton
Jlh18 Oct 3, 2025
4735586
feat: use MvPoly cartesianNatTrans proof to prove UvPoly result
Jlh18 Oct 3, 2025
a03bb09
remove dead files
Jlh18 Oct 4, 2025
95392a4
feat: isofibration homEquiv
Jlh18 Oct 4, 2025
8aba26e
confirm we can arrive in pushforward of groupoid isofib
Oct 5, 2025
2c99b93
problem on line 104
Oct 5, 2025
4eed636
suggestions
Jlh18 Oct 5, 2025
01a5862
problem with classifier at line 171
Oct 5, 2025
d77582e
SplitClovenIsofibration
Jlh18 Oct 6, 2025
6930410
feat: SplitClovenIsofibration
Jlh18 Oct 6, 2025
5314dc4
problem on line 256
Oct 7, 2025
c14cc51
feat: use functorFrom and map_comp
Jlh18 Oct 7, 2025
7b3ea9f
problem on line 286
Oct 7, 2025
1a597ce
feat: Functor.SplitClovenFibration.id
Jlh18 Oct 8, 2025
7891df5
a bit progres
Oct 8, 2025
f9429dc
merge pull
Jlh18 Oct 8, 2025
17fbfbe
tidy up
Jlh18 Oct 8, 2025
5706207
splitisofib prog
Oct 9, 2025
a5a33d3
SplitIsofib prog
Oct 9, 2025
9b9231e
problem on line 515
Oct 9, 2025
a4e5ca5
implicit arguments
Jlh18 Oct 9, 2025
24dbf4a
Iso
Jlh18 Oct 9, 2025
d0a7c97
prove grothendeickClassifierIso
Jlh18 Oct 10, 2025
3d9a7ff
problem on line 603
Oct 13, 2025
0cee545
fix: comp.liftIso_id
Jlh18 Oct 14, 2025
9b86ffc
feat: PolymorphicSigma.mk'
Jlh18 Oct 15, 2025
3c0e644
assoc isomorphism
Jlh18 Oct 16, 2025
b04c223
feat: comp.liftObj_comp
Oct 16, 2025
6997ede
golf
Oct 17, 2025
ebbcbf2
comp, to be golfed
Oct 19, 2025
64a45f5
comp, golfed
Oct 19, 2025
f2f5fc5
feat: forget SplitIso
Oct 21, 2025
bf0bbdd
progress on pb
Oct 23, 2025
8b39a4a
pb before golf
Oct 23, 2025
7aa1dfc
ungolfed pb
Oct 23, 2025
819b2ee
chore: golf ofIsPullback
Jlh18 Oct 23, 2025
ad15b3b
.
Jlh18 Oct 23, 2025
ab62b09
chore: fix errors in Groupoids.SplitIsofibration
Jlh18 Oct 23, 2025
a9a31a7
refactor: Grpd splitIsofibrations pushforward through general SplitIs…
Jlh18 Oct 23, 2025
c65855e
chore: remove comments
Jlh18 Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion HoTTLean.lean
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import HoTTLean.Model.Interpretation
import HoTTLean.Groupoids.NaturalModelBase
import HoTTLean.Groupoids.Sigma
import HoTTLean.Groupoids.Pi
import HoTTLean.Groupoids.Id
230 changes: 81 additions & 149 deletions HoTTLean/ForMathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import Mathlib.Data.Part
import Mathlib.CategoryTheory.Monoidal.Cartesian.Basic
import Mathlib.CategoryTheory.Core
import Mathlib.CategoryTheory.Adjunction.Limits
import HoTTLean.ForMathlib.CategoryTheory.Bicategory.Grothendieck

/-! This file contains declarations missing from mathlib,
to be upstreamed. -/
Expand Down Expand Up @@ -353,6 +352,30 @@ def functorToAsSmallEquiv {D : Type u₁} [Category.{v₁} D] {C : Type u} [Cate
left_inv _ := rfl
right_inv _ := rfl

section

variable {D : Type u₁} [Category.{v₁} D] {C : Type u} [Category.{v} C]
{E : Type u₂} [Category.{v₂} E] (A : D ⥤ AsSmall.{w} C) (B : D ⥤ C)

lemma functorToAsSmallEquiv_apply_comp_left (F : E ⥤ D) :
functorToAsSmallEquiv (F ⋙ A) = F ⋙ functorToAsSmallEquiv A :=
rfl

lemma functorToAsSmallEquiv_symm_apply_comp_left (F : E ⥤ D) :
functorToAsSmallEquiv.symm (F ⋙ B) = F ⋙ functorToAsSmallEquiv.symm B :=
rfl

lemma functorToAsSmallEquiv_apply_comp_right (F : C ⥤ E) :
functorToAsSmallEquiv (A ⋙ AsSmall.down ⋙ F ⋙ AsSmall.up) = functorToAsSmallEquiv A ⋙ F :=
rfl

lemma functorToAsSmallEquiv_symm_apply_comp_right (F : C ⥤ E) :
functorToAsSmallEquiv.symm (B ⋙ F) =
functorToAsSmallEquiv.symm B ⋙ AsSmall.down ⋙ F ⋙ AsSmall.up :=
rfl

end

open ULift

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

end

namespace Functor.Grothendieck

variable {Γ : Type*} [Category Γ] {A : Γ ⥤ Cat}
{x y : Grothendieck A}

theorem cast_eq {F G : Γ ⥤ Cat}
(h : F = G) (p : Grothendieck F) :
(cast (by subst h; rfl) p : Grothendieck G)
= ⟨ p.base , cast (by subst h; rfl) p.fiber ⟩ := by
subst h
rfl

theorem map_eqToHom_base_pf {G1 G2 : Grothendieck A} (eq : G1 = G2) :
A.obj G1.base = A.obj G2.base := by subst eq; rfl

theorem map_eqToHom_base {G1 G2 : Grothendieck A} (eq : G1 = G2)
: A.map (eqToHom eq).base = eqToHom (map_eqToHom_base_pf eq) := by
simp [eqToHom_map]

theorem map_eqToHom_obj_base {F G : Γ ⥤ Cat.{v,u}} (h : F = G)
(x) : ((Grothendieck.map (eqToHom h)).obj x).base = x.base := rfl

theorem map_forget {F G : Γ ⥤ Cat.{v,u}} (α : F ⟶ G) :
Grothendieck.map α ⋙ Grothendieck.forget G =
Grothendieck.forget F :=
rfl

variable {C : Type u} [Category.{v} C]
{F : C ⥤ Cat.{v₁,u₁}}

variable {E : Type*} [Category E]
variable (fib : ∀ c, F.obj c ⥤ E) (hom : ∀ {c c' : C} (f : c ⟶ c'), fib c ⟶ F.map f ⋙ fib c')
variable (hom_id : ∀ c, hom (𝟙 c) = eqToHom (by simp only [Functor.map_id]; rfl))
variable (hom_comp : ∀ c₁ c₂ c₃ (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃), hom (f ≫ g) =
hom f ≫ Functor.whiskerLeft (F.map f) (hom g) ≫ eqToHom (by simp only [Functor.map_comp]; rfl))

variable (K : Grothendieck F ⥤ E)

def asFunctorFrom_fib (c : C) : (F.obj c) ⥤ E := ι F c ⋙ K

def asFunctorFrom_hom {c c' : C} (f: c ⟶ c') :
asFunctorFrom_fib K c ⟶ F.map f ⋙ asFunctorFrom_fib K c' :=
Functor.whiskerRight (ιNatTrans f) K

lemma asFunctorFrom_hom_app {c c' : C} (f: c ⟶ c') (p : F.obj c) :
(asFunctorFrom_hom K f).app p = K.map ((ιNatTrans f).app p) :=
rfl

lemma asFunctorFrom_hom_id (c : C) : asFunctorFrom_hom K (𝟙 c) =
eqToHom (by simp only[Functor.map_id,Cat.id_eq_id,Functor.id_comp]) := by
ext p
simp [asFunctorFrom_hom_app, eqToHom_map, ιNatTrans_id_app]

lemma asFunctorFrom_hom_comp (c₁ c₂ c₃ : C) (f : c₁ ⟶ c₂) (g: c₂ ⟶ c₃) :
asFunctorFrom_hom K (f ≫ g) =
asFunctorFrom_hom K f ≫ Functor.whiskerLeft (F.map f) (asFunctorFrom_hom K g) ≫ eqToHom
(by simp[← Functor.assoc]; congr) := by
ext p
simp [asFunctorFrom_hom, eqToHom_map, ιNatTrans_comp_app]

theorem asFunctorFrom : Grothendieck.functorFrom (asFunctorFrom_fib K) (asFunctorFrom_hom K)
(asFunctorFrom_hom_id K) (asFunctorFrom_hom_comp K) = K := by
fapply CategoryTheory.Functor.ext
· intro X
rfl
· intro x y f
simp only [functorFrom_obj, asFunctorFrom_fib, Functor.comp_obj, functorFrom_map,
asFunctorFrom_hom, Functor.whiskerRight_app, Functor.comp_map, ← Functor.map_comp,
eqToHom_refl, Category.comp_id, Category.id_comp]
congr
fapply Hom.ext
· simp
· simp

variable {D : Type*} [Category D] (G : E ⥤ D)

def functorFrom_comp_fib (c : C) : F.obj c ⥤ D := fib c ⋙ G

def functorFrom_comp_hom {c c' : C} (f : c ⟶ c') :
functorFrom_comp_fib fib G c ⟶ F.map f ⋙ functorFrom_comp_fib fib G c' :=
Functor.whiskerRight (hom f) G

include hom_id in
lemma functorFrom_comp_hom_id (c : C) : functorFrom_comp_hom fib hom G (𝟙 c)
= eqToHom (by simp [Cat.id_eq_id, Functor.id_comp]) := by
ext x
simp [hom_id, eqToHom_map, functorFrom_comp_hom]

include hom_comp in
lemma functorFrom_comp_hom_comp (c₁ c₂ c₃ : C) (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃):
functorFrom_comp_hom fib (fun {c c'} ↦ hom) G (f ≫ g)
= functorFrom_comp_hom fib (fun {c c'} ↦ hom) G f ≫
Functor.whiskerLeft (F.map f) (functorFrom_comp_hom fib hom G g) ≫
eqToHom (by simp[Cat.comp_eq_comp, Functor.map_comp, Functor.assoc]) := by
ext
simp [functorFrom_comp_hom, hom_comp, eqToHom_map]

theorem functorFrom_comp : functorFrom fib hom hom_id hom_comp ⋙ G =
functorFrom (functorFrom_comp_fib fib G) (functorFrom_comp_hom fib hom G)
(functorFrom_comp_hom_id fib hom hom_id G)
(functorFrom_comp_hom_comp fib hom hom_comp G) := by
fapply CategoryTheory.Functor.ext
· intro X
simp [functorFrom_comp_fib]
· intro x y f
simp [functorFrom_comp_hom, functorFrom_comp_fib]

variable (fib' : ∀ c, F.obj c ⥤ E) (hom' : ∀ {c c' : C} (f : c ⟶ c'), fib' c ⟶ F.map f ⋙ fib' c')
variable (hom_id' : ∀ c, hom' (𝟙 c) = eqToHom (by simp only [Functor.map_id]; rfl))
variable (hom_comp' : ∀ c₁ c₂ c₃ (f : c₁ ⟶ c₂) (g : c₂ ⟶ c₃), hom' (f ≫ g) =
hom' f ≫ Functor.whiskerLeft (F.map f) (hom' g) ≫ eqToHom (by simp only [Functor.map_comp]; rfl))

theorem functorFrom_eq_of (ef : fib = fib')
(hhom : ∀ {c c' : C} (f : c ⟶ c'), hom f ≫ eqToHom (by rw[ef]) = eqToHom (by rw[ef]) ≫ hom' f) :
functorFrom fib hom hom_id hom_comp = functorFrom fib' hom' hom_id' hom_comp' := by
subst ef
congr!
· aesop_cat

theorem functorFrom_ext {K K' : Grothendieck F ⥤ E}
(hfib : asFunctorFrom_fib K = asFunctorFrom_fib K')
(hhom : ∀ {c c' : C} (f : c ⟶ c'), asFunctorFrom_hom K f ≫ eqToHom (by rw [hfib])
= eqToHom (by rw[hfib]) ≫ asFunctorFrom_hom K' f)
: K = K' :=
calc K
_ = functorFrom (asFunctorFrom_fib K) (asFunctorFrom_hom K)
(asFunctorFrom_hom_id K) (asFunctorFrom_hom_comp K) :=
(asFunctorFrom K).symm
_ = functorFrom (asFunctorFrom_fib K') (asFunctorFrom_hom K')
(asFunctorFrom_hom_id K') (asFunctorFrom_hom_comp K') := by
apply functorFrom_eq_of
· exact hhom
· exact hfib
_ = K' := asFunctorFrom K'

theorem functorFrom_hext {K K' : Grothendieck F ⥤ E}
(hfib : asFunctorFrom_fib K = asFunctorFrom_fib K')
(hhom : ∀ {c c' : C} (f : c ⟶ c'), asFunctorFrom_hom K f ≍ asFunctorFrom_hom K' f)
: K = K' := by
fapply functorFrom_ext
· assumption
· intros
apply eq_of_heq
simp only [heq_eqToHom_comp_iff, comp_eqToHom_heq_iff]
apply hhom

end Functor.Grothendieck

section
variable {C : Type u₁} [Category.{v₁} C]
{D : Type u₂} [Category.{v₂} D]
Expand Down Expand Up @@ -600,6 +475,63 @@ end CategoryTheory.IsPullback

namespace CategoryTheory

def ofYoneda {C : Type*} [Category C] {X Y : C}
(app : ∀ {Γ}, (Γ ⟶ X) ⟶ (Γ ⟶ Y))
(naturality : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (A), app (σ ≫ A) = σ ≫ app A) :
X ⟶ Y :=
Yoneda.fullyFaithful.preimage {
app Γ := app
naturality Δ Γ σ := by ext; simp [naturality] }

@[simp]
lemma ofYoneda_comp_left {C : Type*} [Category C] {X Y : C}
(app : ∀ {Γ}, (Γ ⟶ X) ⟶ (Γ ⟶ Y))
(naturality : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (A), app (σ ≫ A) = σ ≫ app A)
{Γ} (A : Γ ⟶ X) : A ≫ ofYoneda app naturality = app A := by
apply Yoneda.fullyFaithful.map_injective
ext
simp [ofYoneda, naturality]

lemma ofYoneda_comm_sq {C : Type*} [Category C] {TL TR BL BR : C}
(left : TL ⟶ BL) (right : TR ⟶ BR)
(top : ∀ {Γ}, (Γ ⟶ TL) ⟶ (Γ ⟶ TR))
(top_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (tr), top (σ ≫ tr) = σ ≫ top tr)
(bottom : ∀ {Γ}, (Γ ⟶ BL) ⟶ (Γ ⟶ BR))
(bottom_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (br), bottom (σ ≫ br) = σ ≫ bottom br)
(comm_sq : ∀ {Γ} (ab : Γ ⟶ TL), top ab ≫ right = bottom (ab ≫ left)) :
(ofYoneda top top_comp) ≫ right = left ≫ (ofYoneda bottom bottom_comp) := by
apply Yoneda.fullyFaithful.map_injective
ext Γ ab
simp [comm_sq, ofYoneda]

open Limits in
lemma ofYoneda_isPullback {C : Type u} [Category.{v} C] {TL TR BL BR : C}
(left : TL ⟶ BL) (right : TR ⟶ BR)
(top : ∀ {Γ}, (Γ ⟶ TL) ⟶ (Γ ⟶ TR))
(top_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (tr), top (σ ≫ tr) = σ ≫ top tr)
(bot : ∀ {Γ}, (Γ ⟶ BL) ⟶ (Γ ⟶ BR))
(bot_comp : ∀ {Δ Γ} (σ : Δ ⟶ Γ) (br), bot (σ ≫ br) = σ ≫ bot br)
(comm_sq : ∀ {Γ} (ab : Γ ⟶ TL), top ab ≫ right = bot (ab ≫ left))
(lift : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), Γ ⟶ TL)
(top_lift : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), top (lift t p ht) = t)
(lift_comp_left : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p), lift t p ht ≫ left = p)
(lift_uniq : ∀ {Γ} (t : Γ ⟶ TR) (p) (ht : t ≫ right = bot p) (m : Γ ⟶ TL),
top m = t → m ≫ left = p → m = lift t p ht) :
IsPullback (ofYoneda top top_comp) left right (ofYoneda bot bot_comp) := by
let c : PullbackCone right (ofYoneda bot bot_comp) :=
PullbackCone.mk (ofYoneda top top_comp) left
(ofYoneda_comm_sq _ _ _ _ _ _ comm_sq)
apply IsPullback.of_isLimit (c := c)
apply c.isLimitAux (fun s => lift (PullbackCone.fst s) (PullbackCone.snd s) (by
simp [PullbackCone.condition s]))
· simp [c, top_lift]
· simp [c, lift_comp_left]
· intro s m h
apply lift_uniq
· specialize h (some .left)
simpa [c] using h
· specialize h (some .right)
exact h
variable {C : Type u₁} [SmallCategory C] {F G : Cᵒᵖ ⥤ Type u₁}
(app : ∀ {X : C}, (yoneda.obj X ⟶ F) → (yoneda.obj X ⟶ G))
(naturality : ∀ {X Y : C} (f : X ⟶ Y) (α : yoneda.obj Y ⟶ F),
Expand Down
Loading