# Re: [tlaplus] What's wrong with this temporal formula?

Thanks again! I'm afraid that my learning style is to dive straight in and ask questions when I mess up. You have been so helpful, I really appreciate it.

On Friday, April 30, 2021 at 2:46:46 PM UTC+1 Stephan Merz wrote:
P.S.: I realize that I was imprecise in my answer. If you want to check that your action formula holds at all transitions of a system whose variables are contained in the tuple vars, you should write

[][(y=0 /\ y' = 0) \/ (y # 0 /\ y' = y-1)]_vars

However, if you want to check that the formula is true for all transitions that change y, you should write

[][(y=0 /\ y' = 0) \/ (y # 0 /\ y' = y-1)]_y

Stephan

On Friday, April 30, 2021 at 3:17:44 PM UTC+2 Stephan Merz wrote:
As I wrote, this is an action formula, not a temporal formula expected for properties. If you want to check that this action formula holds at all transitions, you can write

[][(y=0 /\ y' = 0) \/ (y # 0 /\ y' = y-1)]_y

(you may also use the tuple "vars" as the subscript if it includes y).

Stephan

On 30 Apr 2021, at 15:09, c.burge...@gmail.com <c.burge...@xxxxxxxxx> wrote:

Thanks, clearly it doesn't help when I get my logical syntaxes confused!

I now have:

(y=0 /\ y' = 0) \/ (y # 0 /\ y' = y-1)

But when I put this as a property in TLC, I get the error:

"The property ... is not correctly defined."

On Friday, April 30, 2021 at 1:48:03 PM UTC+1 Stephan Merz wrote:
Hello,

1. "not equal" is written # in TLA+ (or /=), "~" is Boolean negation.

2. I believe "->" represents implication in your formula, but it is written "=>" in  TLA+.

3. The expressions on both sides of an implication should be Boolean, but the _expression_ on the right-hand side is y-1.

4. The (action) formula corresponding to your informal statement can be written as

\/ y' = 0
\/ y # 0 /\ y' = y-1

A similar formula (but with a slightly different meaning) is

y' = IF y # 0 THEN y-1 ELSE 0

Stephan

On 30 Apr 2021, at 14:39, c.burge...@gmail.com <c.burge...@xxxxxxxxx> wrote:

Hi again!

I have the following temporal formula:

y'= 0 \/ y ~0 -> y-1

Which I hope says that the next value of y is  zero or y-1 if y is not zero.

However, when I put this as a property in TLC, I get the error:

Was expecting ===== or more module body, encountered '~' in Properties at line 1 and token 'y'.

Obviously it's not happy with the ~ (equally unhappy with \lnot), but I'm not sure how to proceed from here!

--
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.