File: cakeml.drv

package info (click to toggle)
why3 1.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 45,020 kB
  • sloc: xml: 185,443; ml: 111,224; ansic: 3,998; sh: 2,578; makefile: 2,568; java: 865; python: 720; javascript: 290; lisp: 205; pascal: 173
file content (118 lines) | stat: -rw-r--r-- 2,749 bytes parent folder | download | duplicates (5)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

(** CakeML driver *)

printer "cakeml"

module BuiltIn
  syntax type int "int"
end

module HighOrd
  syntax type (->) "%1 -> %2"
  syntax val  ( @ )  "%1 %2"
end

module option.Option
  syntax type     option "%1 option"
  syntax val None   "NONE"
  syntax val Some   "SOME %1"
end

module Bool
  syntax type     bool  "bool"
  syntax val True  "true"
  syntax val False "false"
end

module bool.Ite
  syntax val ite "(if %1 then %2 else %3)"
end

module bool.Bool
  syntax val andb  "%1 andalso %2"
  syntax val orb   "%1 orelse %2"
  syntax val xorb  "%1 <> %2"
  syntax val notb  "not %1"
  syntax val implb "not %1 orelse %2"
end

module list.List
  syntax type     list "%1 list"
  syntax val Nil  "[]"
  syntax val Cons "%1 :: %2"
  syntax val is_nil "%1 = []"
end

module list.Length
  syntax val length "List.length %1"
end

module Ref
  syntax type     ref      "%1 ref"
  syntax val contents "!%1"
  syntax val      ref      "ref %1"
end

module ref.Ref
  syntax val      (!_)     "!%1"
  syntax val      (:=)     "%1 := %2"
end

module ref.Refint
  syntax val incr "%1 := !%1 + 1"
  syntax val decr "%1 := !%1 - 1"
  syntax val (+=) "%1 := !%1 + %2"
  syntax val (-=) "%1 := !%1 - %2"
  syntax val ( *= ) "%1 := !%1 * %2"
end

module int.Int
  syntax val zero "0"
  syntax val one  "1"

  syntax val (<)   "%1 < %2"
  syntax val (<=)  "%1 <= %2"
  syntax val (>)   "%1 > %2"
  syntax val (>=)  "%1 >= %2"
  syntax val       (=)   "%1 = %2"

  syntax val  (+)   "%1 + %2"
  syntax val  (-)   "%1 - %2"
  syntax val  ( * ) "%1 * %2"
  syntax val  (-_)  "~%1"
end

module int.EuclideanDivision
  syntax val div "%1 div %2"
  syntax val mod "%1 mod %2"
end

(* not implemented in CakeML *)
(* module int.ComputerDivision *)
(*   syntax val div "quot (%1, %2)" *)
(*   syntax val mod "%1 rem %2" *)
(* end *)

module array.Array
  syntax type array "%1 array"

  (* syntax exception OutOfBounds "Why3__Array.OutOfBounds" *) (* FIXME *)

  syntax val ([])          "Array.sub %1 %2"
  syntax val ([]<-)        "Array.update %1 %2 %3"
  syntax val length        "Array.length %1"
  syntax val defensive_get "Array.sub %1 %2"
  syntax val defensive_set "Array.update %1 %2 %3"
  syntax val make          "Array.array %1 %2"
  syntax val empty         "Array.arrayEmpty %1"
  (* syntax val append        "Array.append %1 %2" *)
  (* syntax val sub           "Array.sub %1 (Z.to_int %2) (Z.to_int %3)" *)
  (* syntax val copy          "Array.copy %1" *)
  (* syntax val fill          "Array.fill %1 (Z.to_int %2) (Z.to_int %3) %4" *)
  (* syntax val blit          "Array.blit %1 (Z.to_int %2) %3 (Z.to_int %4) (Z.to_int %5)" *)
end

(* module mach.int.Int *)
(*   syntax val ( / ) "Z.div %1 %2" *)
(*   syntax val ( % ) "Z.rem %1 %2" *)
(* end *)