<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PSL%2FA_Practical_Introduction_to_PSL%2FSERE_Style%2Fru</id>
		<title>PSL/A Practical Introduction to PSL/SERE Style/ru - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PSL%2FA_Practical_Introduction_to_PSL%2FSERE_Style%2Fru"/>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/SERE_Style/ru&amp;action=history"/>
		<updated>2026-04-06T16:05:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://www.simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/SERE_Style/ru&amp;diff=3819&amp;oldid=prev</id>
		<title>ANA в 17:03, 31 декабря 2013</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/SERE_Style/ru&amp;diff=3819&amp;oldid=prev"/>
				<updated>2013-12-31T17:03:41Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:03, 31 декабря 2013&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 181:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 181:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;always {&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;req in&lt;/del&gt;;gnt} |-&amp;gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  (5.6a)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;always {&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;req_in&lt;/ins&gt;;gnt} |-&amp;gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  (5.6a)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;req out &lt;/del&gt;&amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;req_out &lt;/ins&gt;&amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;always {&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;req in&lt;/del&gt;;gnt} |=&amp;gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  (5.6b)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;always {&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;req_in&lt;/ins&gt;;gnt} |=&amp;gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  (5.6b)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;req out &lt;/del&gt;&amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;req_out &lt;/ins&gt;&amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ANA</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/SERE_Style/ru&amp;diff=3818&amp;oldid=prev</id>
		<title>ANA: Новая страница: «{{PSL TOC}}  =SERE Style=  Up until now, we have seen PSL properties that are built of Boolean expres- sions and temporal operators in LTL style. Another way to b…»</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/SERE_Style/ru&amp;diff=3818&amp;oldid=prev"/>
				<updated>2013-12-31T17:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «{{PSL TOC}}  =SERE Style=  Up until now, we have seen PSL properties that are built of Boolean expres- sions and temporal operators in LTL style. Another way to b…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{PSL TOC}}&lt;br /&gt;
