open import Cat.Instances.Slice.Presheaf
open import Cat.Diagram.Everything
open import Cat.Functor.Everything
open import Cat.Instances.Elements
open import Cat.Instances.Functor
open import Cat.Instances.Comma
open import Cat.Instances.Slice
open import Cat.Prelude
open import Topoi.Base
import Cat.Reasoning
module wip.slice where
open Functor
open /-Obj
open /-Hom
open _=>_
open _⊣_
-- module _ {o h : _} (C : Precategory o h) where
--   private module C = Cat.Reasoning C
--   open C.HLevel-instance
--   ev : ∀ {ℓ} (c : C.Ob) → Functor (PSh ℓ C) (Sets ℓ)
--   F₀ (ev c) x = F₀ x c
--   F₁ (ev c) x x₁ = η x c x₁
--   F-id (ev c) = refl
--   F-∘ (ev c) f g = refl
-- module
--   _ {o o′ κ} {C : Precategory o κ} {D : Precategory o′ κ}
--     (ct : Topos C κ) (dt : Topos D κ)
--     (F : Functor D C)
--     (cont : is-continuous {oshape = κ} {κ} F)
--     where
--   open Initial
--   open Terminal
--   open Cone
--   open Cone-hom
--   open ↓Hom
--   open ↓Obj
--   private
--     module C = Cat.Reasoning C
--     module D = Cat.Reasoning D
--     module ct = Topos ct
--     module dt = Topos dt
--     module Cs = Cat.Reasoning (ct.site)
--     module Ds = Cat.Reasoning (dt.site)
--     module Pc = Cat.Reasoning (PSh κ (ct.site))
--     module Pd = Cat.Reasoning (PSh κ (dt.site))
--     module F = Functor F
--     abstract
--       dlim : is-complete κ κ D
--       dlim = Topos-is-complete dt
--   univ : ∀ o → Initial (o ↙ F)
--   univ o = init where
--     test′ : Precategory κ κ
--     test′ = ct.ι.₀ o ↙ (ct.ι F∘ (F F∘ (dt.L F∘ よ dt.site)))
--     lc : Limit _
--     lc = dlim {D = test′} ((dt.L F∘ よ dt.site) F∘ Cod _ _)
--     clim : _
--     clim = cont (lc .top) (lc .has⊤)
--     init : Initial (o ↙ F)
--     init .bot .↓Obj.x = tt
--     init .bot .↓Obj.y = lc .top .apex
--     init .bot .↓Obj.map = clim cone′ .centre .hom
--       where
--         cone′ : Cone _
--         cone′ .apex = o
--         cone′ .ψ ob = equiv→inverse ct.has-ff (ob .map)
--         cone′ .commutes f = {!   !}
--     init .has⊥ = {!   !}
-- module _ {o κ} {C : Precategory o κ} (ct : Topos C κ) where
--   private
--     module C = Cat.Reasoning C
--     module ct = Topos ct
--     module Site = Cat.Reasoning (ct.site)
--     module PSh = Cat.Reasoning (PSh κ (ct.site))
--     module ι = Functor (ct.ι)
--     module L = Functor (ct.L)
--     open _⊣_ (ct.L⊣ι)
--   open Functor
--   open _=>_
--   open Terminal
--   open Initial
--   open Cocone
--   generator : C.Ob
--   generator = Topos-is-cocomplete ct {D = ct.site} (ct.L F∘ よ ct.site) .bot .coapex
--   abstract
--     T-fc : Finitely-complete C
--     T-fc = is-complete→finitely C (Topos-is-complete ct)
--   open Finitely-complete T-fc
--   よ-univ : ∀ o → Initial (o ↙ よ C)
--   よ-univ o = init where
--     ob : Precategory.Ob (o ↙ よ C)
--     ob .↓Obj.x = tt
--     ob .↓Obj.y = {!   !}
--     ob .↓Obj.map = {!   !}
--     init : Initial (o ↙ よ C)
--     init .bot = ob
--     init .has⊥ = {!   !}