Spurious violation of an obvious temporal property
See original GitHub issueIn the specification below, it appears that TLC silently ignores the third conjunct of the Spec
definition. For this input I would expect either (1) no violation reported or (2) an error message indicating that TLC can’t check the specification as written.
(In this case, it is entirely possible that I have misunderstood the specification I wrote down. However, my intuition is that any property in the specification is a trivially-true temporal property.)
TrivialTemporalViolation.tla:
---- MODULE TrivialTemporalViolation ----
EXTENDS Naturals
VARIABLE x
Spec ==
/\ x = 1
/\ [][x' = x+1]_x
/\ [](x = 1) \* harsh restriction that forbids behaviors where x changes
Liveness ==
[](x = 1)
=========================================
TrivialTemporalViolation.cfg:
SPECIFICATION Spec
PROPERTY Liveness
$ tlc2 -deadlock TrivialTemporalViolation
TLC2 Version 2.15 of Day Month 20??
Running breadth-first search Model-Checking with fp 8 and seed -4070785743065743379 with 1 worker on 4 cores with 3641MB heap and 64MB offheap memory [pid: 62947] (Mac OS X 10.14.6 x86_64, Azul Systems, Inc. 11.0.1 x86_64, MSBDiskFPSet, DiskStateQueue).
Parsing file /Users/cloncari/sw/src/tla-examples/TrivialTemporalViolation.tla
Parsing file /private/var/folders/k0/tw__ldzn7r19gby9d93tffh40000gn/T/Naturals.tla
Semantic processing of module Naturals
Semantic processing of module TrivialTemporalViolation
Starting... (2020-10-29 17:58:21)
Computing initial states...
Finished computing initial states: 1 distinct state generated at 2020-10-29 17:58:21.
Error: Invariant Liveness is violated.
Error: The behavior up to this point is:
State 1: <Initial predicate>
x = 1
State 2: <Action line 9, col 11 to line 9, col 18 of module TrivialTemporalViolation>
x = 2
2 states generated, 2 distinct states found, 0 states left on queue.
The depth of the complete state graph search is 2.
Finished in 00s at (2020-10-29 17:58:21)
Issue Analytics
- State:
- Created 3 years ago
- Comments:8 (5 by maintainers)
Top Results From Across the Web
A Verifier for Temporal Properties - cs.wisc.edu
This is called a benign property violation. The property under discussion is ... Libraries and APIs are a major focus of temporal property...
Read more >A new simple test against spurious long memory using temporal ...
Simulations show that the test performs good in finite sample sizes, and is able to distinguish long memory from spurious processes with excellent...
Read more >Verification of temporal properties of asynchronous systems
Violation traces for temporal properties Whenever a property is violated, a witness of the violation, in the form of a violation trace exhibiting...
Read more >Spurious normativity enhances learning of compliance ... - PNAS
Some norms are relatively easy to explain: They may prohibit obviously ... of most research into the properties and origins of human normativity...
Read more >Spurious Regressions and Panel IV Estimation
reference to their time series properties, the correlation between Y and ... cassette tape sales instrument that is most obviously spurious.
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
I’ve already started looking at
SpecProcessor.java
on how to make TLC issue a warning. SpecProcessor could reject formulas starting with the box operator followed only by a state-level formulaS
, i.e.[]S
. This still allows meaningful fairness constraints such as weak fairness ([]<>(ENABLED <<A>>_v => <<A>>_v
). However, this would miss variants of[]S
such as~<>~S
. Perhaps, this is good enough given that TLC errors with “<> followed by action not of form <>_v” for a spec formulaInit /\ ~<>~[Next]_v
.Looks good to me!