Documentation

EqCheckingAbstractInterpretation.Trace.RunningExample

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:

  1. abstractDiff_PBb0_b0 : marker present for (PBb0, {b0}) → not-preordered
  2. not_abstractDiff_b0_PBb0 : marker absent for (b0, {PBb0}) → b0 ≤ PBb0
  3. not_abstractDiff_PA_PB : marker absent for (PA, {PB}) → PA ≡ PB

Abstract trace difference is present for (PBb0, {b0}).

Derivation (two-step lfp construction):

  • step: PBb0 --a--> PBb0, shifted set Der({b.0}, a) = ∅
  • base: the empty competitor set triggers the base case of DTrSharp.

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}