2015-06-26 02:27:03 +00:00
|
|
|
|
/-
|
|
|
|
|
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
|
|
|
|
|
-/
|
|
|
|
|
|
2015-09-25 16:39:45 +00:00
|
|
|
|
import homotopy.circle cubical.squareover .two_quotient
|
2015-06-26 02:27:03 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2015-11-22 08:08:31 +00:00
|
|
|
|
definition refl_quotient : Type := simple_two_quotient R Q
|
2015-06-26 02:27:03 +00:00
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
2015-11-22 08:08:31 +00:00
|
|
|
|
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')
|
2016-03-19 15:25:08 +00:00
|
|
|
|
: apd (rec Pc Pp Pr) (req_of_rel r) = Pp r :=
|
2015-11-22 08:08:31 +00:00
|
|
|
|
!rec_incl1
|
2015-06-26 02:27:03 +00:00
|
|
|
|
|
|
|
|
|
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]
|
2015-11-22 08:08:31 +00:00
|
|
|
|
attribute refl_quotient.rec refl_quotient.elim [unfold 8] [recursor 8]
|
2015-07-07 23:37:06 +00:00
|
|
|
|
--attribute refl_quotient.elim_type [unfold 9]
|
2015-11-22 08:08:31 +00:00
|
|
|
|
attribute refl_quotient.rec_on refl_quotient.elim_on [unfold 5]
|
2015-07-07 23:37:06 +00:00
|
|
|
|
--attribute refl_quotient.elim_type_on [unfold 6]
|