2016-01-19 21:16:40 +00:00
|
|
|
/-
|
|
|
|
Copyright (c) 2016 Jakob von Raumer. All rights reserved.
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
2016-02-15 19:40:25 +00:00
|
|
|
Authors: Jakob von Raumer, Floris van Doorn
|
2016-01-19 21:16:40 +00:00
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
Pointed Pushouts
|
2016-01-19 21:16:40 +00:00
|
|
|
-/
|
2016-03-28 20:33:33 +00:00
|
|
|
import .pushout types.pointed
|
2016-01-19 21:16:40 +00:00
|
|
|
|
|
|
|
open eq pushout
|
|
|
|
|
|
|
|
namespace pointed
|
2016-02-15 19:40:25 +00:00
|
|
|
|
2016-01-19 21:16:40 +00:00
|
|
|
definition pointed_pushout [instance] [constructor] {TL BL TR : Type} [HTL : pointed TL]
|
|
|
|
[HBL : pointed BL] [HTR : pointed TR] (f : TL → BL) (g : TL → TR) : pointed (pushout f g) :=
|
|
|
|
pointed.mk (inl (point _))
|
|
|
|
|
|
|
|
end pointed
|
|
|
|
|
2016-02-15 21:05:31 +00:00
|
|
|
open pointed pType
|
2016-01-19 21:16:40 +00:00
|
|
|
|
|
|
|
namespace pushout
|
|
|
|
section
|
|
|
|
parameters {TL BL TR : Type*} (f : TL →* BL) (g : TL →* TR)
|
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
definition ppushout [constructor] : Type* :=
|
2016-01-19 21:16:40 +00:00
|
|
|
pointed.mk' (pushout f g)
|
2016-02-15 19:40:25 +00:00
|
|
|
|
2016-01-19 21:16:40 +00:00
|
|
|
parameters {f g}
|
2016-02-15 23:23:28 +00:00
|
|
|
definition pinl [constructor] : BL →* ppushout :=
|
2016-01-19 21:16:40 +00:00
|
|
|
pmap.mk inl idp
|
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
definition pinr [constructor] : TR →* ppushout :=
|
2016-01-19 21:16:40 +00:00
|
|
|
pmap.mk inr ((ap inr (respect_pt g))⁻¹ ⬝ !glue⁻¹ ⬝ (ap inl (respect_pt f)))
|
|
|
|
|
|
|
|
definition pglue (x : TL) : pinl (f x) = pinr (g x) := -- TODO do we need this?
|
|
|
|
!glue
|
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
definition prec {P : ppushout → Type} (Pinl : Π x, P (pinl x)) (Pinr : Π x, P (pinr x))
|
2016-01-19 21:16:40 +00:00
|
|
|
(H : Π x, Pinl (f x) =[pglue x] Pinr (g x)) : (Π y, P y) :=
|
|
|
|
pushout.rec Pinl Pinr H
|
2016-01-22 17:06:41 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
section
|
|
|
|
variables {TL BL TR : Type*} (f : TL →* BL) (g : TL →* TR)
|
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
protected definition psymm [constructor] : ppushout f g ≃* ppushout g f :=
|
2016-01-22 17:06:41 +00:00
|
|
|
begin
|
2016-02-15 19:40:25 +00:00
|
|
|
fapply pequiv_of_equiv,
|
|
|
|
{ apply pushout.symm},
|
|
|
|
{ exact ap inr (respect_pt f)⁻¹ ⬝ !glue⁻¹ ⬝ ap inl (respect_pt g)}
|
2016-01-22 17:06:41 +00:00
|
|
|
end
|
2016-01-19 21:16:40 +00:00
|
|
|
|
|
|
|
end
|
|
|
|
end pushout
|