Lua 5.4 · LaTeX maths · Chromium

A browser you program
in mathematics

Serious research happens in a tool designed for shopping, and the only thing anyone has added to it is a box that answers one question and forgets. Ohm puts a language in the browser instead — so the method is written down, priced before it runs, and the same next month.

Free. Models run locally by default — nothing leaves the machine until you turn on a switch that ships off.

One minute, captured from a real build: three shops read at once, and the answer you cannot get by looking.

The question is a program, not a prompt

Ask a chat assistant to compare two companies on two topics and it decides, invisibly and differently each time, how many searches to do, what to read and what to drop. Every one of those decisions is a place it can be wrong, and none of them is written down anywhere you can look.

# Two companies, two questions. The whole program.

sites  = [apple, nvidia]
topics = [latest earnings, layoffs]
jobs   = sites × topics

found = search(jobs, k: 3)
brief = summarize(found, words: 60)

table(brief)
$ npm run volt -- volt/02-research.volt

            · "apple"
            · "nvidia"
  sites     [] list("apple", "nvidia")
            · "latest earnings"
            · "layoffs"
  topics    [] list("latest earnings", "layoffs")
  jobs      × cross(sites, topics)
  found     ∀ Search(jobs; k=3)
  brief     ∀ Summarize(found; words=60)
            → table(brief)  ⟵ output

  10 nodes · at least 1 model call(s) · at least 1 page load(s)

A parser reads that — a real parser, no model involved — and produces a graph. Of the ten nodes, exactly one calls a model.

Three things follow from writing it down

1 Bounded

The model is not the author of the control flow. The product, the fan-out, the ordering and the table are determined by the text you wrote; the model fills named slots you can inspect.

Operators exist to constrain it with something outside itself — \Ground rewrites an answer to what the sources support, \Cite attaches the sources, \Verify returns true or false.

2 Visible first

Building the graph executes nothing, so you can look at the program and at what it will cost before committing to it. The estimate is a floor and says so; the interpreter reports the real number afterwards.

A chat box cannot show you this, because until it answers there is nothing to show.

3 Repeatable

Re-running after an edit recomputes the branch under what changed and reuses the rest. The artefact is a file: diff it, review it, hand it to a colleague who runs it and gets your result.

A transcript cannot be any of those things.

Measured, not asserted

The same six-line program, run twice — the second time with words: 60 changed to 30.

Nodes computedReusedPages fetchedModel calls
First run10044
After the edit2804
With no edit at all01000

Read the third column. The searches are not repeated, because nothing they depend on changed — and the planner knew that, and said so, before the second run started.

The Math view
The Maths view: the LaTeX you typed, typeset — and executable as written
The graph editor: a program as nodes and wires
The same kind of program as nodes and wires, for people who would rather draw it

Built, tested, packaged

Every number here is produced by npm run check, so if one of them is wrong the build says so.

3languages
49operators
441tests
16specifications
452spec nodes
49pages of docs

The honest limit. None of this makes a model truthful. A summary can still misread the page it was given, and \Ground is itself a model call that can be wrong.

What the mathematics buys is that the error is contained in a named node, visible in the graph, attached to the sources it claims and re-runnable against them — instead of dissolved into a paragraph of confident prose with no structure to audit. That is a much smaller claim than “no hallucination”, and unlike that claim it is true.