|
2 | 2 | enable_experimental;
|
3 | 3 | import "SpecPrims.cry" as SpecPrims;
|
4 | 4 | import "monadify.cry";
|
| 5 | +load_sawcore_from_file "../../cryptol-saw-core/saw/CryptolM.sawcore"; |
5 | 6 | set_monadification "SpecPrims::exists" "Prelude.existsM";
|
6 | 7 | set_monadification "SpecPrims::forall" "Prelude.forallM";
|
7 | 8 |
|
| 9 | +let run_test name cry_term mon_term_expected = |
| 10 | + do { print (str_concat "Test: " name); |
| 11 | + print "Original term:"; |
| 12 | + print_term cry_term; |
| 13 | + mon_term <- monadify_term cry_term; |
| 14 | + print "Monadified term:"; |
| 15 | + print_term mon_term; |
| 16 | + success <- is_convertible mon_term mon_term_expected; |
| 17 | + if success then print "Success - monadified term matched expected\n" else |
| 18 | + do { print "Test failed - did not match expected monadified term:"; |
| 19 | + print_term mon_term_expected; |
| 20 | + exit 1; }; }; |
| 21 | + |
8 | 22 | my_abs <- unfold_term ["my_abs"] {{ my_abs }};
|
9 |
| -print "[my_abs] original term:"; |
10 |
| -print_term my_abs; |
11 |
| -my_absM <- monadify_term my_abs; |
12 |
| -print "[my_abs] monadified term:"; |
13 |
| -print_term my_absM; |
| 23 | +my_abs_M <- parse_core_mod "CryptolM" "\ |
| 24 | +\ \\(x : (mseq (TCNum 64) Bool)) -> \ |
| 25 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 26 | +\ (\\(x' : (isFinite (TCNum 64))) -> \ |
| 27 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 28 | +\ (\\(x'' : (isFinite (TCNum 64))) -> \ |
| 29 | +\ ite (CompM (mseq (TCNum 64) Bool)) \ |
| 30 | +\ (ecLt (mseq (TCNum 64) Bool) (PCmpMSeqBool (TCNum 64) x') x \ |
| 31 | +\ (ecNumber (TCNum 0) (mseq (TCNum 64) Bool) (PLiteralSeqBoolM (TCNum 64) x''))) \ |
| 32 | +\ (bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 33 | +\ (\\(x''' : (isFinite (TCNum 64))) -> \ |
| 34 | +\ returnM (mseq (TCNum 64) Bool) (ecNeg (mseq (TCNum 64) Bool) (PRingMSeqBool (TCNum 64) x''') x))) \ |
| 35 | +\ (returnM (mseq (TCNum 64) Bool) x)))"; |
| 36 | +run_test "my_abs" my_abs my_abs_M; |
14 | 37 |
|
15 |
| -/* |
16 | 38 | err_if_lt0 <- unfold_term ["err_if_lt0"] {{ err_if_lt0 }};
|
17 |
| -print "[err_if_lt0] original term:"; |
18 |
| -err_if_lt0M <- monadify_term err_if_lt0; |
19 |
| -print "[err_if_lt0] monadified term:"; |
20 |
| -print_term err_if_lt0M; |
21 |
| -*/ |
| 39 | +err_if_lt0_M <- parse_core_mod "CryptolM" "\ |
| 40 | +\ \\(x : (mseq (TCNum 64) Bool)) -> \ |
| 41 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 42 | +\ (\\(x' : (isFinite (TCNum 64))) -> \ |
| 43 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 44 | +\ (\\(x'' : (isFinite (TCNum 64))) -> \ |
| 45 | +\ ite (CompM (mseq (TCNum 64) Bool)) \ |
| 46 | +\ (ecLt (mseq (TCNum 64) Bool) (PCmpMSeqBool (TCNum 64) x') x \ |
| 47 | +\ (ecNumber (TCNum 0) (mseq (TCNum 64) Bool) (PLiteralSeqBoolM (TCNum 64) x''))) \ |
| 48 | +\ (bindM (isFinite (TCNum 8)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 8)) \ |
| 49 | +\ (\\(x''' : (isFinite (TCNum 8))) -> \ |
| 50 | +\ ecErrorM (mseq (TCNum 64) Bool) (TCNum 5) \ |
| 51 | +\ (seqToMseq (TCNum 5) (mseq (TCNum 8) Bool) \ |
| 52 | +\ [ ecNumber (TCNum 120) (mseq (TCNum 8) Bool) (PLiteralSeqBoolM (TCNum 8) x''') \ |
| 53 | +\ , (ecNumber (TCNum 32) (mseq (TCNum 8) Bool) (PLiteralSeqBoolM (TCNum 8) x''')) \ |
| 54 | +\ , ecNumber (TCNum 60) (mseq (TCNum 8) Bool) (PLiteralSeqBoolM (TCNum 8) x''') \ |
| 55 | +\ , (ecNumber (TCNum 32) (mseq (TCNum 8) Bool) (PLiteralSeqBoolM (TCNum 8) x''')) \ |
| 56 | +\ , ecNumber (TCNum 48) (mseq (TCNum 8) Bool) (PLiteralSeqBoolM (TCNum 8) x''') ]))) \ |
| 57 | +\ (returnM (mseq (TCNum 64) Bool) x)))"; |
| 58 | +run_test "err_if_lt0" err_if_lt0 err_if_lt0_M; |
22 | 59 |
|
23 | 60 | /*
|
24 | 61 | sha1 <- {{ sha1 }};
|
25 |
| -print "[SHA1] original term:"; |
| 62 | +print "Test: sha1"; |
| 63 | +print "Original term:"; |
26 | 64 | print_term sha1;
|
27 |
| -mtrm <- monadify_term sha1; |
28 |
| -print "[SHA1] monadified term:"; |
29 |
| -print_term mtrm; |
| 65 | +sha1M <- monadify_term sha1; |
| 66 | +print "Monadified term:"; |
| 67 | +print_term sha1M; |
30 | 68 | */
|
31 | 69 |
|
32 | 70 | fib <- unfold_term ["fib"] {{ fib }};
|
33 |
| -print "[fib] original term:"; |
34 |
| -print_term fib; |
35 |
| -fibM <- monadify_term fib; |
36 |
| -print "[fib] monadified term:"; |
37 |
| -print_term fibM; |
| 71 | +fibM <- parse_core_mod "CryptolM" "\ |
| 72 | +\ \\(_x : (mseq (TCNum 64) Bool)) -> \ |
| 73 | +\ multiArgFixM (LRT_Fun (mseq (TCNum 64) Bool) (\\(_ : (mseq (TCNum 64) Bool)) -> LRT_Ret (mseq (TCNum 64) Bool))) \ |
| 74 | +\ (\\(fib : ((mseq (TCNum 64) Bool) -> (CompM (mseq (TCNum 64) Bool)))) -> \ |
| 75 | +\ \\(x : (mseq (TCNum 64) Bool)) -> \ |
| 76 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 77 | +\ (\\(x' : (isFinite (TCNum 64))) -> \ |
| 78 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 79 | +\ (\\(x'' : (isFinite (TCNum 64))) -> \ |
| 80 | +\ ite (CompM (mseq (TCNum 64) Bool)) \ |
| 81 | +\ (ecEq (mseq (TCNum 64) Bool) (PEqMSeqBool (TCNum 64) x') x \ |
| 82 | +\ (ecNumber (TCNum 0) (mseq (TCNum 64) Bool) (PLiteralSeqBoolM (TCNum 64) x''))) \ |
| 83 | +\ (bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 84 | +\ (\\(x''' : (isFinite (TCNum 64))) -> \ |
| 85 | +\ returnM (mseq (TCNum 64) Bool) \ |
| 86 | +\ (ecNumber (TCNum 1) (mseq (TCNum 64) Bool) \ |
| 87 | +\ (PLiteralSeqBoolM (TCNum 64) x''')))) \ |
| 88 | +\ (bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 89 | +\ (\\(x''' : (isFinite (TCNum 64))) -> \ |
| 90 | +\ bindM (isFinite (TCNum 64)) (mseq (TCNum 64) Bool) (assertFiniteM (TCNum 64)) \ |
| 91 | +\ (\\(x'''' : (isFinite (TCNum 64))) -> \ |
| 92 | +\ bindM (mseq (TCNum 64) Bool) (mseq (TCNum 64) Bool) \ |
| 93 | +\ (fib \ |
| 94 | +\ (ecMinus (mseq (TCNum 64) Bool) (PRingMSeqBool (TCNum 64) x''') x \ |
| 95 | +\ (ecNumber (TCNum 1) (mseq (TCNum 64) Bool) \ |
| 96 | +\ (PLiteralSeqBoolM (TCNum 64) x'''')))) \ |
| 97 | +\ (\\(x''''' : (mseq (TCNum 64) Bool)) -> \ |
| 98 | +\ returnM (mseq (TCNum 64) Bool) \ |
| 99 | +\ (ecMul (mseq (TCNum 64) Bool) (PRingMSeqBool (TCNum 64) x''') x \ |
| 100 | +\ x''''')))))))) \ |
| 101 | +\ _x"; |
| 102 | +run_test "fib" fib fibM; |
38 | 103 |
|
39 | 104 | noErrors <- unfold_term ["noErrors"] {{ SpecPrims::noErrors }};
|
40 |
| -print "[noErrors] original term:"; |
41 |
| -print_term noErrors; |
42 |
| -noErrorsM <- monadify_term noErrors; |
43 |
| -print "[noErrors] monadified term:"; |
44 |
| -print_term noErrorsM; |
| 105 | +noErrorsM <- parse_core_mod "CryptolM" "\\(a : sort 0) -> existsM a a (\\(x : a) -> returnM a x)"; |
| 106 | +run_test "noErrors" noErrors noErrorsM; |
45 | 107 |
|
46 | 108 | fibSpecNoErrors <- unfold_term ["fibSpecNoErrors"] {{ fibSpecNoErrors }};
|
47 |
| -print "[fibSpecNoErrors] original term:"; |
48 |
| -print_term fibSpecNoErrors; |
49 |
| -fibSpecNoErrorsM <- monadify_term fibSpecNoErrors; |
50 |
| -print "[fibSpecNoErrors] monadified term:"; |
51 |
| -print_term fibSpecNoErrorsM; |
| 109 | +fibSpecNoErrorsM <- parse_core_mod "CryptolM" "\ |
| 110 | +\ \\(__p1 : (mseq (TCNum 64) Bool)) -> \ |
| 111 | +\ existsM (mseq (TCNum 64) Bool) (mseq (TCNum 64) Bool) \ |
| 112 | +\ (\\(x : (mseq (TCNum 64) Bool)) -> \ |
| 113 | +\ returnM (mseq (TCNum 64) Bool) x)"; |
| 114 | +run_test "fibSpecNoErrors" fibSpecNoErrors fibSpecNoErrorsM; |
0 commit comments