I'm using the mach.int
library in a specification (see also this question), and I'm trying to define a constant that is of type int32
:
let constant_out1: int32 = 1 in
…
However, when analyzing this, why3 returns the message:
This term has type int, but is expected to have type int32
I noticed that Bounded_int
(which Int32
instantiates with type int32
) has the following in it:
val of_int (n:int) : t
requires { "expl:integer overflow" in_bounds n }
ensures { to_int result = n }
However, I do not seem to be able to use this to cast 1
to int32
. For example, if I use:
let constant_out1: int32 = Int32.of_int(1) in
…
I get the message unbound symbol 'Int32.of_int'
. I've tried many permutations of this, all without any success. Can anyone provided guidance for how to tell why3 that I want 1
to be of type int32
?