documentation fixes (tuples, spelling, other wibble)

This commit is contained in:
Dylan McNamee 2015-05-05 08:38:43 -07:00
parent aa4bd9c9b0
commit aa1565bac4
6 changed files with 32 additions and 9 deletions

View File

@ -197,7 +197,7 @@ sign. Examples:
() // A tuple with no components () // A tuple with no components
{ x = 1, y = 2 } // A record with two fields, `x` and `y` { x = 1, y = 2 } // A record with two fields, `x` and `y`
{} // A record with no fileds {} // A record with no fields
The components of tuples are identified by position, while the The components of tuples are identified by position, while the
components of records are identified by their label, and so the components of records are identified by their label, and so the
@ -224,16 +224,16 @@ record. For example:
type T = { sign :: Bit, number :: [15] } type T = { sign :: Bit, number :: [15] }
// Valid defintion: // Valid definition:
// the type of the record is known. // the type of the record is known.
isPositive : T -> Bit isPositive : T -> Bit
isPositive x = x.sign isPositive x = x.sign
// Invalid defintion: // Invalid definition:
// insufficient type information. // insufficient type information.
badDef x = x.f badDef x = x.f
The components of a tuple or a record may also be access by using The components of a tuple or a record may also be accessed using
pattern matching. Patterns for tuples and records mirror the syntax pattern matching. Patterns for tuples and records mirror the syntax
for constructing values: tuple patterns use parenthesis, while record for constructing values: tuple patterns use parenthesis, while record
patterns use braces. Examples: patterns use braces. Examples:
@ -242,12 +242,13 @@ patterns use braces. Examples:
distance2 { x = xPos, y = yPos } = xPos ^^ 2 + yPos ^^ 2 distance2 { x = xPos, y = yPos } = xPos ^^ 2 + yPos ^^ 2
f x = fst + snd where f p = x + y where
(x, y) = p
Sequences Sequences
========= =========
A sequence is a fixed-length collection of element of the same type. A sequence is a fixed-length collection of elements of the same type.
The type of a finite sequence of length `n`, with elements of type `a` The type of a finite sequence of length `n`, with elements of type `a`
is `[n] a`. Often, a finite sequence of bits, `[n] Bit`, is called a is `[n] a`. Often, a finite sequence of bits, `[n] Bit`, is called a
_word_. We may abbreviate the type `[n] Bit` as `[n]`. An infinite _word_. We may abbreviate the type `[n] Bit` as `[n]`. An infinite
@ -306,8 +307,11 @@ Explicit Type Instantiation
If `f` is a polymorphic value with type: If `f` is a polymorphic value with type:
f : { tyParam } f : { tyParam }
f = zero
f `{ tyParam = t } you can evaluate `f`, passing it a type parameter:
f `{ tyParam = 13 }
Demoting Numeric Types to Values Demoting Numeric Types to Values
@ -319,7 +323,7 @@ following notation:
`{t} `{t}
Here `t` should be a type expression with numeric kind. The resulting Here `t` should be a type expression with numeric kind. The resulting
expression is a finite word, which is sufficiently large to accomodate expression is a finite word, which is sufficiently large to accommodate
the value of the type: the value of the type:
`{t} :: {w >= width t}. [w] `{t} :: {w >= width t}. [w]

Binary file not shown.

View File

@ -199,6 +199,23 @@ that can be compared to each other:
Cryptol> :t (==) Cryptol> :t (==)
== : {a} (Cmp a) => a -> a -> Bit == : {a} (Cmp a) => a -> a -> Bit
Tuple Projection Syntax
-----------------------
In Cryptol version 1, we used the `project` function to extract items out of a tuple.
In Cryptol version 2, we use the same `.` notation as is used to extract items out
of records. Further, the `project` function was 1-based (the first element is at index 1
of the tuple), but the `.` version of project is now 0-based (so the first element is
at index 0 of the tuple). So, in Cryptol version 1:
Cryptol> project(1,3,(1,2,3))
1
in Cryptol version 2, becomes:
Cryptol> (1,2,3).0
1
Properties (theorems in version 1) Properties (theorems in version 1)
---------------------------------- ----------------------------------
@ -226,7 +243,7 @@ version 2, the `:modernize` command can help a lot. However it doesn't do the
whole job for you. This section describes some limitations and suggests whole job for you. This section describes some limitations and suggests
effective ways of translating your code. effective ways of translating your code.
Syntatic limitations Syntactic limitations
-------------------- --------------------
Currently, `:modernize`: Currently, `:modernize`:
@ -235,6 +252,7 @@ Currently, `:modernize`:
* doesn't automatically translate `take(3,xs)` to ``take`{3}xs``, * doesn't automatically translate `take(3,xs)` to ``take`{3}xs``,
* doesn't translate `**` to `^^`, * doesn't translate `**` to `^^`,
* doesn't turn `theorem` declarations into `property`'s. * doesn't turn `theorem` declarations into `property`'s.
* doesn't convert tuple `project` to the new `.` syntax
Feature requests have been filed for these limitations. Feature requests have been filed for these limitations.

Binary file not shown.

View File

@ -21,5 +21,6 @@ Summary of Changes
`[0 ...]:[inf][8]` |`[0 ..]:[inf][8]` | Both produce `[0 .. 255]`(repeated) `[0 ...]:[inf][8]` |`[0 ..]:[inf][8]` | Both produce `[0 .. 255]`(repeated)
`[9, 8 .. 0]` |`[9 -- 0]` | Step defines decreasing sequences `[9, 8 .. 0]` |`[9 -- 0]` | Step defines decreasing sequences
`&&, ||, ^` |`&, |, ^` | Boolean operator syntax `&&, ||, ^` |`&, |, ^` | Boolean operator syntax
`(1,2,3).0 (== 1)` |`project(1,3,(1,2,3)) (==1)` | Tuple projection syntax (and 0-based)
`property foo xs=...` |`theorem foo: {xs}. xs==`... | Properties replace theorems (see below) `property foo xs=...` |`theorem foo: {xs}. xs==`... | Properties replace theorems (see below)

Binary file not shown.