lean2/hott/types/pointed.hlean
2015-05-18 15:59:55 -07:00

78 lines
2.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2014 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Module: types.pointed
Authors: Jakob von Raumer, Floris van Doorn
Ported from Coq HoTT
-/
open core is_trunc
structure pointed [class] (A : Type) :=
(point : A)
namespace pointed
variables {A B : Type}
definition pt [H : pointed A] := point A
-- Any contractible type is pointed
definition pointed_of_is_contr [instance] (A : Type) [H : is_contr A] : pointed A :=
pointed.mk !center
-- A pi type with a pointed target is pointed
definition pointed_pi [instance] (P : A → Type) [H : Πx, pointed (P x)]
: pointed (Πx, P x) :=
pointed.mk (λx, pt)
-- A sigma type of pointed components is pointed
definition pointed_sigma [instance] (P : A → Type) [G : pointed A]
[H : pointed (P pt)] : pointed (Σx, P x) :=
pointed.mk ⟨pt,pt⟩
definition pointed_prod [instance] (A B : Type) [H1 : pointed A] [H2 : pointed B]
: pointed (A × B) :=
pointed.mk (pt,pt)
definition pointed_loop [instance] (a : A) : pointed (a = a) :=
pointed.mk idp
definition pointed_fun_closed (f : A → B) [H : pointed A] : pointed B :=
pointed.mk (f pt)
end pointed
structure Pointed :=
{carrier : Type}
(Point : carrier)
open pointed Pointed
namespace Pointed
attribute carrier [coercion]
protected definition mk' (A : Type) [H : pointed A] : Pointed := Pointed.mk (point A)
definition pointed_carrier [instance] (A : Pointed) : pointed (carrier A) :=
pointed.mk (Point A)
definition Loop_space [reducible] (A : Pointed) : Pointed :=
Pointed.mk' (point A = point A)
definition Iterated_loop_space (A : Pointed) (n : ) : Pointed :=
nat.rec_on n A (λn X, Loop_space X)
prefix `Ω`:95 := Loop_space
notation `Ω[`:95 n:0 `]`:0 A:95 := Iterated_loop_space A n
end Pointed
namespace pointed
export Pointed (hiding cases_on destruct mk)
abbreviation Cases_on := @Pointed.cases_on
abbreviation Destruct := @Pointed.destruct
abbreviation Mk := @Pointed.mk
definition iterated_loop_space (A : Type) [H : pointed A] (n : ) : Type :=
carrier (Iterated_loop_space (Pointed.mk' A) n)
end pointed