Concrete configurations contain a command, store, fixed input oracle, and cursor. Besides the congruence rules for sequence, the rules are 𝑋⟨𝐢𝐧𝐩𝐮𝐭𝑥,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝐬𝐤𝐢𝐩,𝑠[𝑥↦𝐼(𝑛)],𝐼,𝑛+1⟩C−Input𝑋⟨𝑥:=𝑎,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝐬𝐤𝐢𝐩,𝑠[𝑥↦[[𝑎]]𝑠],𝐼,𝑛⟩C−Assign[[𝑔]]𝑠=𝗍𝗋𝗎𝖾⟨𝐢𝐟𝑔𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝑐1,𝑠,𝐼,𝑛⟩C−If−T[[𝑔]]𝑠=𝖿𝖺𝗅𝗌𝖾⟨𝐢𝐟𝑔𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝑐2,𝑠,𝐼,𝑛⟩C−If−F.[[𝑔]]𝑠=𝗍𝗋𝗎𝖾⟨𝐚𝐬𝐬𝐞𝐫𝐭𝑔,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝐬𝐤𝐢𝐩,𝑠,𝐼,𝑛⟩C−Assert−T[[𝑔]]𝑠=𝖿𝖺𝗅𝗌𝖾⟨𝐚𝐬𝐬𝐞𝐫𝐭𝑔,𝑠,𝐼,𝑛⟩⟶𝖼𝖿𝖺𝗂𝗅(𝑠,𝐼,𝑛)C−Assert−F. Put 𝗎𝗇𝗋𝗈𝗅𝗅(𝑔,𝑐)=𝐢𝐟𝑔𝐭𝐡𝐞𝐧(𝑐;𝐰𝐡𝐢𝐥𝐞𝑔𝐝𝐨𝑐)𝐞𝐥𝐬𝐞𝐬𝐤𝐢𝐩. Then 𝑋⟨𝐰𝐡𝐢𝐥𝐞𝑔𝐝𝐨𝑐,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝗎𝗇𝗋𝗈𝗅𝗅(𝑔,𝑐),𝑠,𝐼,𝑛⟩C−While⟨𝑐1,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝑐′1,𝑠′,𝐼,𝑛′⟩⟨𝑐1;𝑐2,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝑐′1;𝑐2,𝑠′,𝐼,𝑛′⟩C−Seq−Step𝑋⟨𝐬𝐤𝐢𝐩;𝑐,𝑠,𝐼,𝑛⟩⟶𝖼⟨𝑐,𝑠,𝐼,𝑛⟩C−Seq−Skip. Failure propagates through a surrounding sequence. The symbolic input, assignment, and branch rules are
⟨𝐢𝐧𝐩𝐮𝐭𝑥,𝜎,Φ,𝑛⟩⟶𝗌⟨𝐬𝐤𝐢𝐩,𝜎[𝑥↦𝛼𝑛],Φ,𝑛+1⟩
S-Input
⟨𝑥:=𝑎,𝜎,Φ,𝑛⟩⟶𝗌⟨𝐬𝐤𝐢𝐩,𝜎[𝑥↦[[𝑎]]𝜎],Φ,𝑛⟩
S-Assign
⟨𝐢𝐟𝑔𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝜎,Φ,𝑛⟩⟶𝗌⟨𝑐1,𝜎,Φ∧[[𝑔]]𝜎,𝑛⟩
S-If-T
⟨𝐢𝐟𝑔𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝜎,Φ,𝑛⟩⟶𝗌⟨𝑐2,𝜎,Φ∧¬[[𝑔]]𝜎,𝑛⟩
S-If-F
Symbolic conditionals fork and conjoin [𝑔]𝜎 or its integer complement; assertions fork into skip and a failure obligation; while unfolds exactly as C-While and then uses those conditional forks. Symbolic sequencing mirrors C-Seq-Step and C-Seq-Skip. No symbolic rule contains a satisfiability premise.
The graph representation maps 𝑢−𝑣≤𝑘 to 𝑣𝑘→𝑢. A checked negative-cycle certificate verifies that every selected edge occurs in the path condition, endpoints compose and close, and the weight sum is strictly negative. Models are accepted only after every atom and deterministic replay are checked; unknown retains the path.
Imperative information flow
Expressions have the join of the labels of their free variables. Commands use the program-counter judgment Γ⊢𝖨𝖥𝑝𝑐. Its assignment, sequence, branch, and loop rules are
Γ⊢𝑒:ℓ𝑝⊔ℓ⊑𝗌𝖾𝖼Γ(𝑥)
Γ⊢𝖨𝖥𝑝𝑥:=𝑒
IF-Assign
Γ⊢𝖨𝖥𝑝𝑐1Γ⊢𝖨𝖥𝑝𝑐2
Γ⊢𝖨𝖥𝑝𝑐1;𝑐2
IF-Seq
Γ⊢𝑏:ℓΓ⊢𝖨𝖥𝑝⊔ℓ𝑐1Γ⊢𝖨𝖥𝑝⊔ℓ𝑐2
Γ⊢𝖨𝖥𝑝𝐢𝐟𝑏𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2
IF-If
Γ⊢𝑏:ℓΓ⊢𝖨𝖥𝑝⊔ℓ𝑐
Γ⊢𝖨𝖥𝑝𝐰𝐡𝐢𝐥𝐞𝑏𝐝𝐨𝑐
IF-While
Skip is always admissible. The terminating evaluation rules are 𝑋⟨𝐬𝐤𝐢𝐩,𝑠⟩⇓𝖨𝖥𝑠E−Skip𝑋⟨𝑥:=𝑒,𝑠⟩⇓𝖨𝖥𝑠[𝑥↦[[𝑒]]𝑠]E−Assign⟨𝑐1,𝑠⟩⇓𝖨𝖥𝑠1⟨𝑐2,𝑠1⟩⇓𝖨𝖥𝑠2⟨𝑐1;𝑐2,𝑠⟩⇓𝖨𝖥𝑠2E−Seq[[𝑏]]𝑠=𝗍𝗋𝗎𝖾⟨𝑐1,𝑠⟩⇓𝖨𝖥𝑠′⟨𝐢𝐟𝑏𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝑠⟩⇓𝖨𝖥𝑠′E−If−T[[𝑏]]𝑠=𝖿𝖺𝗅𝗌𝖾⟨𝑐2,𝑠⟩⇓𝖨𝖥𝑠′⟨𝐢𝐟𝑏𝐭𝐡𝐞𝐧𝑐1𝐞𝐥𝐬𝐞𝑐2,𝑠⟩⇓𝖨𝖥𝑠′E−If−F. For 𝑤=𝐰𝐡𝐢𝐥𝐞𝑏𝐝𝐨𝑐, the two loop rules are [[𝑏]]𝑠=𝖿𝖺𝗅𝗌𝖾⟨𝑤,𝑠⟩⇓𝖨𝖥𝑠E−While−F[[𝑏]]𝑠=𝗍𝗋𝗎𝖾⟨𝑐,𝑠⟩⇓𝖨𝖥𝑠1⟨𝑤,𝑠1⟩⇓𝖨𝖥𝑠2⟨𝑤,𝑠⟩⇓𝖨𝖥𝑠2E−While−T. TINI quantifies over two derivations of this relation. It makes no conclusion when either derivation is absent.
Delete the input oracle and cursor from C-Assign, C-If-T, and C-If-F to obtain the assignment and branch rules of ⟶𝖨𝖥. Its sequence rules arise from C-Seq-Step and C-Seq-Skip; its loop rule arises from C-While. Those are all its rules; it has no input, assertion, or failure state.