Property Specification Language: Difference between revisions

Content deleted Content added
Fismand (talk | contribs)
No edit summary
Fismand (talk | contribs)
Added description of the clock operator, and figures explaining both the trigger operator and the clock operator
Tag: possible conflict of interest
Line 8:
</source>
 
The property "aevery {{color|orange|readrequest}} request which is immediately followed by aan {{color|orange|grantack}} within at most 4 cycles, in which {{color|orange|cancel}} is not issuedsignal, should be followed by a compete {{color|orange|data transfer}}, where a complete data transfer is a sequence starting with signal {{color|orange|data_startstart}}, ending with signal {{color|orange|data_endend}} in which ' {{color|orange|busydata}} holdsshould inhold at least 8 times, not thenecessarily meantimeconsecutively can be expressed by the PSL formula:
<source> ((read; true[*0:4]; grantreq; ack) && (cancel[|=0])) |-> (data_startstart; busydata[*=8]; data_endend) </source>.
A trace satisfying this formula is given in the figure on the right.
[[File:The trigger operator - slide 1.jpg|thumb|a simple trace satisfying <source>(true[*]; req; ack) |=> (start; data[=8]; end)</source>]]
 
===Operators===
PSL's temporal operators can be roughly classified into LTL-style operators and regular-expression-style operators. Many PSL operators come in two versions, a strong version, indicated by an exclamation mark suffix ( {{color|red|!}} ), and a weak version. The ''strong version'' makes eventuality requirements (i.e. require that something will hold in the future), while the ''weak version'' does not. An ''underscore suffix'' ( {{color|red|_}} ) is used to differentiate ''inclusive'' vs. ''non-inclusive'' requirements. An {{color|red|a_}} and {{color|red|e_}} suffixes are used to denote ''universal'' vs. ''existential'' requirements. Exact time windows are denoted by {{color|red|[n]}} and flexible by {{color|red|[m..n]}}.
 
==== LTL-style Operators====
Below is a sample of some LTL-style operators of PSL.
 
