feat(hott): add symmetry of pushouts and pointed pushouts

This commit is contained in:
Jakob von Raumer 2016-01-22 17:06:41 +00:00 committed by Leonardo de Moura
parent d8d3b0c0b2
commit aa5e188179
3 changed files with 44 additions and 1 deletions

View file

@ -17,7 +17,7 @@ namespace pointed
end pointed
open pointed
open pointed Pointed
namespace pushout
section
@ -39,6 +39,18 @@ namespace pushout
definition prec {P : Pushout → Type} (Pinl : Π x, P (pinl x)) (Pinr : Π x, P (pinr x))
(H : Π x, Pinl (f x) =[pglue x] Pinr (g x)) : (Π y, P y) :=
pushout.rec Pinl Pinr H
end
section
variables {TL BL TR : Type*} (f : TL →* BL) (g : TL →* TR)
protected definition psymm : Pushout f g ≃* Pushout g f :=
begin
fapply pequiv.mk,
{ fapply pmap.mk, exact !pushout.transpose,
exact ap inr (respect_pt f)⁻¹ ⬝ !glue⁻¹ ⬝ ap inl (respect_pt g) },
{ esimp, apply equiv.to_is_equiv !pushout.symm },
end
end
end pushout

View file

@ -200,4 +200,31 @@ namespace pushout
end
end
-- Commutativity of pushouts
section
variables {TL BL TR : Type} (f : TL → BL) (g : TL → TR)
protected definition transpose [constructor] : pushout f g → pushout g f :=
begin
intro x, induction x, apply inr a, apply inl a, apply !glue⁻¹
end
--TODO prove without krewrite?
protected definition transpose_involutive (x : pushout f g) :
pushout.transpose g f (pushout.transpose f g x) = x :=
begin
induction x, apply idp, apply idp,
apply eq_pathover, refine _ ⬝hp !ap_id⁻¹,
refine !(ap_compose (pushout.transpose _ _)) ⬝ph _, esimp[pushout.transpose],
krewrite [elim_glue, ap_inv, elim_glue, inv_inv], apply hrfl
end
protected definition symm : pushout f g ≃ pushout g f :=
begin
fapply equiv.MK, do 2 exact !pushout.transpose,
do 2 (intro x; apply pushout.transpose_involutive),
end
end
end pushout

View file

@ -353,6 +353,10 @@ namespace pointed
attribute pequiv.to_pmap [coercion]
attribute pequiv.is_equiv_to_pmap [instance]
definition pequiv.mk' (to_pmap : A →* B) [is_equiv_to_pmap : is_equiv to_pmap] :
pequiv A B :=
pequiv.mk to_pmap is_equiv_to_pmap
definition equiv_of_pequiv [constructor] (f : A ≃* B) : A ≃ B :=
equiv.mk f _