blob: 0a12789b96730e40a1392543960c206fbbf3e1d0 (
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
40
41
42
43
44
45
46
47
|
(* The "?" of cons and eq should be inferred *)
Variable list:Set -> Set.
Variable cons:(T:Set) T -> (list T) -> (list T).
Check (n:(list nat)) (EX l| (EX x| (n = (cons ? x l)))).
(* Examples provided by Eduardo Gimenez *)
Definition c [A;Q:(nat*A->Prop)->Prop;P] :=
(Q [p:nat*A]let (i,v) = p in (P i v)).
(* What does this test ? *)
Require PolyList.
Definition list_forall_bool [A:Set][p:A->bool][l:(list A)] : bool :=
(fold_right ([a][r]if (p a) then r else false) true l).
(* Checks that solvable ? in the lambda prefix of the definition are harmless*)
Parameter A1,A2,F,B,C : Set.
Parameter f : F -> A1 -> B.
Definition f1 [frm0,a1]: B := (f frm0 a1).
(* Checks that solvable ? in the type part of the definition are harmless *)
Definition f2 : (frm0:?;a1:?)B := [frm0,a1](f frm0 a1).
(* Checks that sorts that are evars are handled correctly (bug 705) *)
Require PolyList.
Fixpoint build [nl : (list nat)] :
(Cases nl of nil => True | _ => False end) -> unit :=
<[nl](Cases nl of nil => True | _ => False end) -> unit>Cases nl of
| nil => [_]tt
| (cons n rest) =>
Cases n of
| O => [_]tt
| (S m) => [a](build rest (False_ind ? a))
end
end.
(* Checks that disjoint contexts are correctly set by restrict_hyp *)
(* Bug de 1999 corrigé en déc 2004 *)
Check
let p = [m:nat;f;n:nat]Cases (f m n) of
(exist a b) => (exist ? ? a b)
end
in
(p:: (x:nat)((y:nat)(n:nat){q:nat | y = (mult q n)}) -> (n:nat){q:nat | x = (mult q n)}).
|