Brandon , what I am trying to do is my inputs have relationship l <= r + 1
where l is a nat and r is a int and I want to ensure that result of my
function have property l==r+1.
Here is another example code of what I am trying to do :
#include âshare/atspre_define.hatsâ
#include âshare/atspre_staload.hatsâ
val () = println! (âroughâ)
(* l must always be >= 0 and return value must always have
following relation : l == r+1 )
( this function assumes that inputs are l >= 0 and l <= r+1 *)
fun just_a_test2 (l : int , r : int) : (int,int) = let
val () = assertloc (l >= 0 && l <= r+1)
in
if l <= r
then just_a_test2(l , r-1)
else (l,r)
end
val l = just_a_test2(0,10)
val l2 = just_a_test2(0,~1)
val () = println! (l.0 , â,â , l.1)
val () = println! (l2.0 , â,â , l2.1)
//val l3 = just_a_test2(0,~2) // this is invalid input and should fail
implement main0 () = ()On Friday, January 31, 2014 7:00:26 PM UTC+5:30, Brandon Barker wrote:
fun just_a_test {rgt : int} {lft : nat | lft <= rgt+1}
(left : int (lft) , right : int (rgt)) : [lft == rgt+1] void =
if (left <= right)
then just_a_test (left, right+1)
else ()