blob: 17c4f907830032e3eed3c7716a68a7a9f04e3316 (
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
|
(* Interaction between coercions and casts *)
(* Example provided by Eduardo Gimenez *)
Parameter Z,S:Set.
Parameter f: S -> Z.
Coercion f: S >-> Z.
Parameter g : Z -> Z.
Check [s](g (s::S)).
(* Check uniform inheritance condition *)
Parameter h : nat -> nat -> Prop.
Parameter i : (n,m:nat)(h n m) -> nat.
Coercion i : h >-> nat.
(* Check coercion to funclass when the source occurs in the target *)
Parameter C: nat -> nat -> nat.
Coercion C : nat >-> FUNCLASS.
(* Remark: in the following example, it cannot be decide whether C is
from nat to Funclass or from A to nat. An explicit Coercion command is
expected
Parameter A : nat -> Prop.
Parameter C:> forall n:nat, A n -> nat.
*)
|