How to implement a >=0 check in gnark for unsigned integers when a can be any integer (negative or positive) in the clear?

133 views Asked by At

I have the following block of code in golang in the clear.

for i := 0; i < 10; i++ {
     if val[i]>=0{
        postcheck[i] = val[i]
        bitpostcheck[i] = 1
     } else {
        postcheck[i] = 0
        bitpostcheck[i] = 0
     }
}

val[i] can be a negative or positive integer in the clear.

I translated the above code into gnark as follows:

for i := 0; i < 10; i++ {
    postcheck[i] = api.Select(val[i], val[i], frontend.Variable(0))
    bitpostcheck[i] = api.Select(val[i], frontend.Variable(1), frontend.Variable(0))
}

Here val, postcheck and bitpostcheck are all [10]frontend.Variable.

But I am getting an assertIsBoolean error, since in gnark the first variable of Select should be either 0 or 1 but val[i] can basically be any unsigned integer.

Since gnark only deals with unsigned integers, negative integers are represented as huge positive numbers like this in gnark.

Given all this information, how do I implement the golang clear code in gnark? basically the check val[i]>=0?

0

There are 0 answers