22 lines
971 B
Python
22 lines
971 B
Python
import hypothesis.strategies as st
|
||
from hypothesis_cfg import ContextFreeGrammarStrategy
|
||
|
||
import stl
|
||
|
||
GRAMMAR = {
|
||
'phi': (('Unary', '(', 'phi', ')'), ('(', 'phi', ')', 'Binary', '(', 'phi',
|
||
')'), ('AP', ), ('LINEQ', ), ('⊥', ),
|
||
('⊤', )),
|
||
'Unary': (('~', ), ('G', 'Interval'), ('F', 'Interval'), ('X', )),
|
||
'Interval': (('', ), ('[1, 3]', )),
|
||
'Binary': ((' | ', ), (' & ', ), (' U ', ), (' -> ', ), (' <-> ',),
|
||
(' ^ ',)),
|
||
'AP': (('AP1', ), ('AP2', ), ('AP3', ), ('AP4', ), ('AP5', )),
|
||
'LINEQ': (('x > 4', ), ('y < 2', ), ('y >= 3', ), ('x + 2.0y >= 2', )),
|
||
}
|
||
|
||
SignalTemporalLogicStrategy = st.builds(lambda term: stl.parse(''.join(term)),
|
||
ContextFreeGrammarStrategy(
|
||
GRAMMAR,
|
||
max_length=15,
|
||
start='phi'))
|