--
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...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/0d5368ca-6221-404a-a144-362e874a1431n%40googlegroups.com.
<1>2. (ENABLED <<System>>_vars) <=> (ENABLED System)
BY <1>1, ENABLEDrules
You received this message because you are subscribed to a topic in the Google Groups "tlaplus" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/tlaplus/JNXR9DaJH2Q/unsubscribe.
To unsubscribe from this group and all its topics, send an email to tlaplus+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/6883916B-8B2D-426C-90C9-E7AC3781E981%40gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/CAGNViOMZFg-7EEeH9xFMHGdoqiwVgXPq%3DkJ33d324Xm4T%2BGHHw%40mail.gmail.com.
PROPOSITION Init /\ [][Next]_x => []Inv
<1>. Init => Inv
<1>. Inv /\ [Next]_x => Inv'
<1> QED BY PTL
Which is this Spot/LTL expression, ignoring stuttering: (init -> inv) -> G(inv & next -> Xinv) -> (init & Gnext -> Ginv)
What I learned from this: In TLA, there is an implied "always" around the induction step, which must be explicit in Spot form. It actually makes sense and years ago confused me when learning TLA, so I've finally come full circle on this :)
Proving an eventuality based on a single step could look like this:
PROPOSITION Init /\ [][Next]_x /\ WF_x(Next) => <>(x = "done")
<1>. Init => ENABLED <<Next>>_x
<1>. Init /\ <<Next>>_x => (x = "done")'
<1>. Init /\ [Next]_x => Init' \/ (x = "done")'
<1>. QED BY PTL
Which is approximately this, ignoring stuttering: (init -> enabled) -> G(init & next -> Xdone) -> (init & Gnext & (FGenabled -> GFnext) -> Fdone)
This shows how to deal with weak fairness.
Including stuttering complicates the expression, but shows that it would still be accepted:
G(init -> enabled) ->
G(init & next -> Xdone) ->
G(init & (next | stutter) -> X(init | done)) ->
(init & G(next | stutter) & (FGenabled -> GFnext) -> Fdone)
Adding stuttering makes it visible why each of the three steps before the QED is important.
Finally, I could convince myself why the proof you wrote for "RedBlue" is being accepted by PTL as sufficient. In skeleton form, it is:
PROPOSITION Init /\ [][Next]_x /\ WF_x(Next) => []((x = "start") => <>(~(x = "start") /\ (x = "done")))
<1>. x = "start" => ENABLED <<Next>>_x
<1>. x = "start" /\ [Next]_x => (x = "start")' \/ (~(x = "start") /\ (x = "done"))'
<1>. x = "start" /\ <<Next>>_x => (~(x = "start") /\ (x = "done"))'
<1>. QED BY PTL
Which is approximately this:
G(start -> enabled) ->
G(start & (next | stutter) -> X(start | (!start & done))) ->
G(start & next -> (!start & done)) ->
(init & G(next | stutter) & (FGenabled -> GFnext) -> G(start -> F(!start & done)))
I will note that when I first read your proof I had no sense at all as to why PTL accepted it. Seeing it this way, with explicit "always"s, it makes complete sense.
Now that I can translate between the two forms, and verify correctness both manually and with a computer, I should be able to come up with my own proofs without copying from existing proofs!
P.S.: I went back to Owl, and entered (negated) some of the Spot expressions above, and didn't get automata without acceptance cycles. I'm probably misunderstanding something about how to use Owl, but I guess it doesn't matter as long as I have the other website which does seem to work. Doing the same negation trick with the other website does show an automaton with no acceptance cycle.
P.P.S.: I think this shows a gap in the tutorials for the future TLAPS 1.5.0. With TLAPS 1.4.5, things made sense assuming a good understanding of TLA+ and of proof systems (Coq/Isabelle), because for proofs that rely very little on temporal propositions, one can copy-paste a few proof rules and be independent. With many more capabilities unlocked, I was not able to use them without also understanding something new - what LTL formulae are valid or not. I'm not sure if this is something people care about, especially as this has been unreleased for 2+ years, but IMHO it's useful.
Finally - thanks again, Stephan! It helped me a lot.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/6178623B-7D82-4711-854B-26091E6EF685%40gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/CAGNViONzco7vTcTobuMdVY24dYjUojSx7qvDfPRb3ABX9Q5xiw%40mail.gmail.com.