Here's one way you could do it purely through PlusCal:
(* --algorithm Test
variables jobActive = FALSE;jobActivating = FALSE;
fair process Job="Job"
beginStartup:
while ~jobActive do
jobActivating := ~jobActivating;
end while;
end process;
fair+ process JobActivate="JA"
begin
ActivateJob:
await jobActivating;
jobActive := TRUE;
end process;
end algorithm; *)Here ActivateJob isn't always enabled, so is only guaranteed to run due to the strong fairness guarantee. Note this is only a sketch, I haven't run it to test that it doesn't have syntax errors or anything.
H
On 3/19/2025 10:40 AM, Stephan Merz wrote:
The problem here is that a first atomic step corresponding to the “either” statement chooses between moving to the inactive or active label. Your strong fairness annotation for active has no effect beyond the weak fairness assumed at the top level because there is only one possible continuation. What you want is imposing strong fairness on the branch taken by the “either” statement. This cannot be expressed in PlusCal but you can achieve what you want by adding the fairness hypothesis
SF_vars(initial /\ jobActive’)
to the specification at the TLA+ level.
Stephan
On 19 Mar 2025, at 15:52, jack malkovick <sillym...@xxxxxxxxx> wrote:
--I have this simple SF PlusCal example
(* --algorithm Test
variables jobActive = FALSE;
fair process Job="Job"
begin
initial:
while ~jobActive do
either
inactive:
jobActive := FALSE;
or
active:+
jobActive := TRUE;
end either;
end while;
end process;
end algorithm; *)
My expectation was that the spec will have this property
<>[][jobActive = TRUE]_vars
however it does not, the error trace is
<trace1.png>
--
You received this message because you are subscribed to the Google Groups "tlaplus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tlaplus+u...@xxxxxxxxxxxxxxxx.
To view this discussion visit https://groups.google.com/d/msgid/tlaplus/0075d026-4233-4758-9e39-89136257f118n%40googlegroups.com.
<trace1.png>
You received this message because you are subscribed to the Google Groups "tlaplus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tlaplus+u...@xxxxxxxxxxxxxxxx.To view this discussion visit https://groups.google.com/d/msgid/tlaplus/1BD4C44E-1A0B-4C9F-9616-0A6E7ED40DBE%40gmail.com.