f983724cf6
We move the basic notions of pointed types into init.pointed, to avoid cycles in the import graph. Also adds pointed versions of pi and sigma, with corresponding notation
55 lines
1.5 KiB
Text
55 lines
1.5 KiB
Text
/-
|
|
Copyright (c) 2016 Jakob von Raumer. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Jakob von Raumer, Floris van Doorn
|
|
|
|
Pointed Pushouts
|
|
-/
|
|
import .pushout types.pointed
|
|
|
|
open eq pushout
|
|
|
|
namespace pointed
|
|
|
|
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
|
|
|
|
open pointed pType
|
|
|
|
namespace pushout
|
|
section
|
|
parameters {TL BL TR : Type*} (f : TL →* BL) (g : TL →* TR)
|
|
|
|
definition ppushout [constructor] : Type* :=
|
|
pointed.mk' (pushout f g)
|
|
|
|
parameters {f g}
|
|
definition pinl [constructor] : BL →* ppushout :=
|
|
pmap.mk inl idp
|
|
|
|
definition pinr [constructor] : TR →* ppushout :=
|
|
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
|
|
|
|
definition prec {P : ppushout → 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 [constructor] : ppushout f g ≃* ppushout g f :=
|
|
begin
|
|
fapply pequiv_of_equiv,
|
|
{ apply pushout.symm},
|
|
{ exact ap inr (respect_pt f)⁻¹ ⬝ !glue⁻¹ ⬝ ap inl (respect_pt g)}
|
|
end
|
|
|
|
end
|
|
end pushout
|