]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/cic_notation/doc/samples.ma
added XmlAttrs attribute for specification of xml attributes directly
[helm.git] / helm / ocaml / cic_notation / doc / samples.ma
1
2 notation
3   "\langle a , b \rangle"
4 for
5   @{ 'pair $a $b }.
6 print \langle 1, \langle 2, 3 \rangle \rangle.
7 print 'pair 1 ('pair 2 ('pair 3 4)).
8
9 notation
10   "a :: b"
11 for
12   @{ 'cons $a $b }.
13 print 1 :: 2 :: 'ugo.
14
15 notation
16   "[ hovbox (list0 a sep ; ) ]"
17 for ${
18   fold right
19     @'nil
20   rec acc
21     @{ 'cons $a $acc }
22 }.
23 print [1;2;3;4].
24
25 notation
26   "[ list1 a sep ; | b ]"
27 for ${
28   if @{ 'cons $_ $_ } then
29     fold right
30       if @'nil then
31         fail
32       else if @{ 'cons $_ $_ } then
33         fail
34       else
35         b
36     rec acc
37       @{ 'cons $a $acc }
38   else
39     fail
40 }.
41 print 'cons 1 ('cons 2 ('cons 3 'ugo)).
42 print 'cons 1 ('cons 2 ('cons 3 'nil)).
43 print [1;2;3;4].
44 print [1;2;3;4|5].
45
46 notation "a + b" left associative for @{ 'plus $a $b }.
47 print 1 + 2 + 3.
48 print 1 + (2 + 3).
49
50 notation "a + b" left associative for @{ 'plus $a $b }.
51 notation "a * b" left associative for @{ 'mult $a $b }.
52 interpretation 'plus x y = (cic:/Coq/Init/Peano/plus.con x y).
53 interpretation 'mult x y = (cic:/Coq/Init/Peano/mult.con x y).
54 render cic:/Coq/Arith/Mult/mult_plus_distr_r.con.
55
56 notation
57   "'if' a 'then' b 'else' c"
58 for
59   @{ 'ifthenelse $a $b $c }.
60 print if even then \forall x:nat.x else bump x.
61
62 notation
63   "a \vee b"
64 for
65   @{ if $a > $b then $a else $b }
66
67 notation
68   "'fun' ident x \to a"
69   right associative with precedence 20
70 for
71   @{ 'lambda ${ident x} $a }.
72
73 NOTES
74
75 @a e' un'abbreviazione per @{term a}
76 "x" e' un'abbreviazione per @{keyword x}
77 @_ e' un'abbreviazione per @{anonymous}
78
79 \x simbolo della sintassi concreta
80 'x simbolo della sintassi astratta
81
82 \lbrace \rbrace per le parentesi graffe al livello 1
83
84 OLD SAMPLES
85
86 # sample mappings level 1 <--> level 2
87
88 notation \[ \TERM a ++ \OPT \NUM i \] for 'assign \TERM a ('plus \TERM a \DEFAULT \[\NUM i\] \[1\]).
89 print 1 ++ 2.
90
91 notation \[ + \LIST0 \NUM a \] for \FOLD right \[ 'zero \] \LAMBDA acc \[ 'plus \NUM a \TERM acc \].
92 print + 1 2 3 4.
93
94 notation \[ [ \HOVBOX\[ \LIST0 \TERM a \SEP ; \] ] \] for \FOLD right \[ 'nil \] \LAMBDA acc \[ 'cons \TERM a \TERM acc \].
95 print [].
96 print [1;2;3;4].
97
98 notation \[ [ \LIST0 \[ \TERM a ; \TERM b \] \SEP ; ] \] for \FOLD right \[ 'nil \] \LAMBDA acc \[ 'cons \TERM a ( 'cons \TERM b \TERM acc) \] .
99 print [].
100 print [1;2].
101 print [1;2;3;4].
102
103 notation \[ | \LIST0 \[ \TERM a \OPT \[ , \TERM b \] \] \SEP ; | \] for \FOLD right \[ 'nil \] \LAMBDA acc \[ 'cons \DEFAULT \[ \TERM a \] \[ ('pair \TERM a \TERM b) \] \TERM acc \] .  
104
105 notation \[ | \LIST0 \[ \OPT \[ \NUM i \] \] \SEP ; | \] for \FOLD right \[ 'nil \] \LAMBDA acc \[ 'cons \DEFAULT \[ 'Some \NUM i \] \[ 'None \] \TERM acc \] .
106
107 # sample mappings level 2 <--> level 3
108
109 interpretation 'plus x y = (cic:/Coq/Init/Peano/plus.con x y).
110 interpretation 'mult x y = (cic:/Coq/Init/Peano/mult.con x y).
111 render cic:/Coq/Arith/Mult/mult_plus_distr_r.con.
112
113 notation \[ \TERM a \OVER \TERM b : \TERM c \SQRT \TERM d \] for 'megacoso \TERM a \TERM b \TERM c \TERM d.
114 interpretation 'megacoso x y z w = (cic:/Coq/Init/Logic/eq.ind#xpointer(1/1) cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) (cic:/Coq/Init/Peano/plus.con x y) (cic:/Coq/Init/Peano/plus.con z w)).
115 render cic:/Coq/Arith/Plus/plus_comm.con.
116
117 # full samples
118
119 notation \[ \TERM a + \TERM b \] for 'plus \TERM a \TERM b.
120 print 1 + 2.
121 interpretation 'plus x y = (cic:/Coq/Init/Peano/plus.con x y).
122 render cic:/Coq/Arith/Plus/plus_comm.con.
123
124 notation \[ \TERM a + \TERM b \] left associative with precedence 50 for 'plus \TERM a \TERM b.
125 notation \[ \TERM a * \TERM b \] left associative with precedence 60 for 'mult \TERM a \TERM b.
126 interpretation 'plus x y = (cic:/Coq/Init/Peano/plus.con x y).
127 interpretation 'mult x y = (cic:/Coq/Init/Peano/mult.con x y).
128 render cic:/Coq/Arith/Mult/mult_plus_distr_r.con.
129
130 notation \[ \LIST \NUM a \] for \FOLD left \[ 'a \] \LAMBDA acc \[ 'b \NUM a \].
131