2015-04-25 04:20:59 +00:00
|
|
|
/-
|
|
|
|
Copyright (c) 2015 Jakob von Raumer. All rights reserved.
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
Authors: Floris van Doorn, Jakob von Raumer
|
|
|
|
-/
|
|
|
|
|
|
|
|
import .precategory .functor
|
|
|
|
|
|
|
|
open is_trunc eq
|
|
|
|
|
|
|
|
namespace category
|
|
|
|
structure strict_precategory [class] (ob : Type) extends precategory ob :=
|
|
|
|
mk' :: (is_hset_ob : is_hset ob)
|
|
|
|
|
|
|
|
attribute strict_precategory.is_hset_ob [instance]
|
|
|
|
|
|
|
|
definition strict_precategory.mk [reducible] {ob : Type} (C : precategory ob)
|
|
|
|
(H : is_hset ob) : strict_precategory ob :=
|
|
|
|
precategory.rec_on C strict_precategory.mk' H
|
|
|
|
|
|
|
|
structure Strict_precategory : Type :=
|
|
|
|
(carrier : Type)
|
|
|
|
(struct : strict_precategory carrier)
|
|
|
|
|
|
|
|
attribute Strict_precategory.struct [instance] [coercion]
|
|
|
|
|
|
|
|
definition Strict_precategory.to_Precategory [coercion] [reducible]
|
|
|
|
(C : Strict_precategory) : Precategory :=
|
|
|
|
Precategory.mk (Strict_precategory.carrier C) C
|
|
|
|
|
|
|
|
open functor
|
|
|
|
|
2015-10-02 23:54:27 +00:00
|
|
|
-- TODO: move to constructions.cat?
|
|
|
|
definition precategory_strict_precategory [constructor] : precategory Strict_precategory :=
|
|
|
|
precategory.mk (λ A B, A ⇒ B)
|
|
|
|
(λ A B C G F, G ∘f F)
|
|
|
|
(λ A, 1)
|
|
|
|
(λ A B C D, functor.assoc)
|
|
|
|
(λ A B, functor.id_left)
|
|
|
|
(λ A B, functor.id_right)
|
2015-04-25 04:20:59 +00:00
|
|
|
|
2015-10-02 23:54:27 +00:00
|
|
|
definition Precategory_strict_precategory [constructor] := precategory.Mk precategory_strict_precategory
|
2015-04-25 04:20:59 +00:00
|
|
|
|
|
|
|
namespace ops
|
2015-10-02 23:54:27 +00:00
|
|
|
abbreviation Cat := Precategory_strict_precategory
|
2015-04-25 04:20:59 +00:00
|
|
|
end ops
|
|
|
|
|
|
|
|
end category
|
|
|
|
|
|
|
|
/-section
|
|
|
|
open decidable unit empty
|
|
|
|
variables {A : Type} [H : decidable_eq A]
|
|
|
|
include H
|
|
|
|
definition set_hom (a b : A) := decidable.rec_on (H a b) (λh, unit) (λh, empty)
|
|
|
|
theorem set_hom_subsingleton [instance] (a b : A) : subsingleton (set_hom a b) := _
|
|
|
|
definition set_compose {a b c : A} (g : set_hom b c) (f : set_hom a b) : set_hom a c :=
|
|
|
|
decidable.rec_on
|
|
|
|
(H b c)
|
|
|
|
(λ Hbc g, decidable.rec_on
|
|
|
|
(H a b)
|
|
|
|
(λ Hab f, rec_on_true (trans Hab Hbc) ⋆)
|
|
|
|
(λh f, empty.rec _ f) f)
|
|
|
|
(λh (g : empty), empty.rec _ g) g
|
|
|
|
omit H
|
|
|
|
definition discrete_precategory (A : Type) [H : decidable_eq A] : precategory A :=
|
|
|
|
mk (λa b, set_hom a b)
|
|
|
|
(λ a b c g f, set_compose g f)
|
|
|
|
(λ a, decidable.rec_on_true rfl ⋆)
|
|
|
|
(λ a b c d h g f, @subsingleton.elim (set_hom a d) _ _ _)
|
|
|
|
(λ a b f, @subsingleton.elim (set_hom a b) _ _ _)
|
|
|
|
(λ a b f, @subsingleton.elim (set_hom a b) _ _ _)
|
|
|
|
definition Discrete_category (A : Type) [H : decidable_eq A] := Mk (discrete_category A)
|
|
|
|
end
|
|
|
|
section
|
|
|
|
open unit bool
|
|
|
|
definition category_one := discrete_category unit
|
|
|
|
definition Category_one := Mk category_one
|
|
|
|
definition category_two := discrete_category bool
|
|
|
|
definition Category_two := Mk category_two
|
|
|
|
end-/
|