Source document
- formula G (req → F ack)
- operators G always, F eventually
- listed the handshake, on a slide
Topic · linear temporal logic
Gist
Linear temporal logic is a formula over one path: always, eventually, next, until. Proof evaluates that formula on a finite boolean trace. proof simulate "G (req -> F ack)" --signals traces.json --length 10 names the first step where the formula is false. Kind2 still proves the contract. A lecture slide still defines the operators. Jama still authors.
proof simulate "G (req -> F ack)" --signals traces.json --length 10
Keep SPIN if you model-check a Promela program. Keep Kind2 if you need realizability. Proof does not turn a true step on one trace into a proof for every trace.
01 · The step nobody replayed
You can write G (req implies F ack) and still never load the ten steps where req rose and ack never followed.
The Kind2 / one-function H1 lives on Z3 and Kind2 on one function. The DO-333 H1 lives on DO-333. This page is the evaluator: one LTL string, one finite trace, a table of true and false at each step.
The engine is a pure Go parser. No solver is installed for this command. Operators are G, F, X, U, plus boolean connectives. Signals are boolean arrays. If you omit --signals, random traces are generated for the variables in the formula. Results are emitted only by the explicit proof simulate command. A true result means this trace satisfied the formula. It does not mean every trace will.
proof simulate "G (req -> F ack)" --signals traces.json --length 10
proof simulate "F x" --length 5
proof simulate "G (x -> F y)" --format json
On this install the teaching formula is handshake liveness: globally, a request is followed eventually by an ack. The miss is a request that never sees an ack before the trace ends.
02 · The exhibit
The lecture still matches the operators. The command will name the step where req rose and ack never followed. Click the tabs.
Source document
This push
req at step 2. No ack after it. The slide never said so.
Silent missSource document
Still last week's operators. Still no loaded trace.
Keep the slideProof
Same formula. A silent miss, or a named step. Click the tabs.
| Surface | What they do | What Proof does |
|---|---|---|
| Linear temporal logic | Modalities over one path. Wikipedia, CMU notes, IEEE. | proof simulate on a finite boolean trace. A false step is named. |
| SPIN / NuSMV | Model-check a program or a Kripke structure against LTL/CTL | Not this command. Proof does not ingest Promela. Kind2 is a different H1. |
| Kind2 / model checking | Prove a Lustre contract, or find a counterexample for all traces in the encoding | That H1 lives on Z3 and Kind2 and on DO-333. A true simulate run is not that proof. |
| Runtime verification | A monitor on a live execution, often LTL3 over infinite / unfinished traces | Not this product. Proof does not ship a runtime monitor. |
| Property based testing | Random inputs against a property, shrink a counterexample | That H1 lives on
property based testing
as proof proptest. A boolean trace is not a Hypothesis suite. |
| Jama / DOORS | Author and store the programme | Jama still authors. Proof holds the formula to a named trace and prints the failing step. |
The teaching trace is ten steps of req and ack. The formula is handshake liveness. When ack never follows a request before the end of the trace, the evaluator reports FALSE and the step.
{
"length": 10,
"signals": {
"req": [true, false, true, true, false, false, true, false, true, false],
"ack": [false, true, false, true, true, false, false, true, false, true]
}
}
proof simulate "G (req -> F ack)" --signals traces.json --length 10
TRUE on this file would mean the handshake held on these ten steps. It would not mean it holds on the next file, and it would not mean Kind2 proved the contract. We have not run this against a frozen SPIN / NuSMV corpus, and we have not claimed the evaluator is a model checker. The loss is named, not scored.
03 · The honest loss
Proof evaluates one finite boolean trace. It does not quantify over every trace. Kind2 still proves. Jama still authors.
Signals are booleans. There is no integer domain here. There is no past-time fragment. Random traces without --signals are a smoke test, not evidence. Simulation results are emitted only by the explicit command; nothing else in the audit pretends it ran LTL. Runtime verification stays unpaged: Proof does not ship a monitor on a live process. Object-code coverage on C still wants the qualified toolchain. That H1 lives on
MC/DC for Go
and on
Proof vs LDRA.
The Kind2 H1 stays on Z3 and Kind2 and on DO-333. Jama still authors.
04 · Nearby questions
What is LTL? Same cluster, acronym head. Same command. Not a twin. Do not rank the three-letter SERP.
How do I prove a specific function meets its specification using Z3 or Kind2? That is the solver H1, not a finite-trace evaluator. Z3 and Kind2.
What is DO-333? Formal methods supplement to DO-178C. Kind2 on the contract, not simulate on a JSON file. DO-333.
What is property based testing? Fixtures from authored variable semantics. property based testing.
What is runtime verification? A monitor on a live execution. Proof does not ship one. Do not mint that URL.
Is Proof a SPIN alternative? No. SPIN model-checks Promela. Proof names a false step on a finite trace.