cryptol v2.12.0 Release Notes
-
Language changes
β‘οΈ Updates to the layout rule. We simplified the specification and made some minor changes, in particular:
- Paren blocks nested in a layout block need to respect the indentation if the layout block
- We allow nested layout blocks to have the same indentation, which is
convenient when writing
private
declarations as they don't need to be indented as long as they are at the end of the file.
π New enumeration forms
[x .. y by n]
,[x .. <y by n]
,[x .. y down by n]
and[x .. >y down by n]
have been implemented. These new forms let the user explicitly specify the stride for an enumeration, as opposed to the previous[x, y .. z]
form (where the stride was computed fromx
andy
).Nested modules are now available (from pull request #1048). For example, the following is now valid Cryptol:
module SubmodTest where import submodule B as C submodule A where propA = C::y > 5 submodule B where y : Integer y = 42
π New features
What4 prover backends now feature an improved multi-SAT procedure which is significantly faster than the old algorithm. Thanks to Levent ErkoΜk for the suggestion.
There is a new
w4-abc
solver option, which communicates to ABC as an external process via What4.π Expanded support for declaration forms in the REPL. You can now define infix operators, type synonyms and mutually-recursive functions, and state signatures and fixity declarations. Multiple declarations can be combined into a single line by separating them with
;
, which is necessary for stating a signature together with a definition, etc.There is a new
:set path
REPL option that provides an alternative toCRYPTOLPATH
for controlling where to search for imported modules (issue #631).π The
cryptol-remote-api
server now natively supports HTTPS (issue1008),
newtype
values (issue #1033), and safety checking (issue1166).
π Releases optionally include solvers (issue #1111). See the
*-with-solvers*
files in the assets list for this release.
π Bug fixes
Closed issues #422, #436, #619, #631, #633, #640, #680, #734, #735,
759, #760, #764, #849, #996, #1000, #1008, #1019, #1032, #1033,
1034, #1043, #1047, #1060, #1064, #1083, #1084, #1087, #1102, #1111,
1113, #1117, #1125, #1133, #1142, #1144, #1145, #1146, #1157, #1160,
1163, #1166, #1169, #1175, #1179, #1182, #1190, #1191, #1196, #1197,
1204, #1209, #1210, #1213, #1216, #1223, #1226, #1238, #1239, #1240,
1241, #1250, #1256, #1259, #1261, #1266, #1274, #1275, #1283, and
1291.
π Merged pull requests #1048, #1128, #1129, #1130, #1131, #1135, #1136,
1137, #1139, #1148, #1149, #1150, #1152, #1154, #1156, #1158, #1159,
1161, #1164, #1165, #1168, #1170, #1171, #1172, #1173, #1174, #1176,
1181, #1183, #1186, #1188, #1192, #1193, #1194, #1195, #1199, #1200,
1202, #1203, #1205, #1207, #1211, #1214, #1215, #1218, #1219, #1221,
1224, #1225, #1227, #1228, #1230, #1231, #1232, #1234, #1242, #1243,
1244, #1245, #1246, #1247, #1248, #1251, #1252, #1254, #1255, #1258,
1263, #1265, #1268, #1269, #1270, #1271, #1272, #1273, #1276, #1281,
1282, #1284, #1285, #1286, #1287, #1288, #1293, #1294, and #1295.