logic-asts 0.2.0__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. logic_asts-0.3.2/.github/workflows/ci.yml +38 -0
  2. logic_asts-0.3.2/.github/workflows/pypi.yml +69 -0
  3. {logic_asts-0.2.0 → logic_asts-0.3.2}/Makefile +4 -4
  4. {logic_asts-0.2.0 → logic_asts-0.3.2}/PKG-INFO +2 -2
  5. {logic_asts-0.2.0 → logic_asts-0.3.2}/pyproject.toml +3 -3
  6. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/__init__.py +1 -1
  7. logic_asts-0.3.2/src/logic_asts/base.py +346 -0
  8. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/__init__.py +3 -0
  9. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/ltl.py +54 -9
  10. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/strel.py +36 -1
  11. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/utils.py +6 -6
  12. {logic_asts-0.2.0 → logic_asts-0.3.2}/tests/test_base_logic.py +7 -2
  13. logic_asts-0.3.2/tests/test_ltl.py +57 -0
  14. {logic_asts-0.2.0 → logic_asts-0.3.2}/uv.lock +9 -2
  15. logic_asts-0.2.0/.envrc +0 -1
  16. logic_asts-0.2.0/.jj/.gitignore +0 -1
  17. logic_asts-0.2.0/.jj/repo/editor-OCpuoK.jjdescription +0 -10
  18. logic_asts-0.2.0/.jj/repo/index/operations/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0 -1
  19. logic_asts-0.2.0/.jj/repo/index/operations/00970a064cb6664697c3c18136ba7835d9b68c48f0c0d0ee468ab18abe56647aa9a9fd7b1e2664e991bba33d979ad6f9d4dbebf6b6fa315c0ed120973574391e +0 -1
  20. logic_asts-0.2.0/.jj/repo/index/operations/0eac0d04d45ac977ceadbed6e7cb2075f12849e2f56dbaf1bba2b23abf0d5be19c263e2a586ec1754f6a1ad37c2b3fc1709abf412fd9b82a8b481ff17a2f1313 +0 -1
  21. logic_asts-0.2.0/.jj/repo/index/operations/10505b29a3810a6ed4017a3caf07c884f5b3990f2226236b40aa85fc1feb781de807ffb2d5a85ba92472242866ca45d82c1d79f2a5059fa84657601f1d8015d0 +0 -1
  22. logic_asts-0.2.0/.jj/repo/index/operations/11c683f0cb03f64131192e1a1f35a3b9c1e5af83d4c97a11820e3731181b8f0488228b86c74c7455f73565e87b08c7376f3b6911ff4d8d12ea854ca1badd9cf0 +0 -1
  23. logic_asts-0.2.0/.jj/repo/index/operations/217a393256dcaac66b8394f4f1e5350b324c1cc0f8f0b969c7092315d9226a8096633fae61956ebbb3addb7e00c815829e329b7cbe6b9a26458b756a461152f2 +0 -1
  24. logic_asts-0.2.0/.jj/repo/index/operations/358df6caabc12b3ebc9a1f4c694c9350ced2719988b9ee69f927c3c369bc2628ecde82145a5c70fdedf3c00f319c307d893e51d0963d5fe1b83ac5bca5d0ba4d +0 -1
  25. logic_asts-0.2.0/.jj/repo/index/operations/38a5ac615170b00428f3d470044b4353ab4c557170ba8b87edc88f99cf9302ae396dba20ad4e7aa26c49dcfe5c660533513253155d11e7cbbe925f300ee73f32 +0 -1
  26. logic_asts-0.2.0/.jj/repo/index/operations/3df676c8f3cf41915cf2be94b5d797b39928c3b8e6666f7bcd96774ae79474d6b4029c2196646c6d053c5f22347086badfd7cbe605c2f0c008f36fa14634e94a +0 -1
  27. logic_asts-0.2.0/.jj/repo/index/operations/4177138b3b9b0b6c7fcac33f71cbe6b92b782dc251da456c3414dfd87eb09b9c509e2db3e9c4cced76f4672e4be0f28c8a9f4b3806162ee3152b5d6c023558b8 +0 -1
  28. logic_asts-0.2.0/.jj/repo/index/operations/48e786f5ecc1bafe5546d8a32eae13e5002b8fe8105d359f01aed52ef2d5051068bd374ac7e71da510f66c8d5c3e4becee6260862631810810332baf308d0e9d +0 -1
  29. logic_asts-0.2.0/.jj/repo/index/operations/4a539a9bb4a3fa0f7ca4a30f48948d307f4290cb6007e2c39f4275ed39feb7d288b8b7f310d15cc9a0e7ecc22700b5073d6502bfb24107684e29f50a9e78921e +0 -1
  30. logic_asts-0.2.0/.jj/repo/index/operations/4ba8bdb03834267acf2267ea8a27a95a9891586792729b6679aff7b536b4d412674f3ddb92521b6f65c917b065a3d64182acd5d0ca947946be3a80edabdd4bf6 +0 -1
  31. logic_asts-0.2.0/.jj/repo/index/operations/4fca88a3db325b2f9d834724b84578d67f689b902c6a5eb5c0a0c1f4e150017631176a92d1f183e1e1048ba29206a41765c3ec945676eb99ec6d9daa61159182 +0 -1
  32. logic_asts-0.2.0/.jj/repo/index/operations/59aad150f4d44036cf5a65b7430e1d1000af61b600935576fd2632015cbdacb30daa7ab31e2010eca1af26e6e8c425e790efdfe85abf9955fa08544e34f3b7b5 +0 -1
  33. logic_asts-0.2.0/.jj/repo/index/operations/6e572f25cafa2de02681f549c11de96036d1ae9bdd8968d9b9e556a3a0a3dc0225350f61f4e7c467be1858e71aa91d092e391d74a6dd47ca94ccb6e69f51814d +0 -1
  34. logic_asts-0.2.0/.jj/repo/index/operations/783692314af8832c0b8d7efde92719a63dd0b8ff58db32d9716ee69a4089c4c13e399561f5215303083d50b1dc3d7020b96fb681647fc70606bd8c14c74c43ea +0 -1
  35. logic_asts-0.2.0/.jj/repo/index/operations/795fae8eeadb692c16c5fa357e59eb1e454af9b986e1dd83f4bbbdfb3416e3b295e377a9cead5cf09fbb2084d591819bca12eda7e0cf8c7042c7d73f186f3e3a +0 -1
  36. logic_asts-0.2.0/.jj/repo/index/operations/7ef96c66c49728312e399a9a04fa1eed94a7a82faf9223911a0a873f7cfefe0c48771366dc9760d53496fd49f6e851490ee85097a729ffd550f7629c2acd0042 +0 -1
  37. logic_asts-0.2.0/.jj/repo/index/operations/80fd078ad9c7c181c37658adcc82d2d881274979bbe77aa4495419d97126da9298b9c19479786ee87f87c017ccf232b6f464390e4d4e8ee2763357d8b97420f5 +0 -1
  38. logic_asts-0.2.0/.jj/repo/index/operations/89e48d894646f17e708566bac7449ed0e1852b3acfa2fa4e2ccc6d78344c472980ece71dbd820d0bdb07614d5f14084fa53595860c644133748b40b104008a83 +0 -1
  39. logic_asts-0.2.0/.jj/repo/index/operations/8a4942e196bd5520d15f1b943fc3bebc516b2dd75ce66d0e96096c87b649e55ac30818b3350e488a8e489b8bd45ba9ede8f8beb4a41d8f8360d9d40662692b0f +0 -1
  40. logic_asts-0.2.0/.jj/repo/index/operations/8fa536caa95922a0c944247fea06703b6772fba73552f5e0e7626578ab3e5d976290cbb73e05808822bbcee22b84bd592f8c8feac0dac0be8f141e99e471ae2c +0 -1
  41. logic_asts-0.2.0/.jj/repo/index/operations/965b4b5dcff42b8d8ef715a5595c1d4027faf02b8dc04ea038230c54f30d0320d80902d3dd69923d3d4ec3a3da5c8ffdf9e064124c81caad84e2168f9a3b5516 +0 -1
  42. logic_asts-0.2.0/.jj/repo/index/operations/97616797b751fd71a218d2fd40f34a655a0586b50a02fce674c0d0125afdbd1607dff98fc2d45843f8defa1c7ced673ad73c1633bda0f3f9bf20cae6fa5fb90c +0 -1
  43. logic_asts-0.2.0/.jj/repo/index/operations/98fd2e8eedac710591c55a0ffe3b927d0853a0cf5bea34dd8d394b468f0261350b9db36727a3cca03e576571a88862d2e1b58d908d65b4413fd0a5fdffd93b48 +0 -1
  44. logic_asts-0.2.0/.jj/repo/index/operations/9f338bacf12d8a751009aec44b5596cef912c0e99b2987b8c239c1d0101367753aba311ee0b4032906062fd2670f1bb16fd0286efc641a02c160aa16ee2e57ad +0 -1
  45. logic_asts-0.2.0/.jj/repo/index/operations/a0178152e7163c13d0219f543c32d9dca99bb77ca6b9d66375f4236060cd602e4b29a5647101f5a3ce2db93b78ee3b6584bcc2750441cf1702ec64ff70d8c426 +0 -1
  46. logic_asts-0.2.0/.jj/repo/index/operations/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -1
  47. logic_asts-0.2.0/.jj/repo/index/operations/cc56da91d4dc9bf17e51345b72697cc308900b646e1cd8b50dc0897abf62d2841bb02b6dcdb06601a3f3f348d15dcdbb89275bd329a76b7ffba996c2b91dfaf2 +0 -1
  48. logic_asts-0.2.0/.jj/repo/index/operations/d05b1b6e033d81a2bce8f03f91b0aa47ca995668c317c6cd3fd5e2b0312d6eadab130fb6a0ffe4ba1bea816eae24923a0fca99e75baa6c020e083ce0fdafd90f +0 -1
  49. logic_asts-0.2.0/.jj/repo/index/operations/d0f1d33268caff9545a2bf7d4c2f9ee52f0d36dee45be0b470f168de1077b0bab7bd2df0b871de232504fa9e60283f0ec8d0ad5574b9e183e5e28d800daa6641 +0 -1
  50. logic_asts-0.2.0/.jj/repo/index/operations/d7f2d92345b897bb5777f2b8ef00e21aa2bee8702b14fbe14501ade2c75026a9f22ee9ffb0314a91fb6d6b4e9f54a7584e192eba932ccf0c18a38ebdcc7827c6 +0 -1
  51. logic_asts-0.2.0/.jj/repo/index/operations/e1f98647ba8bbad7c17d8eabce6547a7712979fe76c8bc02a1e4a1c795ef36d451ca10b7107cc082607be20b2bb2e77c9bc258a9c1a5500baf7d13d05ff7eecd +0 -1
  52. logic_asts-0.2.0/.jj/repo/index/operations/e520b2160bf2c32a67a528017b5192f87c68136db438cca6e7257eaae02540a0fbb803d936146f8c2f2a0610cb5389382580cd475a5e8e11b54649033a93da92 +0 -1
  53. logic_asts-0.2.0/.jj/repo/index/operations/e8f403c5c01baf346b67411cc9158805d23873c6dfd45c98f05ce94d50f0c64f105c858964bbea7543bd5aae866283edac07bbe4d0d1c3585dea5f7929064097 +0 -1
  54. logic_asts-0.2.0/.jj/repo/index/operations/f0d805e05cfc3637fb862929c0dbc67a2ba45e186f855f1c30b49eaac4e104ec3950e47e1fa3026c8046637df1d78fc818a6e3dfb84d7462c925d52446a48eff +0 -1
  55. logic_asts-0.2.0/.jj/repo/index/operations/f60decb80583abded0d4ba9da5b8b97f171f374dde82c905b25c4d75d2480b3dddab9feefba66e309683856034dd578eca41b40f448ce061e25b999142c1b342 +0 -1
  56. logic_asts-0.2.0/.jj/repo/index/operations/f882470fb88c2f30efafc55e7eb4f8d36a5f403df82e8a93a31c60b5a3d4f136e6e340cb9fc95170bfe01b4f82be2839945662feff658167dcd3201e5c6be810 +0 -1
  57. logic_asts-0.2.0/.jj/repo/index/segments/14cb6fdb1ccff4e4a1efd59cf00fdd9c400961e05e0dcf315f1f843b24bdefd636ae8519b9a2556e295bc0b3441ce3c8dd5319ab12c540cf2d1f3dc1a48b6f6b +0 -0
  58. logic_asts-0.2.0/.jj/repo/index/segments/1af54ef723073c7dc079dc88a103a604ec64551fe647cc244e2062ad6049053882deab9f377671f942e4d4c99f6d35c01518236b4a51ce96b3b4cf46848ccf52 +0 -0
  59. logic_asts-0.2.0/.jj/repo/index/segments/28bb22c322f273ed338b7e4e12f5ac1ae5b287f35443b9ee244d8082ed02e3d8dc0566572a9e3af75c948db3d187d74384451c2f2e565692ae2f81ccbe0c947f +0 -0
  60. logic_asts-0.2.0/.jj/repo/index/segments/2cb6d030eab0a49bdff619bbc23227da07901cec28cd42d66ea3a0c3c2c5161625b22eb31974a501d4072bf7bf6af67094802feb7c80b65c2f8ae2703bd45aab +0 -0
  61. logic_asts-0.2.0/.jj/repo/index/segments/302ce14ea7c5b375d6016e86b3bc9992f6240a50f6713e0b1a4cedc51a02163dd502d7abe7b54fdf03b4495b3e34757b16af4d7cd775e8ce71acabe92be6de3c +0 -0
  62. logic_asts-0.2.0/.jj/repo/index/segments/3167d24f4e71c4bf5c1f3bf8a730f4d90eedc5fbd3d763316274594c4e9aa836d2d9d454aa405c7088dea8148ef2becea86ba268e91f3507e6b44c7b7da19564 +0 -0
  63. logic_asts-0.2.0/.jj/repo/index/segments/35408099e97560996cb612b4149bd969101eba2f7efcbcf681edd04b90e75dc3bf38dd116b4cd2a2183778039d21b3a9063c9f1c2592d403420bc51d3b9822d3 +0 -0
  64. logic_asts-0.2.0/.jj/repo/index/segments/3a2b00e065cc51298660d38ad012ffed6076c2cee798e798e90310fed60a7417effffbb5fb32b0a30e3e85d45372325ac0c8f291c624c35ffa7328af68698ad2 +0 -0
  65. logic_asts-0.2.0/.jj/repo/index/segments/3a8f5f86431192a87ba94d9db5b2f978fa656a49ccbfb000c357c7900640f0048b41f725431273e9817b39f05b4e97216087188826e5b4566197bf6438569cca +0 -0
  66. logic_asts-0.2.0/.jj/repo/index/segments/3de822b7eac8abaa118331e089ca33f37aa5bbb9ef5bc0df068216705050dce04bac59ac54d9b53b3bdc575ea4c0306cc28f3bbc7fd10bfe08f7ab532dcb7e55 +0 -0
  67. logic_asts-0.2.0/.jj/repo/index/segments/4fd199a37a09f5f0062787447083adb7fc5d8ded1ae3bad5736c59d554da723b9edf88c92cafade6fc842a0ab4d4e8b3310f1ab523f5e3b3bc2fa762cb9aa9b6 +0 -0
  68. logic_asts-0.2.0/.jj/repo/index/segments/4fe6e973527707eb646cdfc1855c213c85a5104c1b680f60823648de4e6204ada9a0df9c566a3b20e89bb3f674b5be648cbb4dbcdf68cd576722a3d744519f69 +0 -0
  69. logic_asts-0.2.0/.jj/repo/index/segments/51eb2c81ed8f7981b2433d016f018582fc48140099673c9a00d0bbef325f5b4e935757418648821da1ea44cf64a300616f393cc65ede8ae383888076cc1de91d +0 -0
  70. logic_asts-0.2.0/.jj/repo/index/segments/70b14c835e21a79f7ec25177b506111dbe4e36d3fe2798d238d0aa0ffa06484a5617b250510e88fa22d4e2ec5741b7b6ea010b796a35ae6735c02e52455cb209 +0 -0
  71. logic_asts-0.2.0/.jj/repo/index/segments/76359c76817c1858802fcd7aa1f33b06abee41b5386a06eca503b70eb9439f6422a660311e3787b9f1568026170389745aaf1e3c74a6f7ced407b31b81e52d1b +0 -0
  72. logic_asts-0.2.0/.jj/repo/index/segments/79c1d931873e2b2c64bc538061993fb5b433a07cce6462c1a80e522fad2875570a157058b52ca3f1a576dc2783496d5f2176af2953107a8f3c81b790870a9c3c +0 -0
  73. logic_asts-0.2.0/.jj/repo/index/segments/7f35405a95696abc6b1524b01f88f8b0663568196f3721fe2e87fd4d024459b6e35f3930c49f686682801210ebc33b235e21c391a3e1ffb6fb42a30057914c97 +0 -0
  74. logic_asts-0.2.0/.jj/repo/index/segments/8204f4617412a15d50c27d36f8b799212795296a739130741624aa82539e1a9dd7cee3e3ec2341f8b7fde32fc49b652724110906237129ee8c942e3cc5c4ec39 +0 -0
  75. logic_asts-0.2.0/.jj/repo/index/segments/8ade145a1064ddf61af5e6fe2c6cd0d42aa1e84cbb6daadadf072bd419b8c23bd82b7d974596f852631f90808c153c446a7cd0cab135cc2b2e0b90e720651cd2 +0 -0
  76. logic_asts-0.2.0/.jj/repo/index/segments/92fb6d7770b1ac9a13d60bce8423c957db59abab79aa7290e949a0aa088e54c8c2e1614bfaa05c6931a5e18c6158ce4d338cc2100febf41a44ca0b5699fbebfe +0 -0
  77. logic_asts-0.2.0/.jj/repo/index/segments/9a372254bf244988b32d2c1e9bd9aaa42ecbffa48f4787027b2b6dc9f9ad3477172f1e464197f1e707ae38b4becac714c81847dff892b99b2fcf2868cb9b6425 +0 -0
  78. logic_asts-0.2.0/.jj/repo/index/segments/a452d1a7c379c860eb56b9fb3289713b1c97a17ab378aef7b4a6b2fba55e12737ed72a627a061d86d4975520deb8e9cf28109ffc2aaa1f1a3abf543f44d3f2ec +0 -0
  79. logic_asts-0.2.0/.jj/repo/index/segments/b5a696627ab19833d500b93520138708772edf21c2df25b7d7be447be00769605e874e2e103dc8b0cd4ac4f710d60e655249632ef59ceb22273035a33c230c95 +0 -0
  80. logic_asts-0.2.0/.jj/repo/index/segments/bcf46b9938e485484e358c4df254e40e8240a6fa116f7c2bbdbc7d367ff7d2d1e5c1955a339298fb61d3d8ea615d8424aca34d5310c828072017075c8fcb3964 +0 -0
  81. logic_asts-0.2.0/.jj/repo/index/segments/ce4eac1f3ea7d618d84ea665d1cce74959538db8bd580255df7083a1354c4396043ae8e3d6c42f54b7fff806d642dbdcff50ec3b59d0e79b894bab75d279d6a5 +0 -0
  82. logic_asts-0.2.0/.jj/repo/index/segments/d27ad326963b75736b636adad9fb812eb3f2871e0efb4bc7db37d4b701a4282911eaaee91bed3a759e940769b667be1ed66f2d7f2f41ac3906b87ab7eec19c3a +0 -0
  83. logic_asts-0.2.0/.jj/repo/index/segments/dac087f9295a24563c17b587948c5984e1538abb623b15c5e30bf1d8ffffc11e2b65f8b767ac292a8adf3c8df4bc244ca269c06391b4e20632c506470e650c7c +0 -0
  84. logic_asts-0.2.0/.jj/repo/index/segments/dd70ebd4d26c34c0b0e6e8558600792397e88602107dfeed052ddde32dd7a2b2e2649f700b2b6e2d36e186f1c64f00aabbb6fbf3bdd7236420c71687b3b8de4a +0 -0
  85. logic_asts-0.2.0/.jj/repo/index/segments/e6f7830699da0383e1bec49f743073ef82bb42186145bc077c99b68e35b8db470f24bec9ab6aef882126e5c24b74d0ca60df0439b4cb2a27e2e1c6c6a64d2c0b +0 -0
  86. logic_asts-0.2.0/.jj/repo/index/segments/ecd75f21f36d65727729be766c7b707fefb6ea96e9715944dd90c705012d203c30752483970e9ed81954a507adca6cdf5f5c1219819b16f14a95425287fda172 +0 -0
  87. logic_asts-0.2.0/.jj/repo/index/segments/f3e6a4b65ab6090d2559fe362303a8b82fe453509035b68b0d24bd589afc885fbc8c487586663095a8872493ef8e559eca6dcc848eec27d5fbab5594694e93cf +0 -0
  88. logic_asts-0.2.0/.jj/repo/index/type +0 -1
  89. logic_asts-0.2.0/.jj/repo/op_heads/heads/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -0
  90. logic_asts-0.2.0/.jj/repo/op_heads/type +0 -1
  91. logic_asts-0.2.0/.jj/repo/op_store/operations/00970a064cb6664697c3c18136ba7835d9b68c48f0c0d0ee468ab18abe56647aa9a9fd7b1e2664e991bba33d979ad6f9d4dbebf6b6fa315c0ed120973574391e +0 -4
  92. logic_asts-0.2.0/.jj/repo/op_store/operations/0eac0d04d45ac977ceadbed6e7cb2075f12849e2f56dbaf1bba2b23abf0d5be19c263e2a586ec1754f6a1ad37c2b3fc1709abf412fd9b82a8b481ff17a2f1313 +0 -0
  93. logic_asts-0.2.0/.jj/repo/op_store/operations/10505b29a3810a6ed4017a3caf07c884f5b3990f2226236b40aa85fc1feb781de807ffb2d5a85ba92472242866ca45d82c1d79f2a5059fa84657601f1d8015d0 +0 -6
  94. logic_asts-0.2.0/.jj/repo/op_store/operations/11c683f0cb03f64131192e1a1f35a3b9c1e5af83d4c97a11820e3731181b8f0488228b86c74c7455f73565e87b08c7376f3b6911ff4d8d12ea854ca1badd9cf0 +0 -0
  95. logic_asts-0.2.0/.jj/repo/op_store/operations/217a393256dcaac66b8394f4f1e5350b324c1cc0f8f0b969c7092315d9226a8096633fae61956ebbb3addb7e00c815829e329b7cbe6b9a26458b756a461152f2 +0 -4
  96. logic_asts-0.2.0/.jj/repo/op_store/operations/358df6caabc12b3ebc9a1f4c694c9350ced2719988b9ee69f927c3c369bc2628ecde82145a5c70fdedf3c00f319c307d893e51d0963d5fe1b83ac5bca5d0ba4d +0 -4
  97. logic_asts-0.2.0/.jj/repo/op_store/operations/38a5ac615170b00428f3d470044b4353ab4c557170ba8b87edc88f99cf9302ae396dba20ad4e7aa26c49dcfe5c660533513253155d11e7cbbe925f300ee73f32 +0 -5
  98. logic_asts-0.2.0/.jj/repo/op_store/operations/3df676c8f3cf41915cf2be94b5d797b39928c3b8e6666f7bcd96774ae79474d6b4029c2196646c6d053c5f22347086badfd7cbe605c2f0c008f36fa14634e94a +0 -0
  99. logic_asts-0.2.0/.jj/repo/op_store/operations/4177138b3b9b0b6c7fcac33f71cbe6b92b782dc251da456c3414dfd87eb09b9c509e2db3e9c4cced76f4672e4be0f28c8a9f4b3806162ee3152b5d6c023558b8 +0 -4
  100. logic_asts-0.2.0/.jj/repo/op_store/operations/48e786f5ecc1bafe5546d8a32eae13e5002b8fe8105d359f01aed52ef2d5051068bd374ac7e71da510f66c8d5c3e4becee6260862631810810332baf308d0e9d +0 -0
  101. logic_asts-0.2.0/.jj/repo/op_store/operations/4a539a9bb4a3fa0f7ca4a30f48948d307f4290cb6007e2c39f4275ed39feb7d288b8b7f310d15cc9a0e7ecc22700b5073d6502bfb24107684e29f50a9e78921e +0 -4
  102. logic_asts-0.2.0/.jj/repo/op_store/operations/4ba8bdb03834267acf2267ea8a27a95a9891586792729b6679aff7b536b4d412674f3ddb92521b6f65c917b065a3d64182acd5d0ca947946be3a80edabdd4bf6 +0 -4
  103. logic_asts-0.2.0/.jj/repo/op_store/operations/4fca88a3db325b2f9d834724b84578d67f689b902c6a5eb5c0a0c1f4e150017631176a92d1f183e1e1048ba29206a41765c3ec945676eb99ec6d9daa61159182 +0 -0
  104. logic_asts-0.2.0/.jj/repo/op_store/operations/59aad150f4d44036cf5a65b7430e1d1000af61b600935576fd2632015cbdacb30daa7ab31e2010eca1af26e6e8c425e790efdfe85abf9955fa08544e34f3b7b5 +0 -0
  105. logic_asts-0.2.0/.jj/repo/op_store/operations/6e572f25cafa2de02681f549c11de96036d1ae9bdd8968d9b9e556a3a0a3dc0225350f61f4e7c467be1858e71aa91d092e391d74a6dd47ca94ccb6e69f51814d +0 -4
  106. logic_asts-0.2.0/.jj/repo/op_store/operations/783692314af8832c0b8d7efde92719a63dd0b8ff58db32d9716ee69a4089c4c13e399561f5215303083d50b1dc3d7020b96fb681647fc70606bd8c14c74c43ea +0 -4
  107. logic_asts-0.2.0/.jj/repo/op_store/operations/795fae8eeadb692c16c5fa357e59eb1e454af9b986e1dd83f4bbbdfb3416e3b295e377a9cead5cf09fbb2084d591819bca12eda7e0cf8c7042c7d73f186f3e3a +0 -4
  108. logic_asts-0.2.0/.jj/repo/op_store/operations/7ef96c66c49728312e399a9a04fa1eed94a7a82faf9223911a0a873f7cfefe0c48771366dc9760d53496fd49f6e851490ee85097a729ffd550f7629c2acd0042 +0 -5
  109. logic_asts-0.2.0/.jj/repo/op_store/operations/80fd078ad9c7c181c37658adcc82d2d881274979bbe77aa4495419d97126da9298b9c19479786ee87f87c017ccf232b6f464390e4d4e8ee2763357d8b97420f5 +0 -4
  110. logic_asts-0.2.0/.jj/repo/op_store/operations/89e48d894646f17e708566bac7449ed0e1852b3acfa2fa4e2ccc6d78344c472980ece71dbd820d0bdb07614d5f14084fa53595860c644133748b40b104008a83 +0 -0
  111. logic_asts-0.2.0/.jj/repo/op_store/operations/8a4942e196bd5520d15f1b943fc3bebc516b2dd75ce66d0e96096c87b649e55ac30818b3350e488a8e489b8bd45ba9ede8f8beb4a41d8f8360d9d40662692b0f +0 -4
  112. logic_asts-0.2.0/.jj/repo/op_store/operations/8fa536caa95922a0c944247fea06703b6772fba73552f5e0e7626578ab3e5d976290cbb73e05808822bbcee22b84bd592f8c8feac0dac0be8f141e99e471ae2c +0 -0
  113. logic_asts-0.2.0/.jj/repo/op_store/operations/965b4b5dcff42b8d8ef715a5595c1d4027faf02b8dc04ea038230c54f30d0320d80902d3dd69923d3d4ec3a3da5c8ffdf9e064124c81caad84e2168f9a3b5516 +0 -0
  114. logic_asts-0.2.0/.jj/repo/op_store/operations/97616797b751fd71a218d2fd40f34a655a0586b50a02fce674c0d0125afdbd1607dff98fc2d45843f8defa1c7ced673ad73c1633bda0f3f9bf20cae6fa5fb90c +0 -0
  115. logic_asts-0.2.0/.jj/repo/op_store/operations/98fd2e8eedac710591c55a0ffe3b927d0853a0cf5bea34dd8d394b468f0261350b9db36727a3cca03e576571a88862d2e1b58d908d65b4413fd0a5fdffd93b48 +0 -0
  116. logic_asts-0.2.0/.jj/repo/op_store/operations/9f338bacf12d8a751009aec44b5596cef912c0e99b2987b8c239c1d0101367753aba311ee0b4032906062fd2670f1bb16fd0286efc641a02c160aa16ee2e57ad +0 -4
  117. logic_asts-0.2.0/.jj/repo/op_store/operations/a0178152e7163c13d0219f543c32d9dca99bb77ca6b9d66375f4236060cd602e4b29a5647101f5a3ce2db93b78ee3b6584bcc2750441cf1702ec64ff70d8c426 +0 -0
  118. logic_asts-0.2.0/.jj/repo/op_store/operations/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -5
  119. logic_asts-0.2.0/.jj/repo/op_store/operations/cc56da91d4dc9bf17e51345b72697cc308900b646e1cd8b50dc0897abf62d2841bb02b6dcdb06601a3f3f348d15dcdbb89275bd329a76b7ffba996c2b91dfaf2 +0 -5
  120. logic_asts-0.2.0/.jj/repo/op_store/operations/d05b1b6e033d81a2bce8f03f91b0aa47ca995668c317c6cd3fd5e2b0312d6eadab130fb6a0ffe4ba1bea816eae24923a0fca99e75baa6c020e083ce0fdafd90f +0 -0
  121. logic_asts-0.2.0/.jj/repo/op_store/operations/d0f1d33268caff9545a2bf7d4c2f9ee52f0d36dee45be0b470f168de1077b0bab7bd2df0b871de232504fa9e60283f0ec8d0ad5574b9e183e5e28d800daa6641 +0 -0
  122. logic_asts-0.2.0/.jj/repo/op_store/operations/d7f2d92345b897bb5777f2b8ef00e21aa2bee8702b14fbe14501ade2c75026a9f22ee9ffb0314a91fb6d6b4e9f54a7584e192eba932ccf0c18a38ebdcc7827c6 +0 -0
  123. logic_asts-0.2.0/.jj/repo/op_store/operations/e1f98647ba8bbad7c17d8eabce6547a7712979fe76c8bc02a1e4a1c795ef36d451ca10b7107cc082607be20b2bb2e77c9bc258a9c1a5500baf7d13d05ff7eecd +0 -4
  124. logic_asts-0.2.0/.jj/repo/op_store/operations/e520b2160bf2c32a67a528017b5192f87c68136db438cca6e7257eaae02540a0fbb803d936146f8c2f2a0610cb5389382580cd475a5e8e11b54649033a93da92 +0 -4
  125. logic_asts-0.2.0/.jj/repo/op_store/operations/e8f403c5c01baf346b67411cc9158805d23873c6dfd45c98f05ce94d50f0c64f105c858964bbea7543bd5aae866283edac07bbe4d0d1c3585dea5f7929064097 +0 -4
  126. logic_asts-0.2.0/.jj/repo/op_store/operations/f0d805e05cfc3637fb862929c0dbc67a2ba45e186f855f1c30b49eaac4e104ec3950e47e1fa3026c8046637df1d78fc818a6e3dfb84d7462c925d52446a48eff +0 -0
  127. logic_asts-0.2.0/.jj/repo/op_store/operations/f60decb80583abded0d4ba9da5b8b97f171f374dde82c905b25c4d75d2480b3dddab9feefba66e309683856034dd578eca41b40f448ce061e25b999142c1b342 +0 -4
  128. logic_asts-0.2.0/.jj/repo/op_store/operations/f882470fb88c2f30efafc55e7eb4f8d36a5f403df82e8a93a31c60b5a3d4f136e6e340cb9fc95170bfe01b4f82be2839945662feff658167dcd3201e5c6be810 +0 -0
  129. logic_asts-0.2.0/.jj/repo/op_store/type +0 -1
  130. logic_asts-0.2.0/.jj/repo/op_store/views/02bcfaf082f500471d9e64f32d8a416230c679efe7bd33a33b1c6a3ba93a1bd1613d1b35a8db3fa553be4de2cf8690cb186f07261f949c05746513a96d31216e +0 -0
  131. logic_asts-0.2.0/.jj/repo/op_store/views/05abd424e86f22b95bc13365d9ccd010d0270b1113176bb49207c9797f4d3cf9e4f16a080893ec62f48ad6df75dbf0a482ee57d582a31da99cf211337262d0e3 +0 -20
  132. logic_asts-0.2.0/.jj/repo/op_store/views/074d293e16ad48bc27ad56ed7cb6ba4bf6de5f7c2f599a4768ea031929d00a8efec3b7193cccff05fcd6c159a25b04e9f0c6bf3c5f0bc0c4a93f420d5662f214 +0 -0
  133. logic_asts-0.2.0/.jj/repo/op_store/views/18a7526ed56e1c26ea3e895b33f6bce20ac5c3451e6d8fe6fffcae8e93c674574fb9bf8196991951fcc430fbc2e4657aca66137337e5398546314c073cc62c44 +0 -0
  134. logic_asts-0.2.0/.jj/repo/op_store/views/334fb674fee13ba5b698363f69eea78b3aba386a0375453dc45922742ff69be920e4f0460dbb5f44b4f45f0f65f841d3e62b5a128a0b22de8b91f6dc64894709 +0 -16
  135. logic_asts-0.2.0/.jj/repo/op_store/views/50451898bf52647dc89928cb16ab6a728f3013a8eb85d8bff2b14318f4816af1e7f6a38ebfc98dabe17be52096ae1ab9994093694712d5a2a8b6e7b610dc5450 +0 -14
  136. logic_asts-0.2.0/.jj/repo/op_store/views/5536907112b3426eb5355dce462f99064ae03046ae6c3f1e897ae03784f7be3f7287c85ace6a85a5672402d9949357c2be92a1b589335d6111a08933c3b0016d +0 -24
  137. logic_asts-0.2.0/.jj/repo/op_store/views/59c7ebee3767ef2f2c1af3478415bcc002b8008b6bb8e2cea0b807218d3788e2288be61a6582601f57c9a17a611b7dd6976809ad3b95b663a0028d2f151c732c +0 -24
  138. logic_asts-0.2.0/.jj/repo/op_store/views/5a335ff0110008eafabe2fa3e60eb02ab5fc28d3e704e5e3a2ef6491e9b7a219ab720473e42687dafe387efa73fe020c9f264342ee8c70ed6b0962f5128aadad +0 -19
  139. logic_asts-0.2.0/.jj/repo/op_store/views/5b002d7c75b8d284c5b83ed930df0a6a814e21e954b3db1bc77439bce34d6be4eefc49b45fc3b3eb58408c6d8207545a748bb85367f656162961b7d2ed34e7ee +0 -14
  140. logic_asts-0.2.0/.jj/repo/op_store/views/62d8ddc6d7dbd2260c106c127af1dc90563ede37745dd42513efc9ade64d579a88fcb1ac5e3d2b5982aa17232a1a37e657c946e873b7541a09cf4e85902869e4 +0 -14
  141. logic_asts-0.2.0/.jj/repo/op_store/views/66a7962794faa33ff703d49444177421094420c275c18a60f55ad0aa3e3c009e1f391fe8b89a613e105e680b8b23c9f265b7b3b69d4de8aa9774ea6a8f5848a0 +0 -19
  142. logic_asts-0.2.0/.jj/repo/op_store/views/6c2b32f9cc181c7a587cf8c0e3f8e1110db1e4a71e0a5281f330a732d4433d9b4fd92ede58e29b2dd9f98841a36f6c6e72edcbd5a917af46dacf5100037a79eb +0 -14
  143. logic_asts-0.2.0/.jj/repo/op_store/views/707515b3ca45c6f4d982eba9261f590649abdabfa27d72e1300658b32c7b3e14b109cc7e1a143f7b2f6ce45584566b0d684511b078a970c03526743167cad62e +0 -14
  144. logic_asts-0.2.0/.jj/repo/op_store/views/74d282a08e62f9a9a252d44e91febb0342a78da7c2ada57d55224049959f947008208cdb090208837169feb599f2b89d99130c47d1dca9922edbe0f04ae34e57 +0 -19
  145. logic_asts-0.2.0/.jj/repo/op_store/views/7881c0a515cd3d81b748b79ffcaf5c949019f87d78b1b55744b172e211d5989873fd94f150cc75e2d06e943b36f21fbf815b87b4a7039153d449246619dfb66d +0 -14
  146. logic_asts-0.2.0/.jj/repo/op_store/views/805f0880d449f351f32a63fb2c3d67de2cac28231833fd89ba189b6c6a13f95062e13c1983dc0ea39169b494a1fc1cb44f3ae1fca2f7b1cfd0f8bf5f0f1f4afb +0 -25
  147. logic_asts-0.2.0/.jj/repo/op_store/views/85c3fb65664bad84822c7db92310b979c18975d7710576b3eb63aa0f24d6620e6343c659916b5f68c200a017e1a44883ba91a887a6fa7bad39ef1c57d8ee79f7 +0 -19
  148. logic_asts-0.2.0/.jj/repo/op_store/views/877daec6b5b6af1dd30ebba87191c82ef9ac2e42011968855e5e0691ca4b4a8afdefc39273f14d28db983e9262551f147bca8a85593875b580ce2e61e485bf38 +0 -0
  149. logic_asts-0.2.0/.jj/repo/op_store/views/89c501d0805b93851f7d1b21a4d60eabd82d424eb496f1f05fc617ce9701df7f2d92bb66eff2a84d7967cc35fe6cd9637495b21c53d40bcefdb95996bbb2015f +0 -24
  150. logic_asts-0.2.0/.jj/repo/op_store/views/944d79ab4fc74ae86ff305d544c435c45f0f47270be08418d41143873811c0c2d8d844e1a11d42ec8c4c970900963c2e6bc732ffa4ce54236fa7cca9ab04968d +0 -14
  151. logic_asts-0.2.0/.jj/repo/op_store/views/9480f1b97c011c0a8a2062b51e56e7ba08ed7014bfc3dfc9a5c1dcd0ece37ce9afe4ec3027867bf2eff2f4455383f07185de69e08e4dfc1770afe8ec680987f1 +0 -20
  152. logic_asts-0.2.0/.jj/repo/op_store/views/9a07d547b4a9cef8671acc3137e418530e4b5dd45aa9ae803ff7f3c5ed985c1cf03f500c2cbe724c7d9c1b5cab3f5782bce4f5ba495a963d58cf28315148daca +0 -24
  153. logic_asts-0.2.0/.jj/repo/op_store/views/9bc7a04a8709c20560b691810fdf0030170855037c1c515bec96bcae40714230557f545680853c1fb7dd9762dcfcd054ad564d8554088d8fe8e4d529653b49d2 +0 -0
  154. logic_asts-0.2.0/.jj/repo/op_store/views/a8ba47b295545daa76bc6e52c9c2e8325403f8662ee003f2baa23c3901fd2740c512eea97fded0262ea4c89259d648f48df0dd8071d203135ae2a11c50d4c9eb +0 -24
  155. logic_asts-0.2.0/.jj/repo/op_store/views/b4452d745321480fbf736b6087e6a5d2ca258664650fad7291f83b658af8a894552518b430647c9418a3bfb2af4671d1abad5bf1182d38ad4c9dae3c4591e871 +0 -24
  156. logic_asts-0.2.0/.jj/repo/op_store/views/b4e0d88a10e21ac524ae6b46f9f15d90e1821f6bbc11f8091b5a6da94a5b5ac5b949968d6cf606e08b93e06d558ca8bf98a0a089ae2db243282bc741215e791d +0 -26
  157. logic_asts-0.2.0/.jj/repo/op_store/views/c4f58c19f9146808de1116e10cf8affedc997f79e3608044044731621d760190007995621c6261da41b292b7fa9ba6422331030d1f9edc77d5e25fc2dba1e9dd +0 -14
  158. logic_asts-0.2.0/.jj/repo/op_store/views/c72c5f9e908bf0b9764d8330a51f103528cc38aa03557ef9cdcafecaa1276e16c0034c4e6196ff3814314b40232d4a8b3d1096e0ac5d9f941919f073f77e72d4 +0 -19
  159. logic_asts-0.2.0/.jj/repo/op_store/views/c9dc3335f5f61ec4e1e7df7d10e4c67209928b6bd58990e47c9cece65fe737bf82c285d062d87b0a96a577fc1c1946650e9acb273717984d89085e7c5236e3ca +0 -0
  160. logic_asts-0.2.0/.jj/repo/op_store/views/d69b72938390c692ccd51085f34d85a977ba5bc92babc301e9440438bd37f54a4eabf07bfc9e10aaa6f94dd2511f942dabf79e41f657e6de5a135ac27cd8668a +0 -14
  161. logic_asts-0.2.0/.jj/repo/op_store/views/deefeb806e51de28cc60d4f0507240dac34453cd49fa655aa5620f8b057c4d75959112a0145e586d79dabe3b08dec7456754b13219cdfb3047812e345cf2a74a +0 -0
  162. logic_asts-0.2.0/.jj/repo/op_store/views/e32c94c7ad7328d213d4e68a897a63ad60064e23b7847aac8953dc32bb7baeb1b53882315b70a87548a2e73d885952361f3d5b89e4e0d644eb2cac85be780c10 +0 -19
  163. logic_asts-0.2.0/.jj/repo/op_store/views/e603f1f928bfc381ce19879e5f096423b27b8a893c99eb467476e48a5aa190cb1303253ad940fa8dca9ca1703fae5ebc8bafb7cc8d3b0657c7f559f5686a7246 +0 -24
  164. logic_asts-0.2.0/.jj/repo/op_store/views/e70a032f93b213587daf23c15f95bcfcabf8858755ea077350eaf742e28381ad84f5e77c8fdbf969a7fe235adb0b0a66ff0deaad1d3b07142698b4d33f5d4172 +0 -14
  165. logic_asts-0.2.0/.jj/repo/op_store/views/ed80f03f7aa8827bdb1dbee457c49c895d65944516a6f377fdf057043e67e018a0406755f17ee92ca594601c312f1d57c19834d4613525b410622281c6a411b6 +0 -24
  166. logic_asts-0.2.0/.jj/repo/op_store/views/f0c5f94376d1cd396052488f0fe5fe7bb8ae0df4cd1a36e6fb294d0431c1207a33e5f690547b1668753222d6da7e00343052a7b1508c45368cc7f99755c1f01d +0 -0
  167. logic_asts-0.2.0/.jj/repo/op_store/views/f24643cecfd283e15d0adf87a044d1576a8d2ed2156cf741f0a35fe13531b70ecce60930db4221154815518450a042137b00e95839ede159933ac7867d06b2d8 +0 -25
  168. logic_asts-0.2.0/.jj/repo/store/extra/03ab66f6b1eef4f5ce94922213a66b7499640a7b587ca4c4d1aba4313754459081168c6ed82c06cb159fba2d2957cf9948ba2a268c2229e7a8b1c5577be0a815 +0 -0
  169. logic_asts-0.2.0/.jj/repo/store/extra/0737c10afae40e24d69750d17dbde0e3e5f622aafe4532fa93b3658b5b40811cfc6196c7f20c147edd779e4ba01a9cd7dc5d13c2b505f7cbc5a9af14b6596c59 +0 -0
  170. logic_asts-0.2.0/.jj/repo/store/extra/0bad26bece1625969e8803d8d69c2fd5db4c880dded2b3b54bf84a5d9233cd5fb404d465e17c7f90cd50006280b160ab7ebbaf4903f763cead08c0498b9f189e +0 -0
  171. logic_asts-0.2.0/.jj/repo/store/extra/0bda35168817ac3fcc7abc6f6b476a58e51232b1e0f6c1cc5a096b5c9799a791e979c9110c5f63d5b17e3e2b5820d82ede508351b5fd2ccee2a75eb765a24db8 +0 -0
  172. logic_asts-0.2.0/.jj/repo/store/extra/18f02f21bc7c194aaf4135c556e52bcf4ca813d458a1210183eb811f5e168835fbc90208857062da1aebe0fb0ca4914ba1a3086d1d087ba1008a995d5f793774 +0 -0
  173. logic_asts-0.2.0/.jj/repo/store/extra/1bd33a63796c859ab97625087fc22f503ea361dd4427c851a69fcf3713c19a0e75a8e2b71cf5f9f78270c3801151b6af6e98304c49f987987b4d04864f3c13a7 +0 -0
  174. logic_asts-0.2.0/.jj/repo/store/extra/2676c2e9ec402d052b0405d63ebd9327357a35b4952ddfcee9a5a6995b73e07c44837b79bf9970abe2ec2588002ba3565fda8fed79c44d2a213abc6d45ec3b00 +0 -0
  175. logic_asts-0.2.0/.jj/repo/store/extra/2a29e1aac0c7468ae282275d7c34572f823673dcef93e9baa9a27bb97f2acbcf5705a93b2cfe09240220f4c848fc120a6aa9455d5ad55b26cca1d394281f1cfd +0 -0
  176. logic_asts-0.2.0/.jj/repo/store/extra/2e53e53c347dd2ca50559dc4f1b5e33d5bad36595395055bbdf3bb4afea4c0b08ee8bb25b36c98479ad2c955bce8c342730bf47d83e4d02c752340ad2e77d218 +0 -0
  177. logic_asts-0.2.0/.jj/repo/store/extra/2ef9b457e6b7cff5baaf06fa6380773aa591466bef7c4ca698e51742cdc1c94bb3129d04623db6f93e1c9111c580c0bfb8844dba46d4d0dff2b36feb8401d4d0 +0 -0
  178. logic_asts-0.2.0/.jj/repo/store/extra/3138888bbd1506adb541f168ad17d478fd925186ff3f53309176695fda4e795062031acefe6eb46c7ab7cc8b812a83ce51c0928504037f1eb095c789ba6570e1 +0 -0
  179. logic_asts-0.2.0/.jj/repo/store/extra/35d38d9a8d2b2938ee88c4dbf8ec827b29e8db443efffc3bda2c39f6548b652c098388b594e4f9cd1e9888c5757bfcd22d468b9a10a811afd0a2bd67e4d00a0b +0 -0
  180. logic_asts-0.2.0/.jj/repo/store/extra/3b6659c8397fec2f619150c74a8951f377168874f778d3116b54a38d029a038cf52a1266df2d5c6e205f12d4821261989234e7433692f00a1265e53a6ee1be69 +0 -0
  181. logic_asts-0.2.0/.jj/repo/store/extra/3c00c318b5d17bb6622625b331e988263622a7fc16404c6b1e169409637a2fa13ff28623ac2d9e6f0179edf7046cb13cd53f0f076dc1c716a95fd1a0dc7683e5 +0 -0
  182. logic_asts-0.2.0/.jj/repo/store/extra/3ea4513109dce8411ac4110f483b93976a7cc1864abb17bd10ad26e111a14abce634add7aca17015b9a6250b32c488dc7a1af739e1ce8bd07b195c808813db9a +0 -0
  183. logic_asts-0.2.0/.jj/repo/store/extra/482ae5a29fbe856c7272f2071b8b0f0359ee2d89ff392b8a900643fbd0836eccd067b8bf41909e206c90d45d6e7d8b6686b93ecaee5fe1a9060d87b672101310 +0 -0
  184. logic_asts-0.2.0/.jj/repo/store/extra/4871620b75b4198812a44f755c66df5a8bb7a231003a34a2ce6a0dc32d499766a62a28bc75793bac5fc16995e84fe01efd0bfcf8933bd1c542aecc1c4bba624c +0 -0
  185. logic_asts-0.2.0/.jj/repo/store/extra/50570a467496a2d76e3a8966efb9c5460a54a49bba4a71d1acc020f260c338c2d9db6acfd5db1dc51845dd9453c1292e96f2ca1e7f471f6581e4d4c6fb2b377a +0 -0
  186. logic_asts-0.2.0/.jj/repo/store/extra/57e7a60333e02ab1f24bba84600850973f0f37c0110258189f2d7cbb17aad497806a6dc07a10aa7d0e9f0202532840dc26549e14166fa1915080148aa71aba52 +0 -0
  187. logic_asts-0.2.0/.jj/repo/store/extra/665d6744e2c4c7ebe64f1c238764e6779e1ebb198348e96f328aae05d57dbab0366c54e93f9b179afd1a5d55a278b37db67dae191ac2707b6be45791cb3c8202 +0 -0
  188. logic_asts-0.2.0/.jj/repo/store/extra/6f6dc46e41e201094ee867e71590586d40eb7d0ec4fd67f8fac77d197dc69614131007b62a97f5682a48680029d8b74cc44d0636498a45d13f673ca127b8a66c +0 -0
  189. logic_asts-0.2.0/.jj/repo/store/extra/76f882e78820e022dc06965b576b97316114dbac7c97c4a9a4950f6c4607727731e9c1a7db87fe876405644827671d1fa7d99dc430f4a7b34f429060c85e51f7 +0 -0
  190. logic_asts-0.2.0/.jj/repo/store/extra/7714594148716c1ffeea1c1d9eb4bc1014e5d0d9d30202759328cadad5729e3733678a4a6232184e5b961bca234ab75926c08e6845b3b7d6de9be3c12197a913 +0 -0
  191. logic_asts-0.2.0/.jj/repo/store/extra/796743a27e317817e5e3829c86a95b525ee6cfa59256bf4b6782cbb2672666b2e569c092d4066868cffdb5d54dcc9f093a56d588082f967fbdaa98448481a7d3 +0 -0
  192. logic_asts-0.2.0/.jj/repo/store/extra/7bf682c19a030aca2092b693de23630284cfc31cc7163cfab90ef49a3abfaf1797864351cf5734a1881ad44095925ac74a484cbb899c5ad0137e20153a3cb4b8 +0 -0
  193. logic_asts-0.2.0/.jj/repo/store/extra/8851f70cf48babf38933aa4aead644994f955883fb0f10d76164a59024261f0ccdba8d1deebd2f82600ba338fa05307443e11afa90f9ae054935eab4174bc6b2 +0 -0
  194. logic_asts-0.2.0/.jj/repo/store/extra/927060fbffeca248fdc390c2c897b4ae6dd65cc6b9336c59dd669bf2ba8b711d974ba3ebc201c83ebd4cb959f669c5878efbd31f2ae7adeaa5b098242d9aff42 +0 -0
  195. logic_asts-0.2.0/.jj/repo/store/extra/940c047ce5b868c4183884f0550598b66b272182206bf8696f7aa9db24f71386c7bf323a536f82d23882c8b1b2c76bed7b1dd21c5320812b7db01ea1eeaeb892 +0 -0
  196. logic_asts-0.2.0/.jj/repo/store/extra/96318706edceab566a58890d4317a56a0d682e087aec9ef56d06dd2646fb1e4557921aa6f5c71d8ca30177750f936ee015a2ad2e1f1be5563b57b38f505f4ca5 +0 -0
  197. logic_asts-0.2.0/.jj/repo/store/extra/97361b581a51c062f7272f67447f7e4c659cc12e2d1ed132de97550f3cba197f22f287a2a933a2e8f465de57b30543aff479b91832663dd27e199eea18ed5f33 +0 -0
  198. logic_asts-0.2.0/.jj/repo/store/extra/98be2592e99f8cc2c4ed55be68987ecca86ba6e8e003220c2a3f14c0fca1dbef76e0dfbbd2e99076b9a7bb2d5ee2a2998df2b832c6cb8c4b7d5908f0b351b5d6 +0 -0
  199. logic_asts-0.2.0/.jj/repo/store/extra/9c28c24b3c21fa163f56f7f6205b2ad4d78902ec3528bded6228be945000125208a26318d5b52ba8eece0cc25aab6c19555f95d7d2ef4c88b5187cf98e246830 +0 -0
  200. logic_asts-0.2.0/.jj/repo/store/extra/a08c53f524df4e69239980703a642772af3017a9ee4aa06a2c5cb2fc0b7c9e9668fce62cc83d36470f3e7fcf901cc79d9c002d70bdbb185f58434e10b83177da +0 -0
  201. logic_asts-0.2.0/.jj/repo/store/extra/ae132c1a6b4312b157cd1f62217218100d444fdde14b5c35775abe28f88b1ad0325b935249d3652c8c65e280df41ae4df184de7291664ceb523dcb4451828eae +0 -0
  202. logic_asts-0.2.0/.jj/repo/store/extra/b064d997ce273dd1ff7779d975191001e5381b2eedc97df8a1fb4e089255f32c4563f58a865815cc3c69158b0fe1371ae0893d3d01cd6d6b1d91123614beaee7 +0 -0
  203. logic_asts-0.2.0/.jj/repo/store/extra/b9be29fca6083f6cae08aad484c26f6f4869f747e1baf54dd9fd08b8d5ff0080192b078f654dae4e12b2b6c51c6685ab369b911872d1d2c091b4b9e0ad7fe20a +0 -0
  204. logic_asts-0.2.0/.jj/repo/store/extra/c0263b76d47f6234fc9e6ef872961844749b0b7edcbc7ddd2fac29de33db0cb786e27db7adb21cd2633e6aae67178dbb2256ffa86f8b1e0dd4b357fd57c0a68c +0 -0
  205. logic_asts-0.2.0/.jj/repo/store/extra/c1309162eb877ed8f429b061d81615b07c38dd1931d5fe91984ffeb2555578041201f8a483c677f394b31f98cc0d59f7109b6d9884b3006d07f05e3e23e699cb +0 -0
  206. logic_asts-0.2.0/.jj/repo/store/extra/c9004bcbcbbb6fb6f609c0b84bee6fd024f7237c7b74ca56238fca702ff214dc29d57ce89ba491b32c0a8926fdb5b96fd98478181d1bd05c136048f3ef161ff6 +0 -0
  207. logic_asts-0.2.0/.jj/repo/store/extra/cb6d3720600f951c529e266631ff522702ddcdc172bf4ca14cd00312c685e3d39999b15d370f299e083395e042c53a8f3957a15e5bc528fdf71af8e50fdcd7e3 +0 -0
  208. logic_asts-0.2.0/.jj/repo/store/extra/cc41167b91c4796180645df2eed1c8fe305938868cc94707779b90dec2cde4b0303cc8ddd415407dc2a6f354debfd04dd027dd8382366329db11b47084e675fb +0 -0
  209. logic_asts-0.2.0/.jj/repo/store/extra/d1bd83bd631af88936f38dd4daf6a272c9a28f1cc1d022c95e0ba813d63413c6b227cfbfd464ca954ba4776da8c04d7e02e3e5a1645ee0c04ee6ffdc16f958bf +0 -0
  210. logic_asts-0.2.0/.jj/repo/store/extra/d3e38828c9b081db0a8066af23abfa11b56ea755fc405181843d67cca2787d01c83032a7f34d1b6fad72fcab23de3072b29af9130e5a0a7e246299d6d9663e58 +0 -0
  211. logic_asts-0.2.0/.jj/repo/store/extra/df15c0dbb7a782d61570e5287984576eea4d20fac9f3859a853ba2cbd7467de02b1519dedad9046ada6696d6478dabf10f92d0008274b79c8ba23dcb5200cd47 +0 -0
  212. logic_asts-0.2.0/.jj/repo/store/extra/e5fe501246286b06fe57d01e4f173c3a1d0071c3b8132cf3fc5430420933ae6ec87c776a3d446f64e0041bb08fc74da96e48f98f066af18b19b555e7d5239143 +0 -0
  213. logic_asts-0.2.0/.jj/repo/store/extra/e8d4cd67b5d2d5fda235aab26608b863d7acfd846893e31c06b5670d77578978eca128b2911fded7c73a50c887b74fb85e707185dd8575b1a03184d726db216c +0 -0
  214. logic_asts-0.2.0/.jj/repo/store/extra/f0e228b05ea5cb6eb374b8717289c70caa484a230fe72054c995f3003e6a2b88a6a4eba4eb2b2e236f9a7f8dab89874c35070178e8a09b3df80a71a776a350d1 +0 -0
  215. logic_asts-0.2.0/.jj/repo/store/extra/f2f0443ad5a93d53803beab9270fb6bbc7e8cdde08a0a411fe9f9eaf0b357b56b9bae29dbc880982a341a267860a21f61ed2c57289eb0724751ee7db0f477db7 +0 -0
  216. logic_asts-0.2.0/.jj/repo/store/extra/f3f5203913117ff18207a2c320378e5816fbea42039df6ab2fd7b1ccb2edede36b1d3978cefe259a616147dbd609c7e3ffe7cd8e1fd02762f6b28373927996d5 +0 -0
  217. logic_asts-0.2.0/.jj/repo/store/extra/fc360b91f6f01e822d926bbd3dca152692d666e9295647d94abaa37c9ec8f804030e7fc69622a6dbde24563726ceb43f675d08f01b8b5fd3545a567205ac479c +0 -0
  218. logic_asts-0.2.0/.jj/repo/store/extra/fd229efea4dca38d3fb6cf3f098b431b388b88133062c75a83d52a79fcaaae9a9b90af2b1a97cd3a108e72897b23657efbf7159e7bc3368574d1f1278221fe53 +0 -0
  219. logic_asts-0.2.0/.jj/repo/store/extra/heads/3ea4513109dce8411ac4110f483b93976a7cc1864abb17bd10ad26e111a14abce634add7aca17015b9a6250b32c488dc7a1af739e1ce8bd07b195c808813db9a +0 -0
  220. logic_asts-0.2.0/.jj/repo/store/git_target +0 -1
  221. logic_asts-0.2.0/.jj/repo/store/type +0 -1
  222. logic_asts-0.2.0/.jj/repo/submodule_store/type +0 -1
  223. logic_asts-0.2.0/.jj/working_copy/checkout +0 -1
  224. logic_asts-0.2.0/.jj/working_copy/tree_state +0 -0
  225. logic_asts-0.2.0/.jj/working_copy/type +0 -1
  226. logic_asts-0.2.0/src/logic_asts/base.py +0 -246
  227. logic_asts-0.2.0/tests/test_ltl.py +0 -30
  228. {logic_asts-0.2.0 → logic_asts-0.3.2}/.envrc.recommended +0 -0
  229. {logic_asts-0.2.0 → logic_asts-0.3.2}/.gitignore +0 -0
  230. {logic_asts-0.2.0 → logic_asts-0.3.2}/.python-version +0 -0
  231. {logic_asts-0.2.0 → logic_asts-0.3.2}/README.md +0 -0
  232. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/base.lark +0 -0
  233. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/ltl.lark +0 -0
  234. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/strel.lark +0 -0
  235. {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/py.typed +0 -0
  236. {logic_asts-0.2.0 → logic_asts-0.3.2}/tests/test_strel.py +0 -0
@@ -0,0 +1,38 @@
1
+ name: "CI for Python package"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ test:
13
+ name: Test package
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ python-version: ["3.11", "3.12", "3.13"]
19
+
20
+ steps:
21
+ # checkout@v4.2.2
22
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
23
+ # setup-uv@v6.0.1
24
+ - uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca
25
+ with:
26
+ version: "latest"
27
+ python-version: ${{ matrix.python-version }}
28
+ - name: Test with Python ${{ matrix.python-version }}
29
+ run: uv run --frozen --dev pytest
30
+ - name: Run type checker with Python
31
+ run: uv run --frozen --dev mypy src tests
32
+ - name: Run basedpyright
33
+ run: uvx basedpyright
34
+ - name: lint
35
+ run: uv run ruff check .
36
+ - name: format
37
+ run: uv run ruff format --check .
38
+
@@ -0,0 +1,69 @@
1
+ name: "Test, build, and deploy Python package"
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ push:
7
+ tags:
8
+ - v*
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ name: Test package
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.11", "3.12", "3.13"]
20
+
21
+ steps:
22
+ # checkout@v4.2.2
23
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
24
+ # setup-uv@v6.0.1
25
+ - uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca
26
+ with:
27
+ version: "latest"
28
+ python-version: ${{ matrix.python-version }}
29
+ - name: Test with Python ${{ matrix.python-version }}
30
+ run: uv run --frozen --dev pytest
31
+ - name: Run type checker with Python
32
+ run: uv run --frozen --dev mypy src tests
33
+
34
+ release-build:
35
+ name: Build and release package
36
+ runs-on: ubuntu-latest
37
+ needs:
38
+ - test
39
+ permissions:
40
+ # IMPORTANT: this permission is mandatory for trusted publishing
41
+ id-token: write
42
+
43
+ # Dedicated environments with protections for publishing are strongly recommended.
44
+ environment:
45
+ name: pypi
46
+ # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status:
47
+ url: https://pypi.org/p/logic-asts
48
+
49
+ if: "startsWith(github.ref, 'refs/tags/')"
50
+
51
+ steps:
52
+ # checkout@v4.2.2
53
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
54
+ # setup-uv@v6.0.1
55
+ - uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca
56
+ with:
57
+ version: "latest"
58
+ - name: Install dependencies
59
+ run: uv sync
60
+ - name: Build wheels and sdist
61
+ run: uv build
62
+ - name: Upload wheels and sdist
63
+ # upload-artifact@v4.6.2
64
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
65
+ with:
66
+ name: release-dists
67
+ path: dist/
68
+ - name: Publish release distributions to PyPI
69
+ run: uv publish
@@ -10,19 +10,19 @@ dev: uv.lock | .venv
10
10
  .PHONY: dev
11
11
 
12
12
  fmt:
13
- uv run ruff format
14
- uv run ruff check --fix .
13
+ uv run --frozen ruff format
14
+ uv run --frozen ruff check --fix .
15
15
  .PHONY: fmt
16
16
 
17
17
  typing:
18
- uv run mypy src
18
+ uv run --frozen mypy src
19
19
  .PHONY: typing
20
20
 
21
21
  lint: fmt typing
22
22
  .PHONY: lint
23
23
 
24
24
  test:
25
- uv run --dev pytest
25
+ uv run --dev --frozen pytest
26
26
  .PHONY: test
27
27
 
28
28
  uv.lock .venv &: pyproject.toml
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: logic-asts
3
- Version: 0.2.0
3
+ Version: 0.3.2
4
4
  Summary: Grammars and parsers for various logic
5
5
  Author-email: Anand Balakrishnan <anandbala1597@gmail.com>
6
- Requires-Python: >=3.12
6
+ Requires-Python: >=3.11
7
7
  Requires-Dist: attrs>=25.3.0
8
8
  Requires-Dist: lark>=1.2.2
9
9
  Requires-Dist: typing-extensions>=4.13.0
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "logic-asts"
3
- version = "0.2.0"
3
+ version = "0.3.2"
4
4
  description = "Grammars and parsers for various logic"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Anand Balakrishnan", email = "anandbala1597@gmail.com" }]
7
- requires-python = ">=3.12"
7
+ requires-python = ">=3.11"
8
8
  dependencies = ["attrs>=25.3.0", "lark>=1.2.2", "typing-extensions>=4.13.0"]
9
9
 
10
10
  [dependency-groups]
@@ -44,7 +44,7 @@ extend-ignore = ["F722", "PYI041"]
44
44
  "*.pyi" = ["B", "E501", "E701"]
45
45
 
46
46
  [tool.pyright]
47
- pythonVersion = "3.12"
47
+ pythonVersion = "3.11"
48
48
  pythonPlatform = "All"
49
49
  reportUnknownMemberType = false
50
50
  reportUnknownParameterType = false
@@ -43,7 +43,7 @@ class SupportedGrammars(enum.StrEnum):
43
43
  return transformer
44
44
 
45
45
 
46
- type SupportedGrammarsStr = typing.Literal["base", "ltl", "strel"]
46
+ SupportedGrammarsStr: typing.TypeAlias = typing.Literal["base", "ltl", "strel"]
47
47
 
48
48
 
49
49
  def parse_expr(
@@ -0,0 +1,346 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC, abstractmethod
4
+ from collections import deque
5
+ from collections.abc import Iterator
6
+ from typing import Generic, Self, TypeVar, final
7
+
8
+ from attrs import frozen
9
+ from typing_extensions import override
10
+
11
+
12
+ class Expr(ABC):
13
+ """Abstract expression"""
14
+
15
+ @abstractmethod
16
+ def expand(self) -> Expr: ...
17
+
18
+ @abstractmethod
19
+ def to_nnf(self) -> Expr: ...
20
+
21
+ @abstractmethod
22
+ def children(self) -> Iterator[Expr]: ...
23
+
24
+ def iter_subtree(self) -> Iterator[Expr]:
25
+ """Post-order traversal of the expression.
26
+
27
+ Iterates over all the sub-expressions of the formula, never returning to
28
+ the same sub-expression twice.
29
+ """
30
+ stack: deque[Expr] = deque([self])
31
+ visited: set[Expr] = set()
32
+
33
+ while stack:
34
+ subexpr = stack[-1]
35
+ need_to_visit_children = {
36
+ child
37
+ for child in subexpr.children() # We need to visit `child`
38
+ if (child) not in visited # if it hasn't already been visited
39
+ }
40
+
41
+ if visited.issuperset(need_to_visit_children):
42
+ # subexpr is a leaf (the set is empty) or it's children have been
43
+ # yielded get rid of it from the stack
44
+ _ = stack.pop()
45
+ # Add subexpr to visited
46
+ visited.add(subexpr)
47
+ # post-order return it
48
+ yield subexpr
49
+ else:
50
+ # mid-level node or an empty set
51
+ # Add relevant children to stack
52
+ stack.extend(need_to_visit_children)
53
+ # Yield the remaining nodes in the stack in reverse order
54
+ yield from reversed(stack)
55
+
56
+ @abstractmethod
57
+ def horizon(self) -> int | float:
58
+ """Compute the horizon of the formula. Returns `math.inf` if the formula is unbounded."""
59
+
60
+ def __invert__(self) -> Expr:
61
+ return Not(self)
62
+
63
+ def __and__(self, other: Expr) -> Expr:
64
+ return And(self, other)
65
+
66
+ def __or__(self, other: Expr) -> Expr:
67
+ return Or(self, other)
68
+
69
+
70
+ @final
71
+ @frozen
72
+ class Implies(Expr):
73
+ lhs: Expr
74
+ rhs: Expr
75
+
76
+ @override
77
+ def __str__(self) -> str:
78
+ return f"{self.lhs} -> {self.rhs}"
79
+
80
+ @override
81
+ def expand(self) -> Expr:
82
+ return ~self.lhs | self.rhs
83
+
84
+ @override
85
+ def to_nnf(self) -> Expr:
86
+ return self.expand().to_nnf()
87
+
88
+ @override
89
+ def children(self) -> Iterator[Expr]:
90
+ yield self.lhs
91
+ yield self.rhs
92
+
93
+ @override
94
+ def horizon(self) -> int | float:
95
+ return max(self.lhs.horizon(), self.rhs.horizon())
96
+
97
+
98
+ @final
99
+ @frozen
100
+ class Equiv(Expr):
101
+ lhs: Expr
102
+ rhs: Expr
103
+
104
+ @override
105
+ def __str__(self) -> str:
106
+ return f"{self.lhs} <-> {self.rhs}"
107
+
108
+ @override
109
+ def expand(self) -> Expr:
110
+ x = self.lhs
111
+ y = self.rhs
112
+ return (x | ~y) & (~x | y)
113
+
114
+ @override
115
+ def to_nnf(self) -> Expr:
116
+ return self.expand().to_nnf()
117
+
118
+ @override
119
+ def children(self) -> Iterator[Expr]:
120
+ yield self.lhs
121
+ yield self.rhs
122
+
123
+ @override
124
+ def horizon(self) -> int | float:
125
+ return max(self.lhs.horizon(), self.rhs.horizon())
126
+
127
+
128
+ @final
129
+ @frozen
130
+ class Xor(Expr):
131
+ lhs: Expr
132
+ rhs: Expr
133
+
134
+ @override
135
+ def __str__(self) -> str:
136
+ return f"{self.lhs} ^ {self.rhs}"
137
+
138
+ @override
139
+ def expand(self) -> Expr:
140
+ x = self.lhs
141
+ y = self.rhs
142
+ return (x & ~y) | (~x & y)
143
+
144
+ @override
145
+ def to_nnf(self) -> Expr:
146
+ return self.expand().to_nnf()
147
+
148
+ @override
149
+ def children(self) -> Iterator[Expr]:
150
+ yield self.lhs
151
+ yield self.rhs
152
+
153
+ @override
154
+ def horizon(self) -> int | float:
155
+ return max(self.lhs.horizon(), self.rhs.horizon())
156
+
157
+
158
+ @final
159
+ @frozen
160
+ class And(Expr):
161
+ lhs: Expr
162
+ rhs: Expr
163
+
164
+ @override
165
+ def __str__(self) -> str:
166
+ return f"({self.lhs} & {self.rhs})"
167
+
168
+ @override
169
+ def to_nnf(self) -> Expr:
170
+ return self.lhs.to_nnf() & self.rhs.to_nnf()
171
+
172
+ @override
173
+ def expand(self) -> Expr:
174
+ return self.lhs.expand() & self.rhs.expand()
175
+
176
+ @override
177
+ def children(self) -> Iterator[Expr]:
178
+ yield self.lhs
179
+ yield self.rhs
180
+
181
+ @override
182
+ def horizon(self) -> int | float:
183
+ return max(self.lhs.horizon(), self.rhs.horizon())
184
+
185
+
186
+ @final
187
+ @frozen
188
+ class Or(Expr):
189
+ lhs: Expr
190
+ rhs: Expr
191
+
192
+ @override
193
+ def __str__(self) -> str:
194
+ return f"({self.lhs} | {self.rhs})"
195
+
196
+ @override
197
+ def to_nnf(self) -> Expr:
198
+ return self.lhs.to_nnf() | self.rhs.to_nnf()
199
+
200
+ @override
201
+ def expand(self) -> Expr:
202
+ return self.lhs.expand() | self.rhs.expand()
203
+
204
+ @override
205
+ def children(self) -> Iterator[Expr]:
206
+ yield self.lhs
207
+ yield self.rhs
208
+
209
+ @override
210
+ def horizon(self) -> int | float:
211
+ return max(self.lhs.horizon(), self.rhs.horizon())
212
+
213
+
214
+ @final
215
+ @frozen
216
+ class Not(Expr):
217
+ arg: Expr
218
+
219
+ @override
220
+ def __str__(self) -> str:
221
+ return f"!{str(self.arg)}"
222
+
223
+ @override
224
+ def __invert__(self) -> Expr:
225
+ return self.arg
226
+
227
+ @override
228
+ def to_nnf(self) -> Expr:
229
+ arg = self.arg
230
+ match arg:
231
+ case Literal():
232
+ return ~arg
233
+ case Variable():
234
+ return self
235
+ case Not(expr):
236
+ return expr.to_nnf()
237
+ case And(a, b):
238
+ return (~a).to_nnf() | (~b).to_nnf()
239
+ case Or(a, b):
240
+ return (~a).to_nnf() & (~b).to_nnf()
241
+ case _:
242
+ return arg.to_nnf()
243
+
244
+ @override
245
+ def expand(self) -> Expr:
246
+ return ~(self.arg.expand())
247
+
248
+ @override
249
+ def children(self) -> Iterator[Expr]:
250
+ yield self.arg
251
+
252
+ @override
253
+ def horizon(self) -> int | float:
254
+ return self.arg.horizon()
255
+
256
+
257
+ Var = TypeVar("Var")
258
+
259
+
260
+ @final
261
+ @frozen
262
+ class Variable(Expr, Generic[Var]):
263
+ name: Var
264
+
265
+ @override
266
+ def __str__(self) -> str:
267
+ return str(self.name)
268
+
269
+ @override
270
+ def to_nnf(self) -> Expr:
271
+ return self
272
+
273
+ @override
274
+ def expand(self) -> Expr:
275
+ return self
276
+
277
+ @override
278
+ def children(self) -> Iterator[Expr]:
279
+ yield from iter(())
280
+
281
+ @override
282
+ def horizon(self) -> int | float:
283
+ return 0
284
+
285
+
286
+ @final
287
+ @frozen
288
+ class Literal(Expr):
289
+ value: bool
290
+
291
+ @override
292
+ def __str__(self) -> str:
293
+ return "t" if self.value else "f"
294
+
295
+ @override
296
+ def __invert__(self) -> Literal:
297
+ return Literal(not self.value)
298
+
299
+ @override
300
+ def __and__(self, other: Expr) -> Expr:
301
+ if self.value is False:
302
+ return self
303
+ elif isinstance(other, Literal):
304
+ return Literal(self.value and other.value)
305
+ else:
306
+ # True & x = x
307
+ return other
308
+
309
+ @override
310
+ def __or__(self, other: Expr) -> Expr:
311
+ if self.value is True:
312
+ return self
313
+ elif isinstance(other, Literal):
314
+ return Literal(self.value or other.value)
315
+ else:
316
+ # False | x = x
317
+ return other
318
+
319
+ @override
320
+ def to_nnf(self) -> Self:
321
+ return self
322
+
323
+ @override
324
+ def expand(self) -> Self:
325
+ return self
326
+
327
+ @override
328
+ def children(self) -> Iterator[Expr]:
329
+ yield from iter(())
330
+
331
+ @override
332
+ def horizon(self) -> int | float:
333
+ return 0
334
+
335
+
336
+ __all__ = [
337
+ "Expr",
338
+ "Implies",
339
+ "Equiv",
340
+ "Xor",
341
+ "And",
342
+ "Or",
343
+ "Not",
344
+ "Variable",
345
+ "Literal",
346
+ ]
@@ -62,12 +62,15 @@ class LtlTransform(Transformer[Token, Expr]):
62
62
  return lhs & rhs
63
63
 
64
64
  def until(self, lhs: Expr, interval: TimeInterval | None, rhs: Expr) -> Expr:
65
+ interval = interval or TimeInterval()
65
66
  return Until(lhs, rhs, interval)
66
67
 
67
68
  def always(self, interval: TimeInterval | None, arg: Expr) -> Expr:
69
+ interval = interval or TimeInterval()
68
70
  return Always(arg, interval)
69
71
 
70
72
  def eventually(self, interval: TimeInterval | None, arg: Expr) -> Expr:
73
+ interval = interval or TimeInterval()
71
74
  return Eventually(arg, interval)
72
75
 
73
76
  def next(self, steps: int | None, arg: Expr) -> Expr:
@@ -3,10 +3,11 @@ from __future__ import annotations
3
3
  import itertools
4
4
  import math
5
5
  from collections.abc import Iterator
6
+ from typing import final
6
7
 
7
8
  import attrs
8
9
  from attrs import frozen
9
- from typing_extensions import final, override
10
+ from typing_extensions import override
10
11
 
11
12
  from logic_asts.base import And, Equiv, Expr, Implies, Literal, Not, Or, Variable, Xor
12
13
  from logic_asts.utils import check_positive, check_start
@@ -15,7 +16,7 @@ from logic_asts.utils import check_positive, check_start
15
16
  @final
16
17
  @frozen
17
18
  class TimeInterval:
18
- start: None | int = attrs.field(default=None, validator=[check_positive, check_start])
19
+ start: int | None = attrs.field(default=None, validator=[check_positive, check_start])
19
20
  end: int | None = attrs.field(default=None, validator=[check_positive])
20
21
 
21
22
  @override
@@ -26,6 +27,12 @@ class TimeInterval:
26
27
  case _:
27
28
  return f"[{self.start or ''}, {self.end or ''}]"
28
29
 
30
+ def duration(self) -> int | float:
31
+ start = self.start or 0
32
+ end = self.end or math.inf
33
+
34
+ return end - start
35
+
29
36
  def is_unbounded(self) -> bool:
30
37
  return self.end is None or math.isinf(self.end)
31
38
 
@@ -90,12 +97,24 @@ class Next(Expr):
90
97
  def to_nnf(self) -> Expr:
91
98
  return Next(self.arg.to_nnf(), steps=self.steps)
92
99
 
100
+ @override
101
+ def children(self) -> Iterator[Expr]:
102
+ yield self.arg
103
+
104
+ @override
105
+ def horizon(self) -> int | float:
106
+ arg_hrz = self.arg.horizon()
107
+ assert isinstance(arg_hrz, int) or math.isinf(arg_hrz), (
108
+ "`Next` cannot be used for continuous-time specifications, horizon cannot be computed"
109
+ )
110
+ return 1 + arg_hrz
111
+
93
112
 
94
113
  @final
95
114
  @frozen
96
115
  class Always(Expr):
97
116
  arg: Expr
98
- interval: TimeInterval | None = None
117
+ interval: TimeInterval = attrs.field(factory=lambda: TimeInterval(None, None))
99
118
 
100
119
  @override
101
120
  def __str__(self) -> str:
@@ -109,12 +128,20 @@ class Always(Expr):
109
128
  def to_nnf(self) -> Expr:
110
129
  return self.expand().to_nnf()
111
130
 
131
+ @override
132
+ def children(self) -> Iterator[Expr]:
133
+ yield self.arg
134
+
135
+ @override
136
+ def horizon(self) -> int | float:
137
+ return (self.interval.end or math.inf) + self.arg.horizon()
138
+
112
139
 
113
140
  @final
114
141
  @frozen
115
142
  class Eventually(Expr):
116
143
  arg: Expr
117
- interval: TimeInterval | None = None
144
+ interval: TimeInterval = attrs.field(factory=lambda: TimeInterval(None, None))
118
145
 
119
146
  @override
120
147
  def __str__(self) -> str:
@@ -123,7 +150,7 @@ class Eventually(Expr):
123
150
  @override
124
151
  def expand(self) -> Expr:
125
152
  match self.interval:
126
- case None | TimeInterval(None, None) | TimeInterval(0, None):
153
+ case TimeInterval(None, None) | TimeInterval(0, None):
127
154
  # Unbounded F
128
155
  return Eventually(self.arg.expand())
129
156
  case TimeInterval(0, int(t2)) | TimeInterval(None, int(t2)):
@@ -134,7 +161,7 @@ class Eventually(Expr):
134
161
  expr = expr & Next(arg)
135
162
  return expr
136
163
  case TimeInterval(int(t1), None):
137
- # F[t1,inf]
164
+ # F[t1, inf]
138
165
  assert t1 > 0
139
166
  return Next(Eventually(self.arg), t1).expand()
140
167
  case TimeInterval(int(t1), int(t2)):
@@ -150,13 +177,21 @@ class Eventually(Expr):
150
177
  def to_nnf(self) -> Expr:
151
178
  return Eventually(self.arg.to_nnf(), self.interval)
152
179
 
180
+ @override
181
+ def children(self) -> Iterator[Expr]:
182
+ yield self.arg
183
+
184
+ @override
185
+ def horizon(self) -> int | float:
186
+ return (self.interval.end or math.inf) + self.arg.horizon()
187
+
153
188
 
154
189
  @final
155
190
  @frozen
156
191
  class Until(Expr):
157
192
  lhs: Expr
158
193
  rhs: Expr
159
- interval: TimeInterval | None = None
194
+ interval: TimeInterval = attrs.field(factory=lambda: TimeInterval(None, None))
160
195
 
161
196
  @override
162
197
  def __str__(self) -> str:
@@ -171,12 +206,12 @@ class Until(Expr):
171
206
  new_lhs = self.lhs.expand()
172
207
  new_rhs = self.rhs.expand()
173
208
  match self.interval:
174
- case None | TimeInterval(None | 0, None):
209
+ case TimeInterval(None | 0, None):
175
210
  # Just make an unbounded one here
176
211
  return Until(new_lhs, new_rhs)
177
212
  case TimeInterval(t1, None): # Unbounded end
178
213
  return Always(
179
- arg=Until(interval=None, lhs=new_lhs, rhs=new_rhs),
214
+ arg=Until(lhs=new_lhs, rhs=new_rhs),
180
215
  interval=TimeInterval(0, t1),
181
216
  ).expand()
182
217
  case TimeInterval(t1, _):
@@ -185,6 +220,16 @@ class Until(Expr):
185
220
  z2 = Until(interval=until_interval, lhs=new_lhs, rhs=new_rhs).expand()
186
221
  return z1 & z2
187
222
 
223
+ @override
224
+ def children(self) -> Iterator[Expr]:
225
+ yield self.lhs
226
+ yield self.rhs
227
+
228
+ @override
229
+ def horizon(self) -> int | float:
230
+ end = self.interval.end or math.inf
231
+ return max(self.lhs.horizon() + end - 1, self.rhs.horizon() + end)
232
+
188
233
 
189
234
  __all__ = [
190
235
  "Expr",