juliett · N3 / RDF Surfaces reasoner in your browser

juliett lowers Notation3 (RDF Surfaces or =>/<= rules) to first-order logic and decides it with an SMT solver. This page runs the reasoner as WebAssembly, with no server. The emit verbs run entirely offline; the solver verbs load z3 (also WebAssembly) on demand.

Research software. Not for production.

starting…

Input · Notation3

Semantics
Modifiers

Output


      

      

Reading a verdict

  • INCONSISTENT · ENTAILED · UNSATISFIABLEsound: a proof; it holds however the open world is extended.
  • consistent · NOT ENTAILED · SATISFIABLE — only “no refutation in the lowered fragment”; a constraint z3 could not model may make it a false positive.
  • undetermined — z3 returned unknown (undecidable fragment or timeout).

juliett lowers your document to what z3 can decide, and lowering only ever drops detail — never adds it. So refutations survive, but “a model exists” answers are relative to what was lowered. Trust the sound side outright; read the other as not yet refuted.

Semantics · what tarski / una / herbrand mean

flagdistinct names?distinct existentials?readingenrico
tarski (default)no — may co-refermay coincidepure classical FOL / RDF Surfaces specrefused*
unayesmay coincideclassical + unique namesNOT ENTAILED
herbrandyesyes — distinctstandard names (what EYE computes)ENTAILED

herbrand = una + “distinct existentials are distinct too.” *tarski has no unique-name assumption, so log:notEqualTo on variables has no faithful image and is refused. The distinction is only observable through the equality builtins (log:equalTo/notEqualTo, owl:sameAs/differentFrom); on an equality-free document all three agree. Load the enrico example above and toggle the Semantics radio to watch the verdict flip.

arg-modes (with the query verb): the operational reading — a rule whose builtin has an unbound required input can never fire, so it is dropped before lowering, the way a saturation reasoner evaluates. A syntactic pre-filter outside z3, and a fourth knob alongside the three readings above. To mimic mainstream N3 reasoners such as EYE, select herbrand + arg-modes.

The reasoning core is the same Go code as the native juliett CLI, compiled to GOOS=js GOARCH=wasm; only the solver seam differs (the CLI shells out to a native z3, this page calls an in-browser z3). See web/z3.js for how to host z3 on a static site.