2014-08-12 00:35:25 +00:00
|
|
|
-- Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
|
|
|
-- Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
-- Author: Jeremy Avigad
|
|
|
|
-- Ported from Coq HoTT
|
|
|
|
|
|
|
|
import .path
|
|
|
|
|
|
|
|
|
|
|
|
-- Truncation levels
|
|
|
|
-- -----------------
|
|
|
|
|
|
|
|
inductive Contr (A : Type) : Type :=
|
2014-08-22 22:46:10 +00:00
|
|
|
Contr_mk : Π
|
2014-08-12 00:35:25 +00:00
|
|
|
(center : A)
|
|
|
|
(contr : Πy : A, center ≈ y),
|
|
|
|
Contr A
|
|
|
|
|
2014-09-04 22:03:59 +00:00
|
|
|
definition center {A : Type} (C : Contr A) : A := Contr.rec (λcenter contr, center) C
|
2014-08-12 00:35:25 +00:00
|
|
|
|
|
|
|
definition contr {A : Type} (C : Contr A) : Πy : A, center C ≈ y :=
|
2014-09-04 22:03:59 +00:00
|
|
|
Contr.rec (λcenter contr, contr) C
|
2014-08-12 00:35:25 +00:00
|
|
|
|
|
|
|
inductive trunc_index : Type :=
|
2014-08-22 22:46:10 +00:00
|
|
|
minus_two : trunc_index,
|
|
|
|
trunc_S : trunc_index → trunc_index
|
2014-08-12 00:35:25 +00:00
|
|
|
|
|
|
|
-- TODO: add coercions to / from nat
|
|
|
|
|
|
|
|
-- TODO: note in the Coq version, there is an internal version
|
|
|
|
definition IsTrunc (n : trunc_index) : Type → Type :=
|
2014-09-04 22:03:59 +00:00
|
|
|
trunc_index.rec (λA, Contr A) (λn trunc_n A, (Π(x y : A), trunc_n (x ≈ y))) n
|
2014-08-12 00:35:25 +00:00
|
|
|
|
|
|
|
-- TODO: in the Coq version, this is notation
|
2014-09-04 23:36:06 +00:00
|
|
|
abbreviation minus_one := trunc_index.trunc_S trunc_index.minus_two
|
2014-08-12 00:35:25 +00:00
|
|
|
abbreviation IsHProp := IsTrunc minus_one
|
2014-09-04 23:36:06 +00:00
|
|
|
abbreviation IsHSet := IsTrunc (trunc_index.trunc_S minus_one)
|
2014-08-12 00:35:25 +00:00
|
|
|
|
2014-09-04 22:03:59 +00:00
|
|
|
prefix `!`:75 := center
|