Coverage for src/SymbSyntDec/pastSimple.py: 18%
38 statements
« prev ^ index » next coverage.py v7.5.4, created at 2024-08-11 18:00 +0200
« prev ^ index » next coverage.py v7.5.4, created at 2024-08-11 18:00 +0200
1from pylogics_modalities.parsers import parse_pltl
2from pylogics_modalities.syntax.base import (
3 And as PLTLAnd,
4 Or as PLTLOr,
5 Formula,
6 Implies as PLTLImplies,
7 Not as PLTLNot
8)
9from pylogics_modalities.syntax.pltl import (
10 Atomic as PLTLAtomic,
11 Before,
12 WeakBefore,
13 Historically,
14 Once
15)
16from typing import Set
19def past_simple_env(formula: Set[PLTLAtomic]) -> Formula:
20 or_u = None
21 for u1 in formula:
22 if or_u == None:
23 or_u = u1
24 and_neg_u = PLTLNot(u1)
25 and_u = u1
26 else:
27 or_u = PLTLOr(or_u, u1)
28 and_neg_u = PLTLAnd(and_neg_u, PLTLNot(u1))
29 and_u = PLTLAnd(and_u, u1)
30 not_and = PLTLNot(and_u)
32 phi2 = PLTLImplies(Before(or_u), and_neg_u)
33 phi3 = PLTLImplies(Before(Before(or_u)), or_u)
34 left = Once(PLTLAnd
35 (WeakBefore(parse_pltl("false")), or_u))
37 phi1 = PLTLImplies(or_u, not_and)
38 right = Historically(
39 PLTLAnd(phi1, phi2, phi3))
41 return PLTLAnd(left, right)
44def past_simple_con(formula: Set[PLTLAtomic]) -> Formula:
45 or_c = None
46 for c1 in formula:
47 if or_c == None:
48 or_c = c1
49 and_neg_c = PLTLNot(c1)
50 and_c = c1
51 else:
52 or_c = PLTLOr(or_c, c1)
53 and_neg_c = PLTLAnd(and_neg_c, PLTLNot(c1))
54 and_c = PLTLAnd(and_c, c1)
55 not_and_c = PLTLNot(and_c)
57 phi1 = PLTLImplies(Before(and_neg_c), PLTLAnd(or_c, not_and_c))
58 phi2 = PLTLImplies(Before(Before(and_neg_c)), and_neg_c)
59 right = Historically(PLTLAnd(phi1, phi2))
61 left = Once(PLTLAnd
62 (WeakBefore(parse_pltl("false")), and_neg_c))
64 return PLTLAnd(left, right)
67'''
68# Examples:
69formula_str = "!a S H(a)" # should be modifies to ( !a S (false T a))
70print(formula_str)
71formula_pltl = parse_pltl(formula_str)
72print(formula_pltl)
73formula_modified = modify(formula_pltl) # (since (not a) (triggers false a))
74print(formula_modified)
76formula_str = "O a" # should be modifies to (true S a)
77print(formula_str)
78formula_pltl = parse_pltl(formula_str)
79print(formula_pltl)
80# (since PropositionalTrue(Logic.PLTL) a)
81formula_modified = modify(formula_pltl)
82print(formula_modified)
84'''