Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Opening this so that people can look at it in case people are interested.
There are systems out there that symbolically prove series of math statements. I've been playing around with cvc5, which supports a number of languages. If we were actually shipping things, their built in language might be better, since it has a few more data structures, but I initially targeted SMT2-LIB, since it runs on most solvers, like Microsoft's Z3.
I've been running it online at https://cvc5.github.io/
I've been manually putting in the header and footer like:
This PR isn't completely done. I took a lot of short cuts to get things running and vet the ideas that I had. There are a lot of things that aren't implemented.
The ideas I was exploring were:
To me, the answer of all three is YES.
Another thing that I started looking into was "would executing from the struct encoding be significantly faster than our proto walking approach?" - but I didn't bother going all the way there, so I think.. likely?
I think that this kind of points towards something Sergey was talking about a while ago, about the benefits of having an intermediary language that could do more things, that then compiled down into what was run in the SDK. I added things like numeric operators and validation, to start exploring that too.