Skip to content

Commit f3a4d09

Browse files
committed
start annotating the arm prelude
1 parent c3c0d39 commit f3a4d09

File tree

1 file changed

+144
-31
lines changed

1 file changed

+144
-31
lines changed

aarch64/prelude.sail

Lines changed: 144 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,58 @@ $include <arith.sail>
55

66
type bits ('n : Int) = bitvector('n, dec)
77

8-
val eq_vec = {ocaml: "eq_list", interpreter: "eq_list", lem: "eq_vec", c: "eq_bits", coq: "eq_vec"} : forall 'n. (bits('n), bits('n)) -> bool
9-
10-
val eq_string = {ocaml: "eq_string", interpreter: "eq_string", lem: "eq", c: "eq_string", coq: "generic_eq"} : (string, string) -> bool
8+
val eq_vec = {
9+
ocaml: "eq_list",
10+
interpreter: "eq_list",
11+
lem: "eq_vec",
12+
c: "eq_bits",
13+
coq: "eq_vec"
14+
lean: "BEq.beq"} : forall 'n. (bits('n), bits('n)) -> bool
15+
16+
val eq_string = {
17+
ocaml: "eq_string",
18+
interpreter: "eq_string",
19+
lem: "eq",
20+
c: "eq_string",
21+
coq: "generic_eq",
22+
lean: "BEq.beq"} : (string, string) -> bool
1123

12-
val eq_real = {ocaml: "eq_real", interpreter: "eq_real", lem: "eq", c: "eq_real", coq: "Reqb"} : (real, real) -> bool
24+
val eq_real = {
25+
ocaml: "eq_real",
26+
interpreter: "eq_real",
27+
lem: "eq",
28+
c: "eq_real",
29+
coq: "Reqb",
30+
lean: "BEq.beq"} : (real, real) -> bool
1331

1432
val eq_anything = {
1533
ocaml: "(fun (x, y) -> x = y)",
1634
interpreter: "eq_anything",
1735
lem: "eq",
1836
c: "eq_anything",
19-
coq: "generic_eq"
37+
coq: "generic_eq",
38+
lean: "BEq.beq"
2039
} : forall ('a : Type). ('a, 'a) -> bool
2140

22-
val bitvector_length = "length" : forall 'n. bits('n) -> atom('n)
23-
val vector_length = {ocaml: "length", interpreter: "length", lem: "length_list", c: "length", coq: "vec_length"} : forall 'n ('a : Type). vector('n, dec, 'a) -> atom('n)
24-
val list_length = {ocaml: "length", interpreter: "length", lem: "length_list", c: "length", coq: "length_list"} : forall ('a : Type). list('a) -> int
41+
val bitvector_length = {
42+
lean: "BitVec.length",
43+
_: "length"} : forall 'n. bits('n) -> atom('n)
44+
45+
val vector_length = {
46+
ocaml: "length",
47+
interpreter: "length",
48+
lem: "length_list",
49+
c: "length",
50+
coq: "vec_length",
51+
lean: "Vector.length"} : forall 'n ('a : Type). vector('n, dec, 'a) -> atom('n)
52+
53+
val list_length = {
54+
ocaml: "length",
55+
interpreter: "length",
56+
lem: "length_list",
57+
c: "length",
58+
coq: "length_list",
59+
lean: "List.length"} : forall ('a : Type). list('a) -> int
2560

2661
overload length = {bitvector_length, vector_length, list_length}
2762

@@ -32,15 +67,17 @@ val vector_subrange_A = {
3267
interpreter: "subrange",
3368
lem: "subrange_vec_dec",
3469
c: "vector_subrange",
35-
coq: "subrange_vec_dec"
70+
coq: "subrange_vec_dec",
71+
lean: "BitVec.extractLsb"
3672
} : forall ('n : Int) ('m : Int) ('o : Int), 'o <= 'm <= 'n.
3773
(bits('n), atom('m), atom('o)) -> bits('m - ('o - 1))
3874

3975
val vector_subrange_B = {
4076
ocaml: "subrange",
4177
interpreter: "subrange",
4278
lem: "subrange_vec_dec",
43-
c: "vector_subrange"
79+
c: "vector_subrange",
80+
lean: "BitVec.extractLsb"
4481
} : forall ('n : Int) ('m : Int) ('o : Int).
4582
(bits('n), atom('m), atom('o)) -> bits('m - ('o - 1))
4683

@@ -51,15 +88,17 @@ val bitvector_access_A = {
5188
interpreter: "access",
5289
lem: "access_vec_dec",
5390
c: "vector_access",
54-
coq: "access_vec_dec"
91+
coq: "access_vec_dec",
92+
lean: "BitVec.access"
5593
} : forall ('n : Int) ('m : Int), 0 <= 'm < 'n. (bits('n), atom('m)) -> bit
5694

5795
val bitvector_access_B = {
5896
ocaml: "access",
5997
interpreter: "access",
6098
lem: "access_vec_dec",
6199
c: "vector_access",
62-
coq: "access_vec_dec"
100+
coq: "access_vec_dec",
101+
lean: "BitVec.access"
63102
} : forall ('n : Int). (bits('n), int) -> bit
64103

65104
val vector_access_A = {
@@ -74,12 +113,18 @@ val vector_access_B = {
74113
ocaml: "access",
75114
interpreter: "access",
76115
lem: "access_list_dec",
77-
c: "vector_access"
116+
c: "vector_access",
117+
lean: "GetElem?.getElem!"
78118
} : forall ('n : Int) ('a : Type). (vector('n, dec, 'a), int) -> 'a
79119

80120
overload vector_access = {bitvector_access_A, bitvector_access_B, vector_access_A, vector_access_B}
81121

82-
val bitvector_update_B = {ocaml: "update", interpreter: "update", lem: "update_vec_dec", c: "vector_update", coq: "update_vec_dec"} : forall 'n.
122+
val bitvector_update_B = {
123+
ocaml: "update",
124+
interpreter: "update",
125+
lem: "update_vec_dec",
126+
c: "vector_update",
127+
coq: "update_vec_dec"} : forall 'n.
83128
(bits('n), int, bit) -> bits('n)
84129

85130
val vector_update_B = {ocaml: "update", interpreter: "update", lem: "update_list_dec", c: "vector_update", coq: "vec_update_dec"} : forall 'n ('a : Type).
@@ -98,10 +143,21 @@ val vector_update_subrange = {
98143
val vcons : forall ('n : Int) ('a : Type).
99144
('a, vector('n, dec, 'a)) -> vector('n + 1, dec, 'a)
100145

101-
val bitvector_concat = {ocaml: "append", interpreter: "append", lem: "concat_vec", c: "append", coq: "concat_vec"} : forall ('n : Int) ('m : Int).
146+
val bitvector_concat = {
147+
ocaml: "append",
148+
interpreter: "append",
149+
lem: "concat_vec",
150+
c: "append",
151+
coq: "concat_vec",
152+
lean: "HAppend.hAppend"} : forall ('n : Int) ('m : Int).
102153
(bits('n), bits('m)) -> bits('n + 'm)
103154

104-
val vector_concat = {ocaml: "append", interpreter: "append", lem: "append_list", coq: "append_list"} : forall ('n : Int) ('m : Int) ('a : Type).
155+
val vector_concat = {
156+
ocaml: "append",
157+
interpreter: "append",
158+
lem: "append_list",
159+
coq: "append_list",
160+
lean: "HAppend.hAppend"} : forall ('n : Int) ('m : Int) ('a : Type).
105161
(vector('n, dec, 'a), vector('m, dec, 'a)) -> vector('n + 'm, dec, 'a)
106162

107163
overload append = {bitvector_concat, vector_concat}
@@ -111,7 +167,8 @@ val not_vec = {
111167
interpreter: "not_vec",
112168
lem: "not_vec",
113169
c: "not_bits",
114-
coq: "not_vec"
170+
coq: "not_vec",
171+
lean: "Complement.complement"
115172
} : forall 'n. bits('n) -> bits('n)
116173

117174
overload ~ = {not_bool, not_vec}
@@ -147,11 +204,13 @@ val UInt = {
147204
lem: "uint",
148205
interpreter: "uint",
149206
c: "sail_unsigned",
150-
coq: "uint"
207+
coq: "uint",
208+
lean: "BitVec.toNat"
151209
} : forall 'n. bits('n) -> {'m, 0 <= 'm <= 2 ^ 'n - 1. int('m)}
152210

153211
val SInt = {
154212
c: "sail_signed",
213+
lean: "BitVec.toInt",
155214
_: "sint"
156215
} : forall 'n. bits('n) -> {'m, (- (2 ^ ('n - 1))) <= 'm <= 2 ^ ('n - 1) - 1. int('m)}
157216

@@ -232,58 +291,112 @@ val add_vec = {
232291
interpreter: "add_vec",
233292
lem: "add_vec",
234293
c: "add_bits",
235-
coq: "add_vec"
294+
coq: "add_vec",
295+
lean: "HAdd.hAdd"
236296
} : forall 'n. (bits('n), bits('n)) -> bits('n)
237297

238298
val add_vec_int = {
239299
ocaml: "add_vec_int",
240300
interpreter: "add_vec_int",
241301
lem: "add_vec_int",
242302
c: "add_bits_int",
243-
coq: "add_vec_int"
303+
coq: "add_vec_int",
304+
lean: "BitVec.addInt"
244305
} : forall 'n. (bits('n), int) -> bits('n)
245306

246-
val add_real = {ocaml: "add_real", interpreter: "add_real", lem: "realAdd", c: "add_real", coq: "Rplus"} : (real, real) -> real
307+
val add_real = {
308+
ocaml: "add_real",
309+
interpreter: "add_real",
310+
lem: "realAdd",
311+
c: "add_real",
312+
coq: "Rplus",
313+
lean: "HAdd.hAdd"} : (real, real) -> real
247314

248315
overload operator + = {add_vec, add_vec_int, add_real}
249316

250-
val sub_vec = {c: "sub_bits", _: "sub_vec"} : forall 'n. (bits('n), bits('n)) -> bits('n)
317+
val sub_vec = {
318+
c: "sub_bits",
319+
lean: "HSub.hSub",
320+
_: "sub_vec"} : forall 'n. (bits('n), bits('n)) -> bits('n)
251321

252322
val sub_vec_int = {
253323
ocaml: "sub_vec_int",
254324
interpreter: "sub_vec_int",
255325
lem: "sub_vec_int",
256326
c: "sub_bits_int",
257-
coq: "sub_vec_int"
327+
coq: "sub_vec_int",
328+
lean: "BitVec.subInt"
258329
} : forall 'n. (bits('n), int) -> bits('n)
259330

260-
val sub_real = {ocaml: "sub_real", interpreter: "sub_real", lem: "realMinus", c: "sub_real", coq: "Rminus"} : (real, real) -> real
261-
262-
val negate_real = {ocaml: "negate_real", interpreter: "negate_real", lem: "realNegate", c: "neg_real", coq: "Ropp"} : real -> real
331+
val sub_real = {
332+
ocaml: "sub_real",
333+
interpreter: "sub_real",
334+
lem: "realMinus",
335+
c: "sub_real",
336+
lean: "HSub.hSub",
337+
coq: "Rminus"} : (real, real) -> real
338+
339+
val negate_real = {
340+
ocaml: "negate_real",
341+
interpreter: "negate_real",
342+
lem: "realNegate",
343+
c: "neg_real",
344+
lean: "Neg.neg",
345+
coq: "Ropp"} : real -> real
263346

264347
overload operator - = {sub_vec, sub_vec_int, sub_real}
265348

266349
overload negate = {negate_real}
267350

268-
val mult_real = {ocaml: "mult_real", interpreter: "mult_real", lem: "realMult", c: "mult_real", coq: "Rmult"} : (real, real) -> real
351+
val mult_real = {
352+
ocaml: "mult_real",
353+
interpreter: "mult_real",
354+
lem: "realMult",
355+
c: "mult_real",
356+
lean: "HMul.hMul",
357+
coq: "Rmult"} : (real, real) -> real
269358

270359
overload operator * = {mult_real}
271360

272361
val Sqrt = {ocaml: "sqrt_real", interpreter: "sqrt_real", lem: "realSqrt", c: "sqrt_real", coq: "sqrt"} : real -> real
273362

274-
val gteq_real = {ocaml: "gteq_real", interpreter: "gteq_real", lem: "gteq", c: "gteq_real", coq: "gteq_real"} : (real, real) -> bool
363+
val gteq_real = {
364+
ocaml: "gteq_real",
365+
interpreter: "gteq_real",
366+
lem: "gteq",
367+
c: "gteq_real",
368+
coq: "gteq_real",
369+
lean: "_lean_ge"} : (real, real) -> bool
275370

276371
overload operator >= = {gteq_real}
277372

278-
val lteq_real = {ocaml: "lteq_real", interpreter: "lteq_real", lem: "lteq", c: "lteq_real", coq: "lteq_real"} : (real, real) -> bool
373+
val lteq_real = {
374+
ocaml: "lteq_real",
375+
interpreter: "lteq_real",
376+
lem: "lteq",
377+
c: "lteq_real",
378+
coq: "lteq_real",
379+
lean: "_lean_ge"} : (real, real) -> bool
279380

280381
overload operator <= = {lteq_real}
281382

282-
val gt_real = {ocaml: "gt_real", interpreter: "gt_real", lem: "gt", c: "gt_real", coq: "gt_real"} : (real, real) -> bool
383+
val gt_real = {
384+
ocaml: "gt_real",
385+
interpreter: "gt_real",
386+
lem: "gt",
387+
c: "gt_real",
388+
coq: "gt_real",
389+
lean: "_lean_gt"} : (real, real) -> bool
283390

284391
overload operator > = {gt_real}
285392

286-
val lt_real = {ocaml: "lt_real", interpreter: "lt_real", lem: "lt", c: "lt_real", coq: "lt_real"} : (real, real) -> bool
393+
val lt_real = {
394+
ocaml: "lt_real",
395+
interpreter: "lt_real",
396+
lem: "lt",
397+
c: "lt_real",
398+
coq: "lt_real",
399+
lean: "_lean_lt"} : (real, real) -> bool
287400

288401
overload operator < = {lt_real}
289402

0 commit comments

Comments
 (0)