coq
coq copied to clipboard
Universe inconsistency where there didn't used to be one (polyproj)
This code works in HoTT/coq trunk, but not trunk-polyproj (is this the inductive problem of https://github.com/HoTT/coq/issues/95#issuecomment-39706988?)
Set Universe Polymorphism.
Set Implicit Arguments.
Generalizable All Variables.
Record SpecializedCategory (obj : Type) :=
{
Object :> _ := obj;
Morphism : obj -> obj -> Type
}.
Record > Category :=
{
CObject : Type;
UnderlyingCategory :> @SpecializedCategory CObject
}.
Record SpecializedFunctor `(C : @SpecializedCategory objC) `(D : @SpecializedCategory objD) :=
{
ObjectOf :> objC -> objD;
MorphismOf : forall s d, C.(Morphism) s d -> D.(Morphism) (ObjectOf s) (ObjectOf d)
}.
(* Replacing this with [Definition Functor (C D : Category) :=
SpecializedFunctor C D.] gets rid of the universe inconsistency. *)
Section Functor.
Variable C D : Category.
Definition Functor := SpecializedFunctor C D.
End Functor.
Record SpecializedNaturalTransformation `(C : @SpecializedCategory objC) `(D : @SpecializedCategory objD) (F G : SpecializedFunctor C D) :=
{
ComponentsOf :> forall c, D.(Morphism) (F c) (G c)
}.
Definition FunctorProduct' `(F : Functor C D) : SpecializedFunctor C D.
admit.
Defined.
Definition TypeCat : @SpecializedCategory Type.
admit.
Defined.
Definition CovariantHomFunctor `(C : @SpecializedCategory objC) : SpecializedFunctor C TypeCat.
refine (Build_SpecializedFunctor C TypeCat
(fun X : C => C.(Morphism) X X)
_
); admit.
Defined.
Definition FunctorCategory `(C : @SpecializedCategory objC) `(D : @SpecializedCategory objD) : @SpecializedCategory (SpecializedFunctor C D).
refine (@Build_SpecializedCategory _
(SpecializedNaturalTransformation (C := C) (D := D))).
Defined.
Definition Yoneda `(C : @SpecializedCategory objC) : SpecializedFunctor C (FunctorCategory C TypeCat).
match goal with
| [ |- SpecializedFunctor ?C0 ?D0 ] =>
refine (Build_SpecializedFunctor C0 D0
(fun c => CovariantHomFunctor C)
_
)
end;
admit.
Defined.
Section FullyFaithful.
Context `(C : @SpecializedCategory objC).
Let TypeCatC := FunctorCategory C TypeCat.
Let YC := (Yoneda C).
Check @FunctorProduct' C TypeCatC YC.
(* Error: Universe inconsistency. Cannot enforce Top.187 = Top.186 because
Top.186 <= Top.189 < Top.191 <= Top.187). *)