Running Example: Abstract Trace Differences #
This file formalizes the running example for abstract trace differences.
We instantiate the abstract difference computation AbstractDiff for the
example with processes:
PA = a.PA + a.b.0 (the P_A of the note)
PB = a.(PB + b.0) (the P_B of the note)
PBb0 = PB + b.0 (the reachable intermediate state)
b0 = b.0 (the stopping process)
Key results:
abstractDiff_PBb0_b0: marker present for(PBb0, {b0})→ not-preorderednot_abstractDiff_b0_PBb0: marker absent for(b0, {PBb0})→ b0 ≤ PBb0not_abstractDiff_PA_PB: marker absent for(PA, {PB})→ PA ≡ PB
b.0 has no a-derivative.
The a-shifted set of {b.0} is empty: b.0 has no a-derivative.
Abstract trace difference is present for (PBb0, {b0}).
Derivation (two-step lfp construction):
step:PBb0 --a--> PBb0, shifted setDer({b.0}, a) = ∅base: the empty competitor set triggers the base case ofDTrSharp.
Every trace of b0 is also a trace of PBb0:
b0 = b.0 can only do b to 0, and PBb0 = PB + b.0 can also do b to 0.
Every trace of PA is also a trace of PB.
Proved by simultaneous induction on TraceSem: for every reachable
successor state p of PA (i.e. p ∈ {PA, b0, zero}), every trace
of p is also a trace of the corresponding PB-side state.
Executable marker query for the running example.
Equations
- One or more equations did not get rendered due to their size.
Instances For
#eval runAbstractDiff PA {PB} #eval FiniteLTS.tracePreordered runLTS PA PB #eval runAbstractDiff PBb0 {b0}
The executable result for (b0, {PBb0}) agrees with AbstractDiff.
The executable result for (PA, {PB}) agrees with AbstractDiff.
Abstract trace difference is absent for (b0, {PBb0}).
Abstract trace difference is absent for (PA, {PB}).