(If you do not know about Nova, please read the first part)
In the first part, we've been able to produce a SNARK for a very particular case of a recursive function. It was first of all a recursive function from and to numbers and would only call itself recursively once in a branch: i.e., it had a linear call trace. We will show in this article how to construct SNARKs for general recursive functions
- might take/return data types instead of plain numbers
- might call themselves multiple times in a branch
- might call foreign functions, which could be mutually dependent on them