blob: a948b75e27a72bf4315ceb45663d827925fafe2a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(* Check that possible instantiation made during evar materialization
are taken into account and do not raise Not_found *)
Set Implicit Arguments.
Record SpecializedCategory (obj : Type) (Morphism : obj -> obj -> Type) := {
Object :> _ := obj;
Identity' : forall o, Morphism o o;
Compose' : forall s d d', Morphism d d' -> Morphism s d -> Morphism s d'
}.
Section SpecializedCategoryInterface.
Variable obj : Type.
Variable mor : obj -> obj -> Type.
Variable C : @SpecializedCategory obj mor.
Definition Morphism (s d : C) := mor s d.
Definition Identity (o : C) : Morphism o o := C.(Identity') o.
Definition Compose (s d d' : C) (m : Morphism d d') (m0 : Morphism s d) :
Morphism s d' := C.(Compose') s d d' m m0.
End SpecializedCategoryInterface.
Section ProductCategory.
Variable objC : Type.
Variable morC : objC -> objC -> Type.
Variable objD : Type.
Variable morD : objD -> objD -> Type.
Variable C : SpecializedCategory morC.
Variable D : SpecializedCategory morD.
(* Should fail nicely *)
Definition ProductCategory : @SpecializedCategory (objC * objD)%type (fun s d
=> (morC (fst s) (fst d) * morD (snd s) (snd d))%type).
Fail refine {|
Identity' := (fun o => (Identity (fst o), Identity (snd o)));
Compose' := (fun s d d' m2 m1 => (Compose (fst m2) (fst m1), Compose (snd
m2) (snd m1)))
|}.
|