Here’s a complete minimal working example:
(* ****** ****** )
//
#include
“share/atspre_define.hats”
#include
“share/atspre_staload.hats”
//
( ****** ****** *)
extern
fun myCharFun(): char
typedef myInt = [i:nat] int (i)
typedef Point = @{m = myInt, n = myInt}
val mc = myCharFun()
val nc = myCharFun()
val m_in = g1ofg0_int(char2i(mc))
val n_in = g1ofg0_int(char2i(nc))
var data: Point?
val () = data.m := m_in
val () = data.n := n_in
// This works
val mn_i = data.m * data.n
val () = assertloc(mn_i > 0)
val mn = i2sz(mn_i)
// This doesn’t work
(* val () = assertloc(data.m > 2) )
( val () = assertloc(data.n > 2) )
( val mn = i2sz(data.m * data.n) *)On Wednesday, May 14, 2014 7:34:57 PM UTC-4, Brandon Barker wrote:
I seem to recall that integer multiplication can be handled by the solver,
but …
//m, n are of type: [i:nat] int (i)
// This works
val mn_i = m * n
val () = assertloc(mn_i > 0)
val mn = i2sz(mn_i)
// This doesn’t work
val () = assertloc(m > 2)
val () = assertloc(n > 2)
val mn = i2sz(m * n)
error(3): unsolved constraint: C3NSTRprop(main; S2Eapp(S2Ecst(>=);
S2EVar(3769->S2Eapp(S2Ecst(mul_int_int);
S2EVar(3767->S2Evar(n$6252(11369))), S2EVar(3768->S2Evar(n$6253(11370))))),
S2Eintinf(0)))