The old objection to logic in the real world was that logic decides truth, and the world does not deliver truths; it delivers noisy, partial, surprising observations. A rule-based system that insists on truth either refuses to act or acts wrongly with full confidence.
This approach dodges the objection by changing what the logic is asked to do. It is not asked to decide what is true. It is asked to enumerate what is possible and to say how likely each possibility is. Uncertainty enters in two places, and both are explicit in the text. At every choice point, the weights encode the program's own uncertainty about what it will do next. At the boundary with the world, some rules consume resources the program never produces: observations that arrive from outside. Those rules carry weights too, so an observation is not a truth that overrides the model; it is an event the model had a price for. If the price was reasonable, the run continues and the likelihood updates. If the price was zero, the model was wrong in a specific place, and that place is named.
So: yes, uncertainty is anticipated, but only within the vocabulary the program has. This is the honest limit. The program cannot be surprised by something it has no word for; an observation outside its predicate set is not "unlikely," it is unrepresentable, and detecting it needs machinery outside the measure. Likewise, the weights are only as true as whoever fitted them, and a model can be smoothly, confidently wrong if its rules are the wrong rules with well-fitted rates. What the approach guarantees is not correctness but accountability: when the world and the program disagree, the disagreement is located, priced, and expressible as an edit.
Is it a solution to the logic-versus-uncertainty problem, a step, or a different form of computation? I would say all three, in different senses.
- It solves a specific version of the problem: a deterministic executable and a probabilistic model of the same behaviour are, by construction, the same object, so they cannot disagree. Everyone who has maintained a controller and a separate simulator of it knows what that removes.
- It is a step on the larger problem, because it fixes the vocabulary in advance. The open-world problem, finding out that your predicates are the wrong predicates, is not solved by a measure over proofs; it is moved to the loop around the program, where a person or a model proposes new rules and a gate decides whether to admit them. The measure makes that loop possible, by telling you when and where you need it, but it does not close it alone.
- And it is a different form of computation, in that execution and inference are the same act. Running the program forward is sampling a proof; scoring a trajectory is weighing a proof; learning is adjusting the weights on proofs you have seen. A conventional program computes a result; this kind computes a result and knows how likely it was to compute it. That is a smaller thing than general intelligence and a larger thing than a planner. It is a behaviour that carries its own model of itself, which is what you need before anything can be made responsible for what it does.
That last point is the practical reason it matters for devices: a system that can say "this is what I expected, this is what happened, and here is the gap, in your own words" can be supervised, by a person or by something much less trustworthy than a person, without handing either of them the controls.