lean2/hott/algebra/category/basic.hlean

74 lines
2.3 KiB
Text
Raw Normal View History

/-
Copyright (c) 2014 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
2014-12-12 04:14:53 +00:00
Module: algebra.category.basic
Author: Jakob von Raumer
-/
2014-12-12 04:14:53 +00:00
import algebra.precategory.iso
2014-12-12 04:14:53 +00:00
open morphism is_equiv eq is_trunc
-- A category is a precategory extended by a witness
-- that the function from paths to isomorphisms,
2014-12-12 04:14:53 +00:00
-- is an equivalecnce.
namespace category
2014-12-12 04:14:53 +00:00
structure category [class] (ob : Type) extends parent : precategory ob :=
(iso_of_path_equiv : Π (a b : ob), is_equiv (@iso_of_path ob parent a b))
attribute category [multiple-instances]
abbreviation iso_of_path_equiv := @category.iso_of_path_equiv
definition category.mk' [reducible] (ob : Type) (C : precategory ob)
(H : Π (a b : ob), is_equiv (@iso_of_path ob C a b)) : category ob :=
precategory.rec_on C category.mk H
section basic
variables {ob : Type} [C : category ob]
2014-12-12 04:14:53 +00:00
include C
-- Make iso_of_path_equiv a class instance
-- TODO: Unsafe class instance?
attribute iso_of_path_equiv [instance]
2014-12-12 04:14:53 +00:00
definition path_of_iso (a b : ob) : a ≅ b → a = b :=
2014-12-12 04:14:53 +00:00
iso_of_path⁻¹
set_option apply.class_instance false -- disable class instance resolution in the apply tactic
definition ob_1_type : is_trunc 1 ob :=
2014-12-12 04:14:53 +00:00
begin
apply is_trunc_succ_intro, intros (a, b),
fapply is_trunc_is_equiv_closed,
2014-12-12 04:14:53 +00:00
exact (@path_of_iso _ _ a b),
apply is_equiv_inv,
2014-12-12 04:14:53 +00:00
apply is_hset_iso,
end
end basic
2014-12-12 04:14:53 +00:00
-- Bundled version of categories
-- we don't use Category.carrier explicitly, but rather use Precategory.carrier (to_Precategory C)
structure Category : Type :=
(carrier : Type)
(struct : category carrier)
2014-12-12 04:14:53 +00:00
attribute Category.struct [instance] [coercion]
-- definition objects [reducible] := Category.objects
-- definition category_instance [instance] [coercion] [reducible] := Category.category_instance
definition Category.to_Precategory [coercion] [reducible] (C : Category) : Precategory :=
Precategory.mk (Category.carrier C) C
definition category.Mk [reducible] := Category.mk
definition category.MK [reducible] (C : Precategory)
(H : Π (a b : C), is_equiv (@iso_of_path C C a b)) : Category :=
Category.mk C (category.mk' C C H)
definition Category.eta (C : Category) : Category.mk C C = C :=
Category.rec (λob c, idp) C
end category