blob: 7c9b89f9d2ea318d2d261983f588bf637dc401f7 (
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
48
49
50
51
52
53
|
Set Implicit Arguments.
Unset Strict Implicit.
(* Suggested by Pierre Casteran (bug #169) *)
(* Argument 3 is needed to typecheck and should be printed *)
Definition compose (A B C : Set) (f : A -> B) (g : B -> C) (x : A) := g (f x).
Check (compose (C:=nat) S).
(* Better to explicitly display the arguments inferable from a
position that could disappear after reduction *)
Inductive ex (A : Set) (P : A -> Prop) : Prop :=
ex_intro : forall x : A, P x -> ex P.
Check (ex_intro (P:=fun _ => True) (x:=0) I).
(* Test for V8 printing of implicit by names *)
Definition d1 y x (h : x = y :>nat) := h.
Definition d2 x := d1 (y:=x).
Print d2.
Set Strict Implicit.
Unset Implicit Arguments.
(* Check maximal insertion of implicit *)
Require Import List.
Open Scope list_scope.
Set Implicit Arguments.
Set Maximal Implicit Insertion.
Definition id (A:Type) (x:A) := x.
Check map id (1::nil).
Definition id' (A:Type) (x:A) := x.
Arguments id' {A} x.
Check map id' (1::nil).
Unset Maximal Implicit Insertion.
Unset Implicit Arguments.
(* Check explicit insertion of last non-maximal trailing implicit to ensure *)
(* correct arity of partiol applications *)
Set Implicit Arguments.
Definition id'' (A:Type) (x:A) := x.
Check map (@id'' nat) (1::nil).
|