84 lines
3 KiB
Text
84 lines
3 KiB
Text
/-
|
||
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
|
||
Authors: Floris van Doorn
|
||
|
||
Quotient of a reflexive relation
|
||
-/
|
||
|
||
import homotopy.circle cubical.squareover .two_quotient
|
||
|
||
open eq simple_two_quotient e_closure
|
||
|
||
namespace refl_quotient
|
||
section
|
||
|
||
parameters {A : Type} (R : A → A → Type) (ρ : Πa, R a a)
|
||
inductive refl_quotient_Q : Π⦃a : A⦄, e_closure R a a → Type :=
|
||
| Qmk {} : Π(a : A), refl_quotient_Q [ρ a]
|
||
open refl_quotient_Q
|
||
local abbreviation Q := refl_quotient_Q
|
||
|
||
definition refl_quotient : Type := simple_two_quotient R Q
|
||
|
||
definition rclass_of (a : A) : refl_quotient := incl0 R Q a
|
||
definition req_of_rel ⦃a a' : A⦄ (r : R a a') : rclass_of a = rclass_of a' :=
|
||
incl1 R Q r
|
||
|
||
definition pρ (a : A) : req_of_rel (ρ a) = idp :=
|
||
incl2 R Q (Qmk a)
|
||
|
||
protected definition rec {P : refl_quotient → Type} (Pc : Π(a : A), P (rclass_of a))
|
||
(Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a =[req_of_rel H] Pc a')
|
||
(Pr : Π(a : A), change_path (pρ a) (Pp (ρ a)) = idpo) (x : refl_quotient) : P x :=
|
||
begin
|
||
induction x,
|
||
exact Pc a,
|
||
exact Pp s,
|
||
induction q, apply Pr
|
||
end
|
||
|
||
protected definition rec_on [reducible] {P : refl_quotient → Type} (x : refl_quotient)
|
||
(Pc : Π(a : A), P (rclass_of a)) (Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a =[req_of_rel H] Pc a')
|
||
(Pr : Π(a : A), change_path (pρ a) (Pp (ρ a)) = idpo) : P x :=
|
||
rec Pc Pp Pr x
|
||
|
||
definition rec_req_of_rel {P : Type} {P : refl_quotient → Type} (Pc : Π(a : A), P (rclass_of a))
|
||
(Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a =[req_of_rel H] Pc a')
|
||
(Pr : Π(a : A), change_path (pρ a) (Pp (ρ a)) = idpo) ⦃a a' : A⦄ (r : R a a')
|
||
: apdo (rec Pc Pp Pr) (req_of_rel r) = Pp r :=
|
||
!rec_incl1
|
||
|
||
protected definition elim {P : Type} (Pc : Π(a : A), P)
|
||
(Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a = Pc a') (Pr : Π(a : A), Pp (ρ a) = idp)
|
||
(x : refl_quotient) : P :=
|
||
begin
|
||
induction x,
|
||
exact Pc a,
|
||
exact Pp s,
|
||
induction q, apply Pr
|
||
end
|
||
|
||
protected definition elim_on [reducible] {P : Type} (x : refl_quotient) (Pc : Π(a : A), P)
|
||
(Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a = Pc a') (Pr : Π(a : A), Pp (ρ a) = idp) : P :=
|
||
elim Pc Pp Pr x
|
||
|
||
definition elim_req_of_rel {P : Type} {Pc : Π(a : A), P}
|
||
{Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a = Pc a'} (Pr : Π(a : A), Pp (ρ a) = idp)
|
||
⦃a a' : A⦄ (r : R a a') : ap (elim Pc Pp Pr) (req_of_rel r) = Pp r :=
|
||
!elim_incl1
|
||
|
||
theorem elim_pρ {P : Type} (Pc : Π(a : A), P)
|
||
(Pp : Π⦃a a' : A⦄ (H : R a a'), Pc a = Pc a') (Pr : Π(a : A), Pp (ρ a) = idp) (a : A)
|
||
: square (ap02 (elim Pc Pp Pr) (pρ a)) (Pr a) (elim_req_of_rel Pr (ρ a)) idp :=
|
||
!elim_incl2
|
||
|
||
end
|
||
end refl_quotient
|
||
|
||
attribute refl_quotient.rclass_of [constructor]
|
||
attribute refl_quotient.rec refl_quotient.elim [unfold 8] [recursor 8]
|
||
--attribute refl_quotient.elim_type [unfold 9]
|
||
attribute refl_quotient.rec_on refl_quotient.elim_on [unfold 5]
|
||
--attribute refl_quotient.elim_type_on [unfold 6]
|