Souffle.js offers bindings to Soufflé, an open-source, parallel logic programming language.
Install the library with Yarn:
yarn add @nowarp/souffle
Here is an example implementing the Simple Typed VarPointsTo example:
const ctx = new SouffleContext("VarPointsTo");
// Declare relations
ctx.add(
relation("assign", [
["a", Type.symbol()],
["b", Type.symbol()],
]),
);
// Add facts
ctx.addFact("assign", ["v1", "v2"]);
// Define and output rules
ctx.add(
relation(
"alias",
[
["a", Type.symbol()],
["b", Type.symbol()],
],
"output",
),
);
ctx.add(rule([atom("alias", ["X", "X"])], [body(atom("assign", ["X", "_"]))]));
// Execute the Soufflé program
const executor = new SouffleSyncExecutor();
const out = executor.execute(ctx);
console.log("Raw Soufflé output:\n", out.results);
For the full example, see the source here.