==== SERE-style Operators====
Here {{color|orange|p}} and {{color|orange|q}} are any PSL formulas.
The most commonly used PSL operator is the "suffix-implication" operator (a.k.a the "triggers" operator), which is denoted by {{code|{{!}}=>}}. Its left operand is a PSL regular expression and its right operand is any PSL formula (be it in LTL style or regular expression style). The semantics of {{code|r{{!}}=>p}} is that on every time point i such that the sequence of time points up to i constitute a match to the regular expression r, the path from i+1 should satisfy the property p. This is exemplified in the pictures on the right.
{| class="wikitable"
[[File:The trigger operator - slide 2.jpg|thumb|path satisfying ''r triggers p'' in two non-overlapping ways]]
| always p
[[File:The trigger operator - slide 3.jpg|thumb|path satisfying ''r triggers p'' in two overlapping ways]]
| property p holds on every time point
[[File:The trigger operator - slide 4.jpg|thumb|path satisfying ''r triggers p' in three ways]]
|-
| never p
| property p does not holds on any time point
|-
| eventually! p
| there exists a future time point where p holds
|-
| next! p
| there exists a next time point, and p holds on this point
|-
| next p
| if there exists a next time point, then p holds on this point
|-
| next![n] p
| there exists an n-th time point, and p holds on this point
|-
| next[n] p
| if there exists an n-th time point, then p holds on this point
|-
| next_e![m..n] p
| there exists a time point, within m-th to n-th from the current where p holds.
|-
| next_e[m..n] p
| if there exists at least n-th time points, then p holds on one of the m-th to n-th points.
|-
| next_a![m..n] p
| there exists at least n more time points and p holds in all the time points between the m-th to the n-th, inclusive.
|-
| next_a[m..n] p
| p holds on all the next m-th through n-th time points, however many exist
|-
| p until! q
| there exists a time point where q holds, and p hold up until that time point
|-
| p until q
| p holds up until a time point where q hold, if such exists
|-
| p until!_ q
| there exists a time point where q holds, and p hold up until that time point and in that time point
|-
| p until q
| p holds up until a time point where q hold, and in that time point, if such exists
|-
| p before! q
| p holds strictly before the time point where q holds, and p eventually holds
|-
| p before q
| p holds strictly before the time point where q holds, if p never holds, then neither does q
|-
| p before!_ q
| p holds before or at the same time point where q holds, and p eventually holds
|-
| p before_ q
| p holds before or at the same time point where q holds, if p never holds, then neither does q
|-
|}
 
 
==== SERE-style Operators====
The most commonly used PSL operator is the "suffix-implication" operator (a.k.a the "triggers" operator), which is denoted by {{code|{{!}}->}}. Its left operand is a PSL regular expression and its right operand is any PSL formula (be it in LTL style or regular expression style). The regular expressions of PSL have the common operators for concatenation ({{color|red|;}}), Kleene-closure ({{color|red|*}}), and union ({{color|red|{{code|{{!}}}}}}), as well as operator for fusion ({{color|red|:}}), intersection ({{color|red|&&}}) and a weaker version ({{color|red|&}}), and many variations for counting {{color|red|[*n]}}, {{color|red|[->n]}}, {{color|red|[=n]}}.
 
The trigger operator comes in several variations, shown in the table below.
Line 186 ⟶ 131:
|}
 
==== LTL-style Operators====
Below is a sample of some LTL-style operators of PSL.
 
Here {{color|orange|p}} and {{color|orange|q}} are any PSL formulas.
{| class="wikitable"
| always p
| property p holds on every time point
|-
| never p
| property p does not holds on any time point
|-
| eventually! p
| there exists a future time point where p holds
|-
| next! p
| there exists a next time point, and p holds on this point
|-
| next p
| if there exists a next time point, then p holds on this point
|-
| next![n] p
| there exists an n-th time point, and p holds on this point
|-
| next[n] p
| if there exists an n-th time point, then p holds on this point
|-
| next_e![m..n] p
| there exists a time point, within m-th to n-th from the current where p holds.
|-
| next_e[m..n] p
| if there exists at least n-th time points, then p holds on one of the m-th to n-th points.
|-
| next_a![m..n] p
| there exists at least n more time points and p holds in all the time points between the m-th to the n-th, inclusive.
|-
| next_a[m..n] p
| p holds on all the next m-th through n-th time points, however many exist
|-
| p until! q
| there exists a time point where q holds, and p hold up until that time point
|-
| p until q
| p holds up until a time point where q hold, if such exists
|-
| p until!_ q
| there exists a time point where q holds, and p hold up until that time point and in that time point
|-
| p until q
| p holds up until a time point where q hold, and in that time point, if such exists
|-
| p before! q
| p holds strictly before the time point where q holds, and p eventually holds
|-
| p before q
| p holds strictly before the time point where q holds, if p never holds, then neither does q
|-
| p before!_ q
| p holds before or at the same time point where q holds, and p eventually holds
|-
| p before_ q
| p holds before or at the same time point where q holds, if p never holds, then neither does q
|-
|}
 
 
==== The Sampling Operators====
Sometimes it is desirable to change the definition of the ''next time-point'', for instance in multiply-clocked designs, or when a higher lever of abstraction is desired. The ''sampling operator'' (a.k.a ''the clock operator''), denoted {{color|red|@}}, is used for this purpose. The formula {{color|orange| p @ c }} where {{color|orange| p}} is a PSL formula and {{color|orange|c}} a PSL Boolean expressions holds on a given path if {{color|orange| p}} on that path projected on the cycles in which {{color|orange| c}} holds, as exemplified in the figures to the right.
[[File:Need for multiple clocks.jpg|thumb|path and formula showing need for a sampling operator]]
[[File:Multiple clocks.jpg|thumb|path and formula showing effect of the sampling operator @]]
 
The semantics of formulas with nested @ is a little subtle. The interested reader is referred to [2].
==== The Abort Operators ====
PSL has several operators to deal with truncated paths (finite paths that may correspond to a prefix of the computation). Truncated paths occur in bounded-model checking, due to resets and in many other scenarios. The abort operators, specify how eventualities should be dealt with when a path has been truncated. They rely on the truncated semantics proposed in [1].
Line 203 ⟶ 219:
|-
|}
 
==== The Sampling Operators====
 
 
Line 232 ⟶ 246:
*{{cite doi|10.1109/IEEESTD.2010.5446004}}
**IEC 62531:2012 {{cite doi|10.1109/IEEESTD.2012.6228486}}
*''Reasoning with Temporal Logic on Truncated Paths'', Cindy Eisner, Dana Fisman, John Havlicek, Yoad Lustig, Anthony McIsaac, David Van Campenhout
[http://www.research.ibm.com/people/e/eisner/papers/cav49.pdf] {{cite doi|10.1007/978-3-540-45069-6_3}}
*''The Definition of a Temporal Clock Operator'', Cindy Eisner, Dana Fisman, John Havlicek, Anthony McIsaac, David Van Campenhout
[http://www.cis.upenn.edu/~fisman/documents/EFHMV_ICALP03_full.pdf] {{cite doi|10.1007/3-540-45061-0_67}}
 
==External links==