File: pow_unify.sail

package info (click to toggle)
sail-ocaml 0.19.1%2Bdfsg5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,008 kB
  • sloc: ml: 75,941; ansic: 8,848; python: 1,342; exp: 560; sh: 474; makefile: 218; cpp: 36
file content (18 lines) | stat: -rw-r--r-- 402 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* This used to produce an error when being rewritten into monadic
   form for Lem because the type checker could not unify 2 ^ 'ex1 with
   2 ^ 'ex2. */

default Order dec

$include <prelude.sail>

val f: int -> unit

val pow2 = pure "pow2" : forall 'n, 'n >= 0. int('n) -> int(2 ^ 'n)

register r: bits(32)

function f(n) = {
  m: int = n;
  assert(m >= 4 * pow2(unsigned(r[9 .. 6])) & m <= 2048);
}