Theory Routed_Call_Programs
theory Routed_Call_Programs
imports DG_Spec_Sound DG_Indexed_Generator
"Voblint_Domain.Nonrelational_State"
begin
section ‹The equations one call action generates›
text ‹
What a routed call is, as solver input, before anything is claimed about its
soundness. Each callee a call action resolves to becomes one strategy program:
it runs the specification's entry transfer on the caller's local value,
chooses the callee's context from the entry half of the alternative that
produced, publishes that entered state at a global proxy key --- an
∗‹activation seed›, the only channel by which the entered state reaches
the callee's entry unknown --- reads the callee's exit back at that same
context, and runs the specification's combine against the alternative's
continuation half. The publication only joins into the seed and destabilizes
its readers; the exit read is the query that makes the solver evaluate the
callee at that context.
The other half of the protocol is the callee's own entry equation reading its
seed slot back: that is ‹routed_entry_seed_programs›.
This theory is construction and observation only: which unknowns a program
reads, which keys it publishes to, and lower bounds on what it contributes
at each. Whether those contributions are sound is ‹Routed_Context›'s
question, which fixes the shape built here as ‹cmb› and ‹extra› and
discharges CALL and COMB against it once.
›
subsection ‹The routed key space›