machine
nanofil also mstep
The machine of a runtime R, Machine R, is what one thread's program sees run under R: Semantics.v's steps, plus R's allocations and R's actions at safepoints. mstep is its step relation and mreachable its runs.
| Step | Is |
|---|---|
mstep_next | a step that allocates nothing |
mstep_alloc | an allocation at R's alloc; where R refuses there is no step, and the run traps out_of_memory |
mstep_safepoint | R's safepoint action, only before an instruction where at_safepoint holds or before a poll edge (safepoint_due) |
mstep_refines ties it to the bare semantics: from a ready state each machine step is a step_rel step or a safepoint action, so what is proved of those holds of every run of every runtime.
interp.pl has no counterpart: it is one runtime, built in. ExternalMachine.v extends the machine with labelled external calls without changing it.
The subtlety: the runtime acts before the instruction, so the instruction runs on what the runtime left, as native code runs after its pollcheck.
Defined in Machine.v; see rocq.md, Campaign 3: the machine of a runtime.
Linked from
- Chain.v: Hull
- Dominance.v: name_eqb_true
- Doomed.v: Doom
- Doomed.v: mstep_dinv
- ExternalCalls.v: span
- ExternalMachine.v: call_site
- Guard.v: Guards
- How Iris works
- Identity.v: ids
- Identity.v: mstep_persists
- Language.v: Language
- Logic.v: cell_bounds
- Machine.v: Machine
- Machine.v: cases
- Panics.v: refusal
- Persistence.v: hull_case
- Renew.v: Reuse
- Soundness.v: mstep_doom
- adequacy
- runtime
- step