lean2/hott/init/axioms/ua.hlean

42 lines
1.1 KiB
Text
Raw Normal View History

2014-12-12 04:14:53 +00:00
-- Copyright (c) 2014 Jakob von Raumer. All rights reserved.
-- Released under Apache 2.0 license as described in the file LICENSE.
-- Author: Jakob von Raumer
-- Ported from Coq HoTT
2014-12-12 18:17:50 +00:00
prelude
import ..path ..equiv
open eq equiv is_equiv
2014-12-12 04:14:53 +00:00
--Ensure that the types compared are in the same universe
section
universe variable l
variables {A B : Type.{l}}
definition is_equiv_tr_of_eq (H : A = B) : is_equiv (transport (λX:Type, X) H) :=
(@is_equiv_tr Type (λX, X) A B H)
2014-12-12 04:14:53 +00:00
definition equiv_of_eq (H : A = B) : A ≃ B :=
equiv.mk _ (is_equiv_tr_of_eq H)
2014-12-12 04:14:53 +00:00
end
axiom univalence (A B : Type) : is_equiv (@equiv_of_eq A B)
2014-12-12 04:14:53 +00:00
attribute univalence [instance]
2014-12-12 04:14:53 +00:00
-- This is the version of univalence axiom we will probably use most often
definition ua {A B : Type} : A ≃ B → A = B :=
(@equiv_of_eq A B)⁻¹
2014-12-12 04:14:53 +00:00
-- One consequence of UA is that we can transport along equivalencies of types
namespace equiv
2014-12-12 04:14:53 +00:00
universe variable l
protected definition transport_of_equiv (P : Type → Type) {A B : Type.{l}} (H : A ≃ B)
: P A → P B :=
eq.transport P (ua H)
2014-12-12 04:14:53 +00:00
-- We can use this for calculation evironments
calc_subst transport_of_equiv
2014-12-12 04:14:53 +00:00
end equiv