mirror of
https://github.com/GaloisInc/cryptol.git
synced 2024-11-24 06:52:44 +03:00
Remove unused primitive fromThen
.
This commit is contained in:
parent
61a17adb02
commit
24fb6c9511
@ -260,11 +260,6 @@ primitive (!) : {a, b, c} (fin a, fin c) => [a]b -> [c] -> b
|
|||||||
*/
|
*/
|
||||||
primitive (!!) : {a, b, c, d} (fin a, fin d) => [a]b -> [c][d] -> [c]b
|
primitive (!!) : {a, b, c, d} (fin a, fin d) => [a]b -> [c][d] -> [c]b
|
||||||
|
|
||||||
primitive fromThen : {first, next, bits, len}
|
|
||||||
( fin first, fin next, fin bits
|
|
||||||
, bits >= width first, bits >= width next
|
|
||||||
, lengthFromThen first next bits == len) => [len][bits]
|
|
||||||
|
|
||||||
primitive fromTo : {first, last, bits} (fin last, fin bits, last >= first,
|
primitive fromTo : {first, last, bits} (fin last, fin bits, last >= first,
|
||||||
bits >= width last) => [1 + (last - first)][bits]
|
bits >= width last) => [1 + (last - first)][bits]
|
||||||
|
|
||||||
|
@ -117,11 +117,6 @@ primsPlaceHolder=1;
|
|||||||
% (/$) : {a} (Arith a) => a -> a -> a
|
% (/$) : {a} (Arith a) => a -> a -> a
|
||||||
% number : {val, rep} (Literal val rep) => rep
|
% number : {val, rep} (Literal val rep) => rep
|
||||||
% elem : {n, a} (fin n, Cmp a) => a -> [n]a -> Bit
|
% elem : {n, a} (fin n, Cmp a) => a -> [n]a -> Bit
|
||||||
% fromThen :
|
|
||||||
% {first, next, bits, len} (fin first, fin next, fin bits,
|
|
||||||
% bits >= width first, bits >= width next, first != next,
|
|
||||||
% lengthFromThen first next bits == len) =>
|
|
||||||
% [len][bits]
|
|
||||||
% fromThenTo :
|
% fromThenTo :
|
||||||
% {first, next, last, a, len} (fin first, fin next, fin last,
|
% {first, next, last, a, len} (fin first, fin next, fin last,
|
||||||
% Literal first a, Literal next a, Literal last a, first != next,
|
% Literal first a, Literal next a, Literal last a, first != next,
|
||||||
|
@ -452,19 +452,6 @@ updatesEnd xs0 idxs vals = xss!0
|
|||||||
| b <- vals
|
| b <- vals
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
|
||||||
* A finite arithmetic sequence starting with 'first' and 'next',
|
|
||||||
* stopping when the values would wrap around modulo '2^^bits'.
|
|
||||||
*
|
|
||||||
* '[a,b..]' is syntactic sugar for 'fromThen`{first=a,next=b}'.
|
|
||||||
* '[a..]' is syntactic sugar for 'fromThen`{first=a,next=a+1}'.
|
|
||||||
*/
|
|
||||||
primitive fromThen : {first, next, bits, len}
|
|
||||||
( fin first, fin next, fin bits
|
|
||||||
, bits >= width first, bits >= width next
|
|
||||||
, first != next
|
|
||||||
, lengthFromThen first next bits == len) => [len][bits]
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A finite sequence counting up from 'first' to 'last'.
|
* A finite sequence counting up from 'first' to 'last'.
|
||||||
*
|
*
|
||||||
|
@ -543,7 +543,7 @@ Cryptol primitives fall into several groups:
|
|||||||
|
|
||||||
* Indexing: `@`, `@@`, `!`, `!!`, `update`, `updateEnd`
|
* Indexing: `@`, `@@`, `!`, `!!`, `update`, `updateEnd`
|
||||||
|
|
||||||
* Enumerations: `fromThen`, `fromTo`, `fromThenTo`, `infFrom`, `infFromThen`
|
* Enumerations: `fromTo`, `fromThenTo`, `infFrom`, `infFromThen`
|
||||||
|
|
||||||
* Polynomials: `pmult`, `pdiv`, `pmod`
|
* Polynomials: `pmult`, `pdiv`, `pmod`
|
||||||
|
|
||||||
@ -648,13 +648,6 @@ Cryptol primitives fall into several groups:
|
|||||||
> , ("updateEnd" , updatePrim updateBack)
|
> , ("updateEnd" , updatePrim updateBack)
|
||||||
>
|
>
|
||||||
> -- Enumerations:
|
> -- Enumerations:
|
||||||
> , ("fromThen" , vFinPoly $ \first ->
|
|
||||||
> vFinPoly $ \next ->
|
|
||||||
> vFinPoly $ \bits ->
|
|
||||||
> vFinPoly $ \len ->
|
|
||||||
> VList (Nat len)
|
|
||||||
> (map (vWordValue bits) (genericTake len [first, next ..])))
|
|
||||||
>
|
|
||||||
> , ("fromTo" , vFinPoly $ \first ->
|
> , ("fromTo" , vFinPoly $ \first ->
|
||||||
> vFinPoly $ \lst ->
|
> vFinPoly $ \lst ->
|
||||||
> VPoly $ \ty ->
|
> VPoly $ \ty ->
|
||||||
@ -732,21 +725,11 @@ error if any of the input bits contain an evaluation error.
|
|||||||
> signedBitsToInteger (b0 : bs) = foldl f (if b0 then -1 else 0) bs
|
> signedBitsToInteger (b0 : bs) = foldl f (if b0 then -1 else 0) bs
|
||||||
> where f x b = if b then 2 * x + 1 else 2 * x
|
> where f x b = if b then 2 * x + 1 else 2 * x
|
||||||
|
|
||||||
Functions `vWord` and `vWordValue` convert from integers back to the
|
Function `vWord` converts an integer back to the big-endian bitvector
|
||||||
big-endian bitvector representation. If an integer-producing function
|
representation. If an integer-producing function raises a run-time
|
||||||
raises a run-time exception, then the output bitvector will contain
|
exception, then the output bitvector will contain the exception in all
|
||||||
the exception in all bit positions.
|
bit positions.
|
||||||
|
|
||||||
> -- | Convert an integer to big-endian binary value of the specified width.
|
|
||||||
> vWordValue :: Integer -> Integer -> Value
|
|
||||||
> vWordValue w x = VList (Nat w) (map (VBit . Right) (integerToBits w x))
|
|
||||||
>
|
|
||||||
> -- | Convert an integer to a big-endian format of the specified width.
|
|
||||||
> integerToBits :: Integer -> Integer -> [Bool]
|
|
||||||
> integerToBits w x = go [] w x
|
|
||||||
> where go bs 0 _ = bs
|
|
||||||
> go bs n a = go (odd a : bs) (n - 1) $! (a `div` 2)
|
|
||||||
>
|
|
||||||
> vWord :: Integer -> Either EvalError Integer -> Value
|
> vWord :: Integer -> Either EvalError Integer -> Value
|
||||||
> vWord w e = VList (Nat w) [ VBit (fmap (test i) e) | i <- [w-1, w-2 .. 0] ]
|
> vWord w e = VList (Nat w) [ VBit (fmap (test i) e) | i <- [w-1, w-2 .. 0] ]
|
||||||
> where test i x = testBit x (fromInteger i)
|
> where test i x = testBit x (fromInteger i)
|
||||||
|
@ -172,8 +172,6 @@ primTable = Map.fromList $ map (\(n, v) -> (mkIdent (T.pack n), v))
|
|||||||
lam $ \ x ->
|
lam $ \ x ->
|
||||||
splitAtV front back a =<< x)
|
splitAtV front back a =<< x)
|
||||||
|
|
||||||
, ("fromThen" , {-# SCC "Prelude::fromThen" #-}
|
|
||||||
fromThenV)
|
|
||||||
, ("fromTo" , {-# SCC "Prelude::fromTo" #-}
|
, ("fromTo" , {-# SCC "Prelude::fromTo" #-}
|
||||||
fromToV)
|
fromToV)
|
||||||
, ("fromThenTo" , {-# SCC "Prelude::fromThenTo" #-}
|
, ("fromThenTo" , {-# SCC "Prelude::fromThenTo" #-}
|
||||||
@ -1406,24 +1404,6 @@ updatePrim updateWord updateSeq =
|
|||||||
VStream vs -> VStream <$> updateSeq len eltTy vs idx' val
|
VStream vs -> VStream <$> updateSeq len eltTy vs idx' val
|
||||||
_ -> evalPanic "Expected sequence value" ["updatePrim"]
|
_ -> evalPanic "Expected sequence value" ["updatePrim"]
|
||||||
|
|
||||||
-- @[ 0, 1 .. ]@
|
|
||||||
fromThenV :: BitWord b w i
|
|
||||||
=> GenValue b w i
|
|
||||||
fromThenV =
|
|
||||||
nlam $ \ first ->
|
|
||||||
nlam $ \ next ->
|
|
||||||
nlam $ \ bits ->
|
|
||||||
nlam $ \ len ->
|
|
||||||
case (first, next, len, bits) of
|
|
||||||
(_ , _ , _ , Nat bits')
|
|
||||||
| bits' >= Arch.maxBigIntWidth -> wordTooWide bits'
|
|
||||||
(Nat first', Nat next', Nat len', Nat bits') ->
|
|
||||||
let diff = next' - first'
|
|
||||||
in VSeq len' $ IndexSeqMap $ \i ->
|
|
||||||
ready $ VWord bits' $ return $
|
|
||||||
WordVal $ wordLit bits' (first' + i*diff)
|
|
||||||
_ -> evalPanic "fromThenV" ["invalid arguments"]
|
|
||||||
|
|
||||||
-- @[ 0 .. 10 ]@
|
-- @[ 0 .. 10 ]@
|
||||||
fromToV :: BitWord b w i
|
fromToV :: BitWord b w i
|
||||||
=> GenValue b w i
|
=> GenValue b w i
|
||||||
|
@ -35,7 +35,7 @@ import Cryptol.Prims.Eval (binary, unary, arithUnary,
|
|||||||
logicBinary, logicUnary, zeroV,
|
logicBinary, logicUnary, zeroV,
|
||||||
ccatV, splitAtV, joinV, ecSplitV,
|
ccatV, splitAtV, joinV, ecSplitV,
|
||||||
reverseV, infFromV, infFromThenV,
|
reverseV, infFromV, infFromThenV,
|
||||||
fromThenV, fromToV, fromThenToV,
|
fromToV, fromThenToV,
|
||||||
transposeV, indexPrim,
|
transposeV, indexPrim,
|
||||||
ecToIntegerV, ecFromIntegerV,
|
ecToIntegerV, ecFromIntegerV,
|
||||||
ecNumberV, updatePrim, randomV, liftWord,
|
ecNumberV, updatePrim, randomV, liftWord,
|
||||||
@ -183,7 +183,6 @@ primTable = Map.fromList $ map (\(n, v) -> (mkIdent (T.pack n), v))
|
|||||||
tlam $ \c ->
|
tlam $ \c ->
|
||||||
lam $ \xs -> transposeV a b c =<< xs)
|
lam $ \xs -> transposeV a b c =<< xs)
|
||||||
|
|
||||||
, ("fromThen" , fromThenV)
|
|
||||||
, ("fromTo" , fromToV)
|
, ("fromTo" , fromToV)
|
||||||
, ("fromThenTo" , fromThenToV)
|
, ("fromThenTo" , fromThenToV)
|
||||||
, ("infFrom" , infFromV)
|
, ("infFrom" , infFromV)
|
||||||
|
@ -296,7 +296,6 @@ ppUse expr =
|
|||||||
| identText prim == "number" -> "literal or demoted expression"
|
| identText prim == "number" -> "literal or demoted expression"
|
||||||
| identText prim == "infFrom" -> "infinite enumeration"
|
| identText prim == "infFrom" -> "infinite enumeration"
|
||||||
| identText prim == "infFromThen" -> "infinite enumeration (with step)"
|
| identText prim == "infFromThen" -> "infinite enumeration (with step)"
|
||||||
| identText prim == "fromThen" -> "finite enumeration"
|
|
||||||
| identText prim == "fromTo" -> "finite enumeration"
|
| identText prim == "fromTo" -> "finite enumeration"
|
||||||
| identText prim == "fromThenTo" -> "finite enumeration"
|
| identText prim == "fromThenTo" -> "finite enumeration"
|
||||||
_ -> "expression" <+> pp expr
|
_ -> "expression" <+> pp expr
|
||||||
|
@ -3,14 +3,14 @@ Loading module Cryptol
|
|||||||
Loading module Main
|
Loading module Main
|
||||||
|
|
||||||
[error] at ./T146.cry:1:18--6:10:
|
[error] at ./T146.cry:1:18--6:10:
|
||||||
The type ?fv`864 is not sufficiently polymorphic.
|
The type ?fv`860 is not sufficiently polymorphic.
|
||||||
It cannot depend on quantified variables: fv`848
|
It cannot depend on quantified variables: fv`844
|
||||||
where
|
where
|
||||||
?fv`864 is type argument 'fv' of 'Main::ec_v1' at ./T146.cry:4:19--4:24
|
?fv`860 is type argument 'fv' of 'Main::ec_v1' at ./T146.cry:4:19--4:24
|
||||||
fv`848 is signature variable 'fv' at ./T146.cry:11:10--11:12
|
fv`844 is signature variable 'fv' at ./T146.cry:11:10--11:12
|
||||||
[error] at ./T146.cry:5:19--5:24:
|
[error] at ./T146.cry:5:19--5:24:
|
||||||
The type ?fv`866 is not sufficiently polymorphic.
|
The type ?fv`862 is not sufficiently polymorphic.
|
||||||
It cannot depend on quantified variables: fv`848
|
It cannot depend on quantified variables: fv`844
|
||||||
where
|
where
|
||||||
?fv`866 is type argument 'fv' of 'Main::ec_v2' at ./T146.cry:5:19--5:24
|
?fv`862 is type argument 'fv' of 'Main::ec_v2' at ./T146.cry:5:19--5:24
|
||||||
fv`848 is signature variable 'fv' at ./T146.cry:11:10--11:12
|
fv`844 is signature variable 'fv' at ./T146.cry:11:10--11:12
|
||||||
|
@ -65,11 +65,6 @@ Symbols
|
|||||||
foldr : {n, a, b} (fin n) => (a -> b -> b) -> b -> [n]a -> b
|
foldr : {n, a, b} (fin n) => (a -> b -> b) -> b -> [n]a -> b
|
||||||
foo : {a} a -> a
|
foo : {a} a -> a
|
||||||
fromInteger : {a} (Arith a) => Integer -> a
|
fromInteger : {a} (Arith a) => Integer -> a
|
||||||
fromThen :
|
|
||||||
{first, next, bits, len} (fin first, fin next, fin bits,
|
|
||||||
bits >= width first, bits >= width next, first != next,
|
|
||||||
lengthFromThen first next bits == len) =>
|
|
||||||
[len][bits]
|
|
||||||
fromThenTo :
|
fromThenTo :
|
||||||
{first, next, last, a, len} (fin first, fin next, fin last,
|
{first, next, last, a, len} (fin first, fin next, fin last,
|
||||||
Literal first a, Literal next a, Literal last a, first != next,
|
Literal first a, Literal next a, Literal last a, first != next,
|
||||||
|
@ -4,9 +4,9 @@ Loading module Main
|
|||||||
|
|
||||||
[error] at ./issue290v2.cry:2:1--2:19:
|
[error] at ./issue290v2.cry:2:1--2:19:
|
||||||
Unsolved constraints:
|
Unsolved constraints:
|
||||||
• n`845 == 1
|
• n`841 == 1
|
||||||
arising from
|
arising from
|
||||||
checking a pattern: type of 1st argument of Main::minMax
|
checking a pattern: type of 1st argument of Main::minMax
|
||||||
at ./issue290v2.cry:2:8--2:11
|
at ./issue290v2.cry:2:8--2:11
|
||||||
where
|
where
|
||||||
n`845 is signature variable 'n' at ./issue290v2.cry:1:11--1:12
|
n`841 is signature variable 'n' at ./issue290v2.cry:1:11--1:12
|
||||||
|
Loading…
Reference in New Issue
Block a user