<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../unit.xsl"?>
<KIVSPEC name="synchasg"><SPECBODY>enrich <a href="../../../specs/path/export/unit.xml">path</a> with comment: This specification defines a synchronisation assignment, by defining
a function SA that gives the position of the synchronisation step. Based on
SA, the types FS, BS, SA (and the subtypes OD, ON of SA steps) can be defined.;
   
   functions 
      SA : path → nat; comment: a synchronisation assignment assigns for every MPath the position of the synchronisation step;
   predicates 
      OD : path; comment: the SA step is OD;
      OD : path × nat; comment: step n is an OD SA step;
      ON : path × nat; comment: step n is an ON SA step;
      BS : path × nat; comment: step n is a BS step;
      FS : path × nat; comment: step n is a BS step;
   variables 
      pa1, pa2 : path; 
   
   axioms 
      SA-less :  ⊦ MPath(pa) → SA(pa) &lt; # pa; comment: SA is unspecified for non-maximal paths;
      stepno-consistent :  ⊦ MPath(pa) ∧ MPath(pa0) ∧ n ≤ # pa ∧ m ≤ # pa0 ∧ pa[n] = pa0[m] → (SA(pa) &lt; n ↔ SA(pa0) &lt; m);
      OD-path-def
      : ⊦ 
        OD(pa) ↔ FPath(pa) ∧ (∀ pa1, pa2. pa1 .first = pa .last ∧ pa2 .first = pa .last ∧ MPath(pa + pa1) ∧ MPath(pa + pa2) → pa1 .last = pa2 .last)
      ;
      FS-pathstep-def :  ⊦ FS(pa, n) ↔ MPath(pa) ∧ (n &lt; SA(pa) ∨ SA(pa) &lt; n ∧ n &lt; # pa ∧ OD(pa to SA(pa))); used for : ls;
      BS-pathstep-def :  ⊦ BS(pa, n) ↔ MPath(pa) ∧ SA(pa) &lt; n ∧ n &lt; # pa ∧ ¬ OD(pa to SA(pa)); used for : ls;
      OD-pathstep-def :  ⊦ OD(pa, n) ↔ MPath(pa) ∧ n = SA(pa) ∧ OD(pa to SA(pa)); used for : ls;
      ON-pathstep-def :  ⊦ ON(pa, n) ↔ MPath(pa) ∧ n = SA(pa) ∧ ¬ OD(pa to SA(pa)); used for : ls;
   
end enrich</SPECBODY></KIVSPEC>
