Jason Morris

10/17/2022, 5:11 PM
Ever have one of those days where you realize the thing you are making is very possibly actually a completely different thing? Like, Blawx will allow you to run a query, in the absence of concrete facts, and will find all the various different reasoning paths that could be used to answer that query, and show them to you. If you recombine those explanations using disjunctions, you would have a single decision tree. Invert it, that tree is an imperative function. So... Blawx is maybe a tool for generating imperative code from declarative specifications, where the declarative specification is a law? 🤯

Mariano Guerra

10/17/2022, 6:09 PM
have you checked minikanren?


Jack Rusher

10/17/2022, 6:34 PM
Was just on my way to mention program synthesis and link this presentation 🙂

Jason Morris

10/17/2022, 6:35 PM
Yes, and I was blown away by it. But MiniKanren is very restrictive in the way you deal with negation. It's not realistic for a lot of my use cases, I don't think.
This is a different approach, because MiniKanren requires you to encode the compiler of your language into MiniKanren to reverse the compilation task. No need for that, here, because s(CASP) could convert your query into a sort of disjunctive normal form program that can be converted into an algorithm and implemented in whatever imperative languages you like.
That conversion, as of right now, strikes me as "possibly feasible" but remains a technical factor I don't fully understand. I will need to play with it and see if the intuition holds water.
Which, at this pace, I will have an opportunity to do when I am about 60. 🙄