Added substitution lemma for equivalence calculations

This commit is contained in:
Jakob von Raumer 2014-11-06 18:55:44 -05:00
parent fa9cbb1f6a
commit 7dbd7b31f6

View file

@ -5,6 +5,7 @@
import hott.path hott.equiv import hott.path hott.equiv
open path Equiv open path Equiv
--Ensure that the types compared are in the same universe
universe l universe l
variables (A B : Type.{l}) variables (A B : Type.{l})
@ -16,7 +17,21 @@ definition equiv_path (H : A ≈ B) : A ≃ B :=
axiom ua_equiv (A B : Type) : IsEquiv (equiv_path A B) axiom ua_equiv (A B : Type) : IsEquiv (equiv_path A B)
-- Make the Equivalence given by the axiom an instance
definition ua_inst [instance] {A B : Type} := (@ua_equiv A B) definition ua_inst [instance] {A B : Type} := (@ua_equiv A B)
definition ua {A B : Type} (H : A ≃ B) : A ≈ B := -- This is the version of univalence axiom we will probably use most often
IsEquiv.inv (@equiv_path A B) H definition ua {A B : Type} : A ≃ B → A ≈ B :=
IsEquiv.inv (@equiv_path A B)
-- One consequence of UA is that we can transport along equivalencies of types
namespace Equiv
protected definition subst (P : Type → Type) {A B : Type.{l}} (H : A ≃ B)
: P A → P B :=
path.transport P (ua H)
-- We can use this for calculation evironments
calc_subst subst
end Equiv