Commit Graph

132 Commits

Author SHA1 Message Date
Brian Huffman
b9eb076441 Add docstring for 'RoundingMode'. Fixes #836. 2020-07-28 14:58:39 -07:00
Iavor Diatchki
1c34b8eb9b Add fpToRational fpFromRational and fpIsFinite.
These are useful for switching between rationals and floats.
This also cleans up the implementation a bit, removing some duplicated
code.

NOTE: I am not sure if the translation from `float` to `rational`
is quite right in the what-4 backend, but I can't think of a better
way to do it at the moment.
2020-07-15 17:50:15 -07:00
Iavor Diatchki
eed0bdeafa Adjust comment to match declared type 2020-07-14 15:36:56 -07:00
Rob Dockins
7b0f69de28 Implement an experimental parmap operation.
This is semantically the same as `map` on finite sequences,
but forks a separate Haskell thread for each element of the sequence.
When the GHC runtime is instructed to use multiple OS threads,
data-parallel exeuction can be achieved.
2020-07-09 10:54:03 -07:00
robdockins
87d5edab00
Documentation updates (#779)
* Add docstrings for all prelude functions and fix minor style issues.

Fixes #771

* Update `CryptolPrims` documentation

* Minor updates to the prelude

* Update CHANGES

* Updates to the cryptol book and CryptolPrims

* Fix several additional docstrings

* Specify and document properties of signed bitvector division.

Fixes #677

* Fixup test

* typos and style

* Regenerate PDFs
2020-06-30 10:58:25 -07:00
Iavor Diatchki
0047eaf77a Initial support for floating point computation 2020-06-29 15:31:34 -07:00
Rob Dockins
d2490e724f Implement roundToEven and roundAway.
The old `round` operation is renamed into `roundAway` to make its
semantics more obvious.
2020-06-25 13:52:36 -07:00
Rob Dockins
332a0a3fdc Add an assert combinator to the prelude.
Fix up fragile test outputs.
2020-06-19 12:11:29 -07:00
Rob Dockins
6bedcbb4b3 Add a new Eq typeclass for types that have equality tests.
The `(==)` and `(!=)` operators move into the new `Eq` typeclass,
which becomes a superclass of `Cmp` and `SignedCmp`.
2020-06-19 12:00:12 -07:00
Rob Dockins
88c98c4c03 Merge remote-tracking branch 'origin/master' into split-arith
Minor merge conflicts resolved.
2020-06-03 13:35:04 -07:00
Andrei Stefanescu
2ff4d4c031
Fix Array.cry comment. (#748) 2020-06-02 20:26:49 -07:00
Andrei Stefanescu
c1bdd77ff0
Add SMT Array primitives. (#732)
* Add SMT Array primitives.

* Move SMT Array primitives in Array.cry.

* Minor.
2020-06-02 15:00:25 -07:00
Rob Dockins
542debdb67 Documentation tweaks 2020-05-27 14:21:17 -07:00
Rob Dockins
8c6f8dcbe9 Reimplement (^^) as a primitive taking the exponent in class Integral 2020-05-26 15:13:08 -07:00
Rob Dockins
7f7fc813e6 Add a Literal first a constraint to fromTo.
This more clearly communicates the intent, which is that both
endpoints of the enumeration must be literals of the type
being enumerated.
2020-05-26 11:43:48 -07:00
Rob Dockins
e78757199e remove Z n types from class Integral 2020-05-26 11:38:59 -07:00
Rob Dockins
85e49a92db Rearrange the Cryptol prelude according to the new typeclass system 2020-05-22 15:39:38 -07:00
Rob Dockins
cfe790c13b Implement a new primitive type Rational.
Rational numbers are implemented as a pair of integers via the usual construction.
2020-05-14 17:48:54 -07:00
Rob Dockins
3eb31b904a Tweak the prelude 2020-05-14 16:08:01 -07:00
Rob Dockins
f6b929ace4 Implement (^^) via square-and-multiply rather than making it a primitive. 2020-05-14 09:23:58 -07:00
Rob Dockins
ada7f8ee9c Fix errors in prelude modifications 2020-05-13 13:25:37 -07:00
Rob Dockins
941f5a6b02 Revert "Remove the SignedCmp class and specialize the signed comparison operations"
This reverts commit ba99cc4924.
2020-05-13 09:39:29 -07:00
Rob Dockins
ba99cc4924 Remove the SignedCmp class and specialize the signed comparison operations
to bitvector types.
2020-05-12 17:42:52 -07:00
Rob Dockins
fdf52a64a5 Update Cryptol.cry based on discussions 2020-05-12 17:41:45 -07:00
Rob Dockins
625ee990dc Update Cryptol.cry with concrete design changes to support splitting the Arith class 2020-05-12 12:46:09 -07:00
Iavor Diatchki
c3eca4f22a Check that the declared type of prims matches the expected one.
Fixes #711
2020-05-05 14:30:25 -07:00
Brian Huffman
0203244cd6 Redefine prelude function iterate to preserve sharing.
Fixes #707.
2020-04-18 08:12:40 -07:00
Rob Dockins
f016a9a9fc Define carry and scarry instead of making them primitive. 2020-03-17 13:25:39 -07:00
Iavor Diatchki
a0b4b14f86 Make constraints on type constructors/functions explicit.
This is mostly working, but I still need to update the help on the REPL
to show the constraints.
2019-07-03 17:03:31 -07:00
Iavor Diatchki
971897d9ca Use 'Prop' instead of '@' to write the kind of a constraint.
This is more consistent with how we've been printing kinds for a while,
so no need to change the notation.
2019-07-03 10:21:04 -07:00
Iavor Diatchki
72068cb961 Move type-level primitives to the Prelude.
For the time being, there is still some information about them that
is duplicated in Cryptol.TypeCheck.TCon, but we at least the parsed syntax
does not depend on the typechecked syntax.
2019-07-02 17:34:36 -07:00
Brian Huffman
1e11ff6b8b Add type constraint synonyms (<) and (>).
Fixes #400.
2019-06-26 20:44:13 -07:00
Brian Huffman
10da255fd1 Re-implement infix type constraint (<=) as a constraint synonym.
Also removed special-case hack for (<=) in the renamer.

Also adapted test case output to account for the new prelude declaration.
2019-06-26 18:04:16 -07:00
Brian Huffman
69ebb77a56 Support indexing on the left-hand sides of declarations.
The declaration `xs @ i = e` is syntactic sugar for
`xs = generate (\i -> e)`.
2019-06-18 16:11:01 -07:00
Brian Huffman
2df66aa7c1 Add function generate to Cryptol prelude.
generate : {n, ix, a}
  (fin ix, n >= 1, ix >= width (n - 1)) => ([ix] -> a) -> [n]a
generate f = [ f i | i <- [0 .. n-1] ]
2019-06-18 15:39:13 -07:00
Brian Huffman
97fadf2c58 Update doc-strings for Cryptol prelude arithmetic operators.
Fixes #601.
2019-05-30 18:48:03 -07:00
Brian Huffman
7ea4884fdd Remove unused primitive type operator lengthFromThen. 2019-02-27 17:11:18 -08:00
Brian Huffman
24fb6c9511 Remove unused primitive fromThen. 2019-02-27 16:57:00 -08:00
Iavor Diatchki
5bad18d3d7 Fix broken library: constants must start with an identifier! :) 2019-01-09 11:31:25 -08:00
Iavor Diatchki
f0e9dcf471 Just a different example.
This used to work with Z3 4.7.1 but does not with 4.8.4
2019-01-09 11:26:53 -08:00
Iavor Diatchki
454dd58fbd Name some of the big numbers. 2019-01-09 11:26:14 -08:00
Brian Huffman
20b9b1c193 Rename prelude function width to length, and generalize its type.
Fixes #550.
2018-10-10 16:21:38 -07:00
Iavor Diatchki
ad766b3aa7 Reformulate the property, so that Z3 can still find models.
With the other formulation, Z3  became really bad at finding any kind
of model.  Basically, it would always answer `unsat` or `unknown`.

This is undesirable, because we use models when instantiating things
at the command line.  In those cases, however, we probably don't
need the rule at all...  Perhaps, we should provide a way to disable
the axioms when we are looking for models?
2018-09-15 11:04:37 +03:00
Iavor Diatchki
a8d5963bfa Add another property of width.
Fixes #548
2018-09-14 22:50:30 +03:00
Iavor Diatchki
4e843a3435 More consistent statement of axioms for cryWidthUnknown 2018-09-14 10:21:08 +03:00
Brian Huffman
9b97c74b48 Polishing of :help output.
:help with primitive types now uses vertical whitespace to match
the :help output for other types.

Help text for REPL commands can now contain linebreaks.

For quoted Cryptol syntax in docstrings, consistently use singlequotes
(') instead of backquotes (`). Backquotes are sometimes used within
the quoted code, so it's probably best to avoid using them for quotes.

Consistently capitalize and put a period at the end of docstrings.
2018-07-31 11:33:50 -07:00
Brian Huffman
9e7ae9f9ce Reintroduce demote as a copy of number for backward compatibility. 2018-07-27 14:01:18 -07:00
Brian Huffman
f609b36225 Rename primitive demote to the more self-explanatory name number.
The name "demote" is only meaningful to those who already know what
the Cryptol primitive does. Also, due to recent changes in the error
and warning messages, the name "demote" is showing up much more often
in REPL output. For example:

    Defaulting type argument 'rep' of 'demote' to [2]

    Showing a specific instance of polymorphic result:
      * Using 'Integer' for type argument 'rep' of 'Cryptol::demote'

These messages will hopefully be made less confusing to non-experts
if the name "demote" is replaced with "number".
2018-07-27 13:52:57 -07:00
Brian Huffman
ed757860bf Fix typos in Cryptol prelude docstrings. 2018-07-20 15:34:13 -07:00
Brian Huffman
95cedc3135 Send symbolic typechecking goals involving != to the SMT solver.
Fixes #528.
2018-07-18 18:35:50 -07:00