Theory Int_Refinement_Control
theory Int_Refinement_Control
imports Int_Refinement
begin
section ‹How often to run the exchange, and what a run costs›
text ‹
The laws in @{theory Voblint_Analysis_Int.Int_Refinement} say what one
component may tell another; they say nothing about when to ask. This theory
settles that. ‹refine_round› is one full pass over the exchange; a
‹refine_mode› picks how many passes an analysis run takes --- ‹Refine_Never›
none, ‹Refine_Once› a single pass, ‹Refine_Fixpoint› passes until the value
stops changing.
The fixpoint mode is the awkward one. Iteration is a ‹while_option› loop, so
it returns ‹None› when it does not stabilize; ‹refine_fix› keeps the input in
that branch to stay a total function, while the generated code keeps running
the structural-equality loop. Every mode is proved reductive and
concretization-preserving, but only ‹Refine_Never› and ‹Refine_Once› are
monotone --- ‹refine_nonfixpoint_mono› --- which is why callers that need
monotonicity carry the ‹mode ≠ Refine_Fixpoint› side condition.
›