&lt;br /&gt;
=SERE Style=&lt;br /&gt;
&lt;br /&gt;
Up until now, we have seen PSL properties that are built of Boolean expres-&lt;br /&gt;
sions and temporal operators in LTL style. Another way to build properties is&lt;br /&gt;
to use SEREs – Sequential Extended Regular Expressions. SEREs are similar&lt;br /&gt;
in spirit to standard regular expressions, like those used for pattern matching&lt;br /&gt;
in many applications. One difference is that the atoms of a SERE are Boolean&lt;br /&gt;
expressions, whereas the atoms of a standard regular expression are single&lt;br /&gt;
characters.&lt;br /&gt;
&lt;br /&gt;
A SERE is typically enclosed in curly braces, and the atoms of the SERE&lt;br /&gt;
are typically separated by semi-colons. For instance, &amp;lt;code&amp;gt;{a;b;c}&amp;lt;/code&amp;gt; is a SERE, and&lt;br /&gt;
SERE 5.1a is a more complicated SERE. SERE 5.1a describes a sequence of&lt;br /&gt;
cycles in which &amp;lt;code&amp;gt;(req_out &amp;amp;&amp;amp; !ack)&amp;lt;/code&amp;gt; is asserted on the first cycle, then &amp;lt;code&amp;gt;(busy &amp;amp;&amp;amp; !ack)&amp;lt;/code&amp;gt;&lt;br /&gt;
is asserted for zero or more cycles, indicated by the consecutive&lt;br /&gt;
repetition operator &amp;lt;code&amp;gt;[*]&amp;lt;/code&amp;gt;, and finally ack is asserted. Thus, SERE 5.1a matches&lt;br /&gt;
the sequence of cycles labeled as “1” in Trace 5.1(i).&lt;br /&gt;
&lt;br /&gt;
Don’t be tempted into reading more into a SERE than is actually there:&lt;br /&gt;
SERE 5.1a matches the sequence of cycles labeled as “2” in Trace 5.1(i) as well.&lt;br /&gt;
SERE 5.1a does not prohibit the assertion of busy during the last cycle of the&lt;br /&gt;
SERE. If it is important to exclude such behavior, busy must be mentioned&lt;br /&gt;
explicitly, as shown in SERE 5.1b. SERE 5.1b matches the sequence of cycles&lt;br /&gt;
labeled as “1” shown in Trace 5.1(i), but does not match the sequence of&lt;br /&gt;
cycles labeled as “2” in that trace.&lt;br /&gt;
&lt;br /&gt;
How is a SERE used? First, since a SERE is a property, it can be used&lt;br /&gt;
as a sub-property. For example, Property 5.2a holds if whenever there is an&lt;br /&gt;
assertion of &amp;lt;code&amp;gt;req_in &amp;amp;&amp;amp; gnt&amp;lt;/code&amp;gt; then starting on the next cycle we see a sequence&lt;br /&gt;
of cycles matching SERE 5.1a. Property 5.2a holds on Trace 5.2(i).&lt;br /&gt;
&lt;br /&gt;
NOTE: A SERE is a property, but a property is not a SERE. Thus, while&lt;br /&gt;
you can use a SERE as an operand of a temporal operator, you cannot embed&lt;br /&gt;
a temporal operator such as &amp;lt;code&amp;gt;always&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; inside of a SERE.&lt;br /&gt;
&lt;br /&gt;
Suppose now that we have a situation similar to that of Property 5.2a, but&lt;br /&gt;
in which a grant (assertion of signal &amp;lt;code&amp;gt;gnt&amp;lt;/code&amp;gt;) is given the cycle ''after'' the assertion of&lt;br /&gt;
&amp;lt;code&amp;gt;req_in&amp;lt;/code&amp;gt;. We could try to replace the Boolean expression &amp;lt;code&amp;gt;req_in &amp;amp;&amp;amp; gnt&amp;lt;/code&amp;gt; with&lt;br /&gt;
the temporal expression &amp;lt;code&amp;gt;req_in &amp;amp;&amp;amp; next gnt&amp;lt;/code&amp;gt;, as in Property 5.3a. However,&lt;br /&gt;
remember the lesson of Section 3.4: in Property 5.3a the current cycle of the&lt;br /&gt;
left-hand side &amp;lt;tt&amp;gt;(req_in &amp;amp;&amp;amp; next gnt)&amp;lt;/tt&amp;gt; is the same as the current cycle of the&lt;br /&gt;
right-hand side (because they are connected by the Boolean operator &amp;lt;tt&amp;gt;-&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Thus, the current cycle of &amp;lt;code&amp;gt;gnt&amp;lt;/code&amp;gt; (which is the operand of a &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; operator) is&lt;br /&gt;
the same as the current cycle of the SERE (which is also the operand of &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; operator). &lt;br /&gt;
This is slightly confusing, and indeed Property 5.3a is not in&lt;br /&gt;
the simple subset of PSL discussed in Chapter 9.&lt;br /&gt;
&lt;br /&gt;
Let’s modify Property 5.3a as shown in Property 5.3b. Now a single &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt;&lt;br /&gt;
operator is applied to both &amp;lt;code&amp;gt;gnt&amp;lt;/code&amp;gt; and the SERE, which are both operands of&lt;br /&gt;
the &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt; operator. Property 5.3b is equivalent to Property 5.3a, but is in the&lt;br /&gt;
simple subset, making the timing between &amp;lt;code&amp;gt;gnt&amp;lt;/code&amp;gt; and the SERE easier to see. If&lt;br /&gt;
we mean that the current cycle of the SERE should be the cycle ''after'' that of&lt;br /&gt;
&amp;lt;code&amp;gt;gnt&amp;lt;/code&amp;gt;, we can manipulate Property 5.3b by adding a &amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt; as in Property 5.3c.&lt;br /&gt;
However, the suffix implication operators provide a much easier way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
! [[Файл:Psl fig5.1.png]]&lt;br /&gt;
|-&lt;br /&gt;
!(i) SERE 5.1a matches both 1 and 2. SERE 5.1b matches 1, but not 2.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
{(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}                 (5.1a)&lt;br /&gt;
{(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack &amp;amp;&amp;amp; !busy}        (5.1b)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.1: Two simple SEREs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
! [[Файл:Psl fig5.2.png]]&lt;br /&gt;
|-&lt;br /&gt;
!(i) Property 5.2a holds&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
always ((req_in &amp;amp;&amp;amp; gnt) -&amp;gt;                                    (5.2a)&lt;br /&gt;
  next {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.2: A SERE is a property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center width=80%&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
always ((req_in &amp;amp;&amp;amp; next gnt) -&amp;gt;                            (5.3a)&lt;br /&gt;
   next {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack})&lt;br /&gt;
always (req_in -&amp;gt; next (gnt -&amp;gt;                             (5.3b)&lt;br /&gt;
   {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}))&lt;br /&gt;
always (req_in -&amp;gt; next (gnt -&amp;gt;                             (5.3c)&lt;br /&gt;
   next {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.3: Property 5.3a is not in the simple subset. Properties 5.3b and 5.3c are&lt;br /&gt;
in the simple subset, but are difficult to read. These properties can be&lt;br /&gt;
expressed more easily using suffix implication.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==5.1 Suffix implication (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;)==&lt;br /&gt;
&lt;br /&gt;
The ''suffix implication'' operators (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;) provide a way to link two&lt;br /&gt;
SEREs in such a way that the right-hand side starts when the left-hand side&lt;br /&gt;
finishes. The overlapping suffix implication operator (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt;) interprets “when&lt;br /&gt;
the left-hand side finishes” as “at the same cycle as the cycle in which the&lt;br /&gt;
left-hand side finishes”, while the non-overlapping suffix implication operator&lt;br /&gt;
(&amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;) interprets it as “the cycle after the cycle in which the left-hand side fin-&lt;br /&gt;
ishes”. Thus, Property 5.4a is equivalent to Property 5.3b, and Property 5.4b&lt;br /&gt;
is equivalent to Property 5.3c. Both Property 5.4a and Property 5.4b are eas-&lt;br /&gt;
ier to grasp than the equivalent property without suffix implication, and both&lt;br /&gt;
belong to the simple subset, discussed in Chapter 9.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
! [[Файл:Psl fig5.4.png]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
always {req_in;gnt} |-&amp;gt;                              (5.4a)&lt;br /&gt;
    {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;br /&gt;
always {req_in;gnt} |=&amp;gt;                              (5.4b)&lt;br /&gt;
    {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.4: Suffix implication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recall that the logical implication operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;) can be understood as an&lt;br /&gt;
if-then expression, with the else-part being implicitly true. The suffix implica-&lt;br /&gt;
tion operators (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;) can be understood the same way. The difference&lt;br /&gt;
between the logical implication operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;) and the suffix implication op-&lt;br /&gt;
erators (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;) is in the timing relationship between the if- and the&lt;br /&gt;
then-parts. While the current cycle of the then-part of a logical implication&lt;br /&gt;
operator (-&amp;gt;) is the same as the current cycle of its if-part, the current cycle&lt;br /&gt;
of the then-part of a suffix implication operator (&amp;lt;code&amp;gt;|-&amp;gt;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;|=&amp;gt;&amp;lt;/code&amp;gt;) is the first cycle&lt;br /&gt;
of the ''suffix'' of the trace that remains once the if-part has been seen. This is&lt;br /&gt;
illustrated for Properties 5.4a and 5.4b in Traces 5.4(i) and 5.4(ii).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
! [[Файл:Psl fig5.5.png]]&lt;br /&gt;
|-&lt;br /&gt;
! (i) A trace having multiple if-then pairs. Property 5.5a holds.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
always {req_in;gnt} |=&amp;gt;                                       (5.5a)&lt;br /&gt;
    {(req_out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.5: The if-part of another if-then pair may begin before the if-part or the&lt;br /&gt;
then-part of a previous if-then pair has completed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Traces 5.4(i) and 5.4(ii) there is a single assertion of signal &amp;lt;code&amp;gt;req_in&amp;lt;/code&amp;gt;.&lt;br /&gt;
If there are multiple assertions of &amp;lt;code&amp;gt;req_in&amp;lt;/code&amp;gt;, then of course we will be able to&lt;br /&gt;
identify multiple if-then pairs, as shown in Trace 5.5(i). Note that the if-part of&lt;br /&gt;
another if-then pair may begin before the if-part or the then-part of a previous&lt;br /&gt;
if-then pair has completed. For instance, the second if-then pair starts at cycle&lt;br /&gt;
7, before the then-part of the first if-then pair has completed. The third if-&lt;br /&gt;
then pair starts at cycle 8, before the then-part of the first if-then pair has&lt;br /&gt;
completed, and before the if-part of the second if-then pair has completed.&lt;br /&gt;
We have seen this kind of overlapping previously, in Traces 2.2(ii) and 2.3(iii).&lt;br /&gt;
Note that in Trace 5.5(i), the assertion of &amp;lt;code&amp;gt;ack&amp;lt;/code&amp;gt; at cycle 16 completes the then-&lt;br /&gt;
part of the second and of the third if-then pair. For a deeper discussion of this&lt;br /&gt;
phenomenon, see Section 13.4.2.&lt;br /&gt;
&lt;br /&gt;
Properties 5.6a and 5.6b hold on Trace 5.6(i) because there is no sequence&lt;br /&gt;
of cycles matching the left-hand side, thus the else-parts default to true at&lt;br /&gt;
every cycle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
! [[Файл:Psl fig5.6.png]]&lt;br /&gt;
|-&lt;br /&gt;
! (i) Properties 5.6a and 5.6b both hold&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
always {req in;gnt} |-&amp;gt;                               (5.6a)&lt;br /&gt;
    {(req out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;br /&gt;
always {req in;gnt} |=&amp;gt;                               (5.6b)&lt;br /&gt;
    {(req out &amp;amp;&amp;amp; !ack) ; (busy &amp;amp;&amp;amp; !ack)[*] ; ack}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Fig. 5.6: The else-part of a suffix implication defaults to true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==5.2 Weak and strong SEREs==&lt;/div&gt;</summary>
		<author><name>ANA</name></author>	</entry>

	</feed>