(* -*- mode: coq; coq-prog-args: ("-indices-matter"); mode: visual-line -*- *)
Set Universe Polymorphism.
Set Primitive Projections.
Close Scope nat_scope.
Record prod (A B : Type) := pair { fst : A ; snd : B }.
Arguments pair {A B} _ _.
Arguments fst {A B} _ / .
Arguments snd {A B} _ / .
Notation "x * y" := (prod x y) : type_scope.
Notation "( x , y , .. , z )" := (pair .. (pair x y) .. z) : core_scope.
Unset Strict Universe Declaration.
Definition Type1 := Eval hnf in let gt := (Set : Type@{i}) in Type@{i}.
Definition Type2 := Eval hnf in let gt := (Type1 : Type@{i}) in Type@{i}.
Inductive paths {A : Type} (a : A) : A -> Type :=
idpath : paths a a.
Arguments idpath {A a} , [A] a.
Notation "x = y" := (@paths _ x y) : type_scope.
Definition concat {A} {x y z : A} (p : x = y) (q : y = z) : x = z
:= match p, q with idpath, idpath => idpath end.
Definition path_prod {A B : Type} (z z' : A * B)
: (fst z = fst z') -> (snd z = snd z') -> (z = z').
Proof.
destruct z, z'; simpl; intros [] []; reflexivity.
Defined.
Module Type TypeM.
Parameter m : Type2.
End TypeM.
Module ProdM (XM : TypeM) (YM : TypeM) <: TypeM.
Definition m := XM.m * YM.m.
End ProdM.
Module Type FunctionM (XM YM : TypeM).
Parameter m : XM.m -> YM.m.
End FunctionM.
Module IdmapM (XM : TypeM) <: FunctionM XM XM.
Definition m := (fun x => x) : XM.m -> XM.m.
End IdmapM.
Module Type HomotopyM (XM YM : TypeM) (fM gM : FunctionM XM YM).
Parameter m : forall x, fM.m x = gM.m x.
End HomotopyM.
Module ComposeM (XM YM ZM : TypeM)
(gM : FunctionM YM ZM) (fM : FunctionM XM YM)
<: FunctionM XM ZM.
Definition m := (fun x => gM.m (fM.m x)).
End ComposeM.
Module Type CorecM (YM ZM : TypeM) (fM : FunctionM YM ZM)
(XM : TypeM) (gM : FunctionM XM ZM).
Parameter m : XM.m -> YM.m.
Parameter m_beta : forall x, fM.m (m x) = gM.m x.
End CorecM.
Module Type CoindpathsM (YM ZM : TypeM) (fM : FunctionM YM ZM)
(XM : TypeM) (hM kM : FunctionM XM YM).
Module fhM := ComposeM XM YM ZM fM hM.
Module fkM := ComposeM XM YM ZM fM kM.
Declare Module mM (pM : HomotopyM XM ZM fhM fkM)
: HomotopyM XM YM hM kM.
End CoindpathsM.
Module Type Comodality (XM : TypeM).
Parameter m : Type2.
Module mM <: TypeM.
Definition m := m.
End mM.
Parameter from : m -> XM.m.
Module fromM <: FunctionM mM XM.
Definition m := from.
End fromM.
Declare Module corecM : CorecM mM XM fromM.
Declare Module coindpathsM : CoindpathsM mM XM fromM.
End Comodality.
Module Comodality_Theory (F : Comodality).
Module F_functor_M (XM YM : TypeM) (fM : FunctionM XM YM)
(FXM : Comodality XM) (FYM : Comodality YM).
Module f_o_from_M <: FunctionM FXM.mM YM.
Definition m := fun x => fM.m (FXM.from x).
End f_o_from_M.
Module mM := FYM.corecM FXM.mM f_o_from_M.
Definition m := mM.m.
End F_functor_M.
Module F_prod_cmp_M (XM YM : TypeM)
(FXM : Comodality XM) (FYM : Comodality YM).
Module PM := ProdM XM YM.
Module PFM := ProdM FXM FYM.
Module fstM <: FunctionM PM XM.
Definition m := @fst XM.m YM.m.
End fstM.
Module sndM <: FunctionM PM YM.
Definition m := @snd XM.m YM.m.
End sndM.
Module FPM := F PM.
Module FfstM := F_functor_M PM XM fstM FPM FXM.
Module FsndM := F_functor_M PM YM sndM FPM FYM.
Definition m : FPM.m -> PFM.m
:= fun z => (FfstM.m z , FsndM.m z).
End F_prod_cmp_M.
Module isequiv_F_prod_cmp_M
(XM YM : TypeM)
(FXM : Comodality XM) (FYM : Comodality YM).
(** The comparison map *)
Module cmpM := F_prod_cmp_M XM YM FXM FYM.
Module FPM := cmpM.FPM.
(** We construct an inverse to it using corecursion. *)
Module prod_from_M <: FunctionM cmpM.PFM cmpM.PM.
Definition m : cmpM.PFM.m -> cmpM.PM.m
:= fun z => ( FXM.from (fst z) , FYM.from (snd z) ).
End prod_from_M.
Module cmpinvM <: FunctionM cmpM.PFM FPM
:= FPM.corecM cmpM.PFM prod_from_M.
(** We prove the first homotopy *)
Module cmpinv_o_cmp_M <: FunctionM FPM FPM
:= ComposeM FPM cmpM.PFM FPM cmpinvM cmpM.
Module idmap_FPM <: FunctionM FPM FPM
:= IdmapM FPM.
Module cip_FPM := FPM.coindpathsM FPM cmpinv_o_cmp_M idmap_FPM.
Module cip_FPHM <: HomotopyM FPM cmpM.PM cip_FPM.fhM cip_FPM.fkM.
Definition m : forall x, cip_FPM.fhM.m x = cip_FPM.fkM.m x.
Proof.
intros x.
refine (concat (cmpinvM.m_beta (cmpM.m x)) _).
apply path_prod@{i i i}; simpl.
- exact (cmpM.FfstM.mM.m_beta x).
- exact (cmpM.FsndM.mM.m_beta x).
Defined.
End cip_FPHM.
End isequiv_F_prod_cmp_M.
End Comodality_Theory.
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.
|