frame
nanofil also configuration, config
A configuration is the whole state of a run in the model: the running frame, the suspended callers (each with how it will read its callee's result), memory, and the fuel left. A frame is one invocation: its function, its temporaries, its named locals, whether it is doomed, and its point.
Semantics.v:
configwithc_frame,c_callers,c_mem,c_fuel;framewithfr_fn,fr_env,fr_locals,fr_doomed,fr_at.A frame's
pointisSnapshot(a variadic callee about to snapshot its arguments, an allocation),Enter(about to run block l, entered from a predecessor or none), orExec(inside block l with instructions left, then a jump).interp.pl has no such term: it is big-step, so the frame is its
ctx...term and Env, the callers are Prolog's own stack, and memory and fuel aresMem, Fuel. The model makes them explicit so that Campaign 3's invariants can be stated between any two steps.
The subtlety: the proofs speak of every frame, not only the running one. The single-definition invariant holds in each waiting caller too, and a waiting caller is never doomed.
Defined in Semantics.v; see rocq.md, Decisions.
Linked from
- ExternalMachine.v: external_site
- ExternalMachine.v: resume_external
- How Iris works: The proof mode
- Identity.v: inst_step_ids
- Invariant.v: func_facts
- Language.v: Language
- Language.v: step_callers
- Machine.v: mstate
- Panics.v: never_panics
- Semantics.v: config
- Semantics.v: outcome
- Semantics.v: point
- Semantics.v: step_result
- Startup.v: main_void_entry
- Steps.v: find_direct_in
- parked
- step