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.
- logic_asts-0.3.2/.github/workflows/ci.yml +38 -0
- logic_asts-0.3.2/.github/workflows/pypi.yml +69 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/Makefile +4 -4
- {logic_asts-0.2.0 → logic_asts-0.3.2}/PKG-INFO +2 -2
- {logic_asts-0.2.0 → logic_asts-0.3.2}/pyproject.toml +3 -3
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/__init__.py +1 -1
- logic_asts-0.3.2/src/logic_asts/base.py +346 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/__init__.py +3 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/ltl.py +54 -9
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/strel.py +36 -1
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/utils.py +6 -6
- {logic_asts-0.2.0 → logic_asts-0.3.2}/tests/test_base_logic.py +7 -2
- logic_asts-0.3.2/tests/test_ltl.py +57 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/uv.lock +9 -2
- logic_asts-0.2.0/.envrc +0 -1
- logic_asts-0.2.0/.jj/.gitignore +0 -1
- logic_asts-0.2.0/.jj/repo/editor-OCpuoK.jjdescription +0 -10
- logic_asts-0.2.0/.jj/repo/index/operations/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/00970a064cb6664697c3c18136ba7835d9b68c48f0c0d0ee468ab18abe56647aa9a9fd7b1e2664e991bba33d979ad6f9d4dbebf6b6fa315c0ed120973574391e +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/0eac0d04d45ac977ceadbed6e7cb2075f12849e2f56dbaf1bba2b23abf0d5be19c263e2a586ec1754f6a1ad37c2b3fc1709abf412fd9b82a8b481ff17a2f1313 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/10505b29a3810a6ed4017a3caf07c884f5b3990f2226236b40aa85fc1feb781de807ffb2d5a85ba92472242866ca45d82c1d79f2a5059fa84657601f1d8015d0 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/11c683f0cb03f64131192e1a1f35a3b9c1e5af83d4c97a11820e3731181b8f0488228b86c74c7455f73565e87b08c7376f3b6911ff4d8d12ea854ca1badd9cf0 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/217a393256dcaac66b8394f4f1e5350b324c1cc0f8f0b969c7092315d9226a8096633fae61956ebbb3addb7e00c815829e329b7cbe6b9a26458b756a461152f2 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/358df6caabc12b3ebc9a1f4c694c9350ced2719988b9ee69f927c3c369bc2628ecde82145a5c70fdedf3c00f319c307d893e51d0963d5fe1b83ac5bca5d0ba4d +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/38a5ac615170b00428f3d470044b4353ab4c557170ba8b87edc88f99cf9302ae396dba20ad4e7aa26c49dcfe5c660533513253155d11e7cbbe925f300ee73f32 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/3df676c8f3cf41915cf2be94b5d797b39928c3b8e6666f7bcd96774ae79474d6b4029c2196646c6d053c5f22347086badfd7cbe605c2f0c008f36fa14634e94a +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/4177138b3b9b0b6c7fcac33f71cbe6b92b782dc251da456c3414dfd87eb09b9c509e2db3e9c4cced76f4672e4be0f28c8a9f4b3806162ee3152b5d6c023558b8 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/48e786f5ecc1bafe5546d8a32eae13e5002b8fe8105d359f01aed52ef2d5051068bd374ac7e71da510f66c8d5c3e4becee6260862631810810332baf308d0e9d +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/4a539a9bb4a3fa0f7ca4a30f48948d307f4290cb6007e2c39f4275ed39feb7d288b8b7f310d15cc9a0e7ecc22700b5073d6502bfb24107684e29f50a9e78921e +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/4ba8bdb03834267acf2267ea8a27a95a9891586792729b6679aff7b536b4d412674f3ddb92521b6f65c917b065a3d64182acd5d0ca947946be3a80edabdd4bf6 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/4fca88a3db325b2f9d834724b84578d67f689b902c6a5eb5c0a0c1f4e150017631176a92d1f183e1e1048ba29206a41765c3ec945676eb99ec6d9daa61159182 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/59aad150f4d44036cf5a65b7430e1d1000af61b600935576fd2632015cbdacb30daa7ab31e2010eca1af26e6e8c425e790efdfe85abf9955fa08544e34f3b7b5 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/6e572f25cafa2de02681f549c11de96036d1ae9bdd8968d9b9e556a3a0a3dc0225350f61f4e7c467be1858e71aa91d092e391d74a6dd47ca94ccb6e69f51814d +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/783692314af8832c0b8d7efde92719a63dd0b8ff58db32d9716ee69a4089c4c13e399561f5215303083d50b1dc3d7020b96fb681647fc70606bd8c14c74c43ea +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/795fae8eeadb692c16c5fa357e59eb1e454af9b986e1dd83f4bbbdfb3416e3b295e377a9cead5cf09fbb2084d591819bca12eda7e0cf8c7042c7d73f186f3e3a +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/7ef96c66c49728312e399a9a04fa1eed94a7a82faf9223911a0a873f7cfefe0c48771366dc9760d53496fd49f6e851490ee85097a729ffd550f7629c2acd0042 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/80fd078ad9c7c181c37658adcc82d2d881274979bbe77aa4495419d97126da9298b9c19479786ee87f87c017ccf232b6f464390e4d4e8ee2763357d8b97420f5 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/89e48d894646f17e708566bac7449ed0e1852b3acfa2fa4e2ccc6d78344c472980ece71dbd820d0bdb07614d5f14084fa53595860c644133748b40b104008a83 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/8a4942e196bd5520d15f1b943fc3bebc516b2dd75ce66d0e96096c87b649e55ac30818b3350e488a8e489b8bd45ba9ede8f8beb4a41d8f8360d9d40662692b0f +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/8fa536caa95922a0c944247fea06703b6772fba73552f5e0e7626578ab3e5d976290cbb73e05808822bbcee22b84bd592f8c8feac0dac0be8f141e99e471ae2c +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/965b4b5dcff42b8d8ef715a5595c1d4027faf02b8dc04ea038230c54f30d0320d80902d3dd69923d3d4ec3a3da5c8ffdf9e064124c81caad84e2168f9a3b5516 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/97616797b751fd71a218d2fd40f34a655a0586b50a02fce674c0d0125afdbd1607dff98fc2d45843f8defa1c7ced673ad73c1633bda0f3f9bf20cae6fa5fb90c +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/98fd2e8eedac710591c55a0ffe3b927d0853a0cf5bea34dd8d394b468f0261350b9db36727a3cca03e576571a88862d2e1b58d908d65b4413fd0a5fdffd93b48 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/9f338bacf12d8a751009aec44b5596cef912c0e99b2987b8c239c1d0101367753aba311ee0b4032906062fd2670f1bb16fd0286efc641a02c160aa16ee2e57ad +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/a0178152e7163c13d0219f543c32d9dca99bb77ca6b9d66375f4236060cd602e4b29a5647101f5a3ce2db93b78ee3b6584bcc2750441cf1702ec64ff70d8c426 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/cc56da91d4dc9bf17e51345b72697cc308900b646e1cd8b50dc0897abf62d2841bb02b6dcdb06601a3f3f348d15dcdbb89275bd329a76b7ffba996c2b91dfaf2 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/d05b1b6e033d81a2bce8f03f91b0aa47ca995668c317c6cd3fd5e2b0312d6eadab130fb6a0ffe4ba1bea816eae24923a0fca99e75baa6c020e083ce0fdafd90f +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/d0f1d33268caff9545a2bf7d4c2f9ee52f0d36dee45be0b470f168de1077b0bab7bd2df0b871de232504fa9e60283f0ec8d0ad5574b9e183e5e28d800daa6641 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/d7f2d92345b897bb5777f2b8ef00e21aa2bee8702b14fbe14501ade2c75026a9f22ee9ffb0314a91fb6d6b4e9f54a7584e192eba932ccf0c18a38ebdcc7827c6 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/e1f98647ba8bbad7c17d8eabce6547a7712979fe76c8bc02a1e4a1c795ef36d451ca10b7107cc082607be20b2bb2e77c9bc258a9c1a5500baf7d13d05ff7eecd +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/e520b2160bf2c32a67a528017b5192f87c68136db438cca6e7257eaae02540a0fbb803d936146f8c2f2a0610cb5389382580cd475a5e8e11b54649033a93da92 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/e8f403c5c01baf346b67411cc9158805d23873c6dfd45c98f05ce94d50f0c64f105c858964bbea7543bd5aae866283edac07bbe4d0d1c3585dea5f7929064097 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/f0d805e05cfc3637fb862929c0dbc67a2ba45e186f855f1c30b49eaac4e104ec3950e47e1fa3026c8046637df1d78fc818a6e3dfb84d7462c925d52446a48eff +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/f60decb80583abded0d4ba9da5b8b97f171f374dde82c905b25c4d75d2480b3dddab9feefba66e309683856034dd578eca41b40f448ce061e25b999142c1b342 +0 -1
- logic_asts-0.2.0/.jj/repo/index/operations/f882470fb88c2f30efafc55e7eb4f8d36a5f403df82e8a93a31c60b5a3d4f136e6e340cb9fc95170bfe01b4f82be2839945662feff658167dcd3201e5c6be810 +0 -1
- logic_asts-0.2.0/.jj/repo/index/segments/14cb6fdb1ccff4e4a1efd59cf00fdd9c400961e05e0dcf315f1f843b24bdefd636ae8519b9a2556e295bc0b3441ce3c8dd5319ab12c540cf2d1f3dc1a48b6f6b +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/1af54ef723073c7dc079dc88a103a604ec64551fe647cc244e2062ad6049053882deab9f377671f942e4d4c99f6d35c01518236b4a51ce96b3b4cf46848ccf52 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/28bb22c322f273ed338b7e4e12f5ac1ae5b287f35443b9ee244d8082ed02e3d8dc0566572a9e3af75c948db3d187d74384451c2f2e565692ae2f81ccbe0c947f +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/2cb6d030eab0a49bdff619bbc23227da07901cec28cd42d66ea3a0c3c2c5161625b22eb31974a501d4072bf7bf6af67094802feb7c80b65c2f8ae2703bd45aab +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/302ce14ea7c5b375d6016e86b3bc9992f6240a50f6713e0b1a4cedc51a02163dd502d7abe7b54fdf03b4495b3e34757b16af4d7cd775e8ce71acabe92be6de3c +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/3167d24f4e71c4bf5c1f3bf8a730f4d90eedc5fbd3d763316274594c4e9aa836d2d9d454aa405c7088dea8148ef2becea86ba268e91f3507e6b44c7b7da19564 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/35408099e97560996cb612b4149bd969101eba2f7efcbcf681edd04b90e75dc3bf38dd116b4cd2a2183778039d21b3a9063c9f1c2592d403420bc51d3b9822d3 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/3a2b00e065cc51298660d38ad012ffed6076c2cee798e798e90310fed60a7417effffbb5fb32b0a30e3e85d45372325ac0c8f291c624c35ffa7328af68698ad2 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/3a8f5f86431192a87ba94d9db5b2f978fa656a49ccbfb000c357c7900640f0048b41f725431273e9817b39f05b4e97216087188826e5b4566197bf6438569cca +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/3de822b7eac8abaa118331e089ca33f37aa5bbb9ef5bc0df068216705050dce04bac59ac54d9b53b3bdc575ea4c0306cc28f3bbc7fd10bfe08f7ab532dcb7e55 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/4fd199a37a09f5f0062787447083adb7fc5d8ded1ae3bad5736c59d554da723b9edf88c92cafade6fc842a0ab4d4e8b3310f1ab523f5e3b3bc2fa762cb9aa9b6 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/4fe6e973527707eb646cdfc1855c213c85a5104c1b680f60823648de4e6204ada9a0df9c566a3b20e89bb3f674b5be648cbb4dbcdf68cd576722a3d744519f69 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/51eb2c81ed8f7981b2433d016f018582fc48140099673c9a00d0bbef325f5b4e935757418648821da1ea44cf64a300616f393cc65ede8ae383888076cc1de91d +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/70b14c835e21a79f7ec25177b506111dbe4e36d3fe2798d238d0aa0ffa06484a5617b250510e88fa22d4e2ec5741b7b6ea010b796a35ae6735c02e52455cb209 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/76359c76817c1858802fcd7aa1f33b06abee41b5386a06eca503b70eb9439f6422a660311e3787b9f1568026170389745aaf1e3c74a6f7ced407b31b81e52d1b +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/79c1d931873e2b2c64bc538061993fb5b433a07cce6462c1a80e522fad2875570a157058b52ca3f1a576dc2783496d5f2176af2953107a8f3c81b790870a9c3c +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/7f35405a95696abc6b1524b01f88f8b0663568196f3721fe2e87fd4d024459b6e35f3930c49f686682801210ebc33b235e21c391a3e1ffb6fb42a30057914c97 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/8204f4617412a15d50c27d36f8b799212795296a739130741624aa82539e1a9dd7cee3e3ec2341f8b7fde32fc49b652724110906237129ee8c942e3cc5c4ec39 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/8ade145a1064ddf61af5e6fe2c6cd0d42aa1e84cbb6daadadf072bd419b8c23bd82b7d974596f852631f90808c153c446a7cd0cab135cc2b2e0b90e720651cd2 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/92fb6d7770b1ac9a13d60bce8423c957db59abab79aa7290e949a0aa088e54c8c2e1614bfaa05c6931a5e18c6158ce4d338cc2100febf41a44ca0b5699fbebfe +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/9a372254bf244988b32d2c1e9bd9aaa42ecbffa48f4787027b2b6dc9f9ad3477172f1e464197f1e707ae38b4becac714c81847dff892b99b2fcf2868cb9b6425 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/a452d1a7c379c860eb56b9fb3289713b1c97a17ab378aef7b4a6b2fba55e12737ed72a627a061d86d4975520deb8e9cf28109ffc2aaa1f1a3abf543f44d3f2ec +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/b5a696627ab19833d500b93520138708772edf21c2df25b7d7be447be00769605e874e2e103dc8b0cd4ac4f710d60e655249632ef59ceb22273035a33c230c95 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/bcf46b9938e485484e358c4df254e40e8240a6fa116f7c2bbdbc7d367ff7d2d1e5c1955a339298fb61d3d8ea615d8424aca34d5310c828072017075c8fcb3964 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/ce4eac1f3ea7d618d84ea665d1cce74959538db8bd580255df7083a1354c4396043ae8e3d6c42f54b7fff806d642dbdcff50ec3b59d0e79b894bab75d279d6a5 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/d27ad326963b75736b636adad9fb812eb3f2871e0efb4bc7db37d4b701a4282911eaaee91bed3a759e940769b667be1ed66f2d7f2f41ac3906b87ab7eec19c3a +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/dac087f9295a24563c17b587948c5984e1538abb623b15c5e30bf1d8ffffc11e2b65f8b767ac292a8adf3c8df4bc244ca269c06391b4e20632c506470e650c7c +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/dd70ebd4d26c34c0b0e6e8558600792397e88602107dfeed052ddde32dd7a2b2e2649f700b2b6e2d36e186f1c64f00aabbb6fbf3bdd7236420c71687b3b8de4a +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/e6f7830699da0383e1bec49f743073ef82bb42186145bc077c99b68e35b8db470f24bec9ab6aef882126e5c24b74d0ca60df0439b4cb2a27e2e1c6c6a64d2c0b +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/ecd75f21f36d65727729be766c7b707fefb6ea96e9715944dd90c705012d203c30752483970e9ed81954a507adca6cdf5f5c1219819b16f14a95425287fda172 +0 -0
- logic_asts-0.2.0/.jj/repo/index/segments/f3e6a4b65ab6090d2559fe362303a8b82fe453509035b68b0d24bd589afc885fbc8c487586663095a8872493ef8e559eca6dcc848eec27d5fbab5594694e93cf +0 -0
- logic_asts-0.2.0/.jj/repo/index/type +0 -1
- logic_asts-0.2.0/.jj/repo/op_heads/heads/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -0
- logic_asts-0.2.0/.jj/repo/op_heads/type +0 -1
- logic_asts-0.2.0/.jj/repo/op_store/operations/00970a064cb6664697c3c18136ba7835d9b68c48f0c0d0ee468ab18abe56647aa9a9fd7b1e2664e991bba33d979ad6f9d4dbebf6b6fa315c0ed120973574391e +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/0eac0d04d45ac977ceadbed6e7cb2075f12849e2f56dbaf1bba2b23abf0d5be19c263e2a586ec1754f6a1ad37c2b3fc1709abf412fd9b82a8b481ff17a2f1313 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/10505b29a3810a6ed4017a3caf07c884f5b3990f2226236b40aa85fc1feb781de807ffb2d5a85ba92472242866ca45d82c1d79f2a5059fa84657601f1d8015d0 +0 -6
- logic_asts-0.2.0/.jj/repo/op_store/operations/11c683f0cb03f64131192e1a1f35a3b9c1e5af83d4c97a11820e3731181b8f0488228b86c74c7455f73565e87b08c7376f3b6911ff4d8d12ea854ca1badd9cf0 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/217a393256dcaac66b8394f4f1e5350b324c1cc0f8f0b969c7092315d9226a8096633fae61956ebbb3addb7e00c815829e329b7cbe6b9a26458b756a461152f2 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/358df6caabc12b3ebc9a1f4c694c9350ced2719988b9ee69f927c3c369bc2628ecde82145a5c70fdedf3c00f319c307d893e51d0963d5fe1b83ac5bca5d0ba4d +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/38a5ac615170b00428f3d470044b4353ab4c557170ba8b87edc88f99cf9302ae396dba20ad4e7aa26c49dcfe5c660533513253155d11e7cbbe925f300ee73f32 +0 -5
- logic_asts-0.2.0/.jj/repo/op_store/operations/3df676c8f3cf41915cf2be94b5d797b39928c3b8e6666f7bcd96774ae79474d6b4029c2196646c6d053c5f22347086badfd7cbe605c2f0c008f36fa14634e94a +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/4177138b3b9b0b6c7fcac33f71cbe6b92b782dc251da456c3414dfd87eb09b9c509e2db3e9c4cced76f4672e4be0f28c8a9f4b3806162ee3152b5d6c023558b8 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/48e786f5ecc1bafe5546d8a32eae13e5002b8fe8105d359f01aed52ef2d5051068bd374ac7e71da510f66c8d5c3e4becee6260862631810810332baf308d0e9d +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/4a539a9bb4a3fa0f7ca4a30f48948d307f4290cb6007e2c39f4275ed39feb7d288b8b7f310d15cc9a0e7ecc22700b5073d6502bfb24107684e29f50a9e78921e +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/4ba8bdb03834267acf2267ea8a27a95a9891586792729b6679aff7b536b4d412674f3ddb92521b6f65c917b065a3d64182acd5d0ca947946be3a80edabdd4bf6 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/4fca88a3db325b2f9d834724b84578d67f689b902c6a5eb5c0a0c1f4e150017631176a92d1f183e1e1048ba29206a41765c3ec945676eb99ec6d9daa61159182 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/59aad150f4d44036cf5a65b7430e1d1000af61b600935576fd2632015cbdacb30daa7ab31e2010eca1af26e6e8c425e790efdfe85abf9955fa08544e34f3b7b5 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/6e572f25cafa2de02681f549c11de96036d1ae9bdd8968d9b9e556a3a0a3dc0225350f61f4e7c467be1858e71aa91d092e391d74a6dd47ca94ccb6e69f51814d +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/783692314af8832c0b8d7efde92719a63dd0b8ff58db32d9716ee69a4089c4c13e399561f5215303083d50b1dc3d7020b96fb681647fc70606bd8c14c74c43ea +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/795fae8eeadb692c16c5fa357e59eb1e454af9b986e1dd83f4bbbdfb3416e3b295e377a9cead5cf09fbb2084d591819bca12eda7e0cf8c7042c7d73f186f3e3a +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/7ef96c66c49728312e399a9a04fa1eed94a7a82faf9223911a0a873f7cfefe0c48771366dc9760d53496fd49f6e851490ee85097a729ffd550f7629c2acd0042 +0 -5
- logic_asts-0.2.0/.jj/repo/op_store/operations/80fd078ad9c7c181c37658adcc82d2d881274979bbe77aa4495419d97126da9298b9c19479786ee87f87c017ccf232b6f464390e4d4e8ee2763357d8b97420f5 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/89e48d894646f17e708566bac7449ed0e1852b3acfa2fa4e2ccc6d78344c472980ece71dbd820d0bdb07614d5f14084fa53595860c644133748b40b104008a83 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/8a4942e196bd5520d15f1b943fc3bebc516b2dd75ce66d0e96096c87b649e55ac30818b3350e488a8e489b8bd45ba9ede8f8beb4a41d8f8360d9d40662692b0f +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/8fa536caa95922a0c944247fea06703b6772fba73552f5e0e7626578ab3e5d976290cbb73e05808822bbcee22b84bd592f8c8feac0dac0be8f141e99e471ae2c +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/965b4b5dcff42b8d8ef715a5595c1d4027faf02b8dc04ea038230c54f30d0320d80902d3dd69923d3d4ec3a3da5c8ffdf9e064124c81caad84e2168f9a3b5516 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/97616797b751fd71a218d2fd40f34a655a0586b50a02fce674c0d0125afdbd1607dff98fc2d45843f8defa1c7ced673ad73c1633bda0f3f9bf20cae6fa5fb90c +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/98fd2e8eedac710591c55a0ffe3b927d0853a0cf5bea34dd8d394b468f0261350b9db36727a3cca03e576571a88862d2e1b58d908d65b4413fd0a5fdffd93b48 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/9f338bacf12d8a751009aec44b5596cef912c0e99b2987b8c239c1d0101367753aba311ee0b4032906062fd2670f1bb16fd0286efc641a02c160aa16ee2e57ad +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/a0178152e7163c13d0219f543c32d9dca99bb77ca6b9d66375f4236060cd602e4b29a5647101f5a3ce2db93b78ee3b6584bcc2750441cf1702ec64ff70d8c426 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/c01b142f720b0360311c8902d6dba372de4380d6b502ab2d20b6c46152ecd6ca7b94a7251ba8a4745df602b83a05978d62143a4f67544602ad63fd4c1c7b9162 +0 -5
- logic_asts-0.2.0/.jj/repo/op_store/operations/cc56da91d4dc9bf17e51345b72697cc308900b646e1cd8b50dc0897abf62d2841bb02b6dcdb06601a3f3f348d15dcdbb89275bd329a76b7ffba996c2b91dfaf2 +0 -5
- logic_asts-0.2.0/.jj/repo/op_store/operations/d05b1b6e033d81a2bce8f03f91b0aa47ca995668c317c6cd3fd5e2b0312d6eadab130fb6a0ffe4ba1bea816eae24923a0fca99e75baa6c020e083ce0fdafd90f +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/d0f1d33268caff9545a2bf7d4c2f9ee52f0d36dee45be0b470f168de1077b0bab7bd2df0b871de232504fa9e60283f0ec8d0ad5574b9e183e5e28d800daa6641 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/d7f2d92345b897bb5777f2b8ef00e21aa2bee8702b14fbe14501ade2c75026a9f22ee9ffb0314a91fb6d6b4e9f54a7584e192eba932ccf0c18a38ebdcc7827c6 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/e1f98647ba8bbad7c17d8eabce6547a7712979fe76c8bc02a1e4a1c795ef36d451ca10b7107cc082607be20b2bb2e77c9bc258a9c1a5500baf7d13d05ff7eecd +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/e520b2160bf2c32a67a528017b5192f87c68136db438cca6e7257eaae02540a0fbb803d936146f8c2f2a0610cb5389382580cd475a5e8e11b54649033a93da92 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/e8f403c5c01baf346b67411cc9158805d23873c6dfd45c98f05ce94d50f0c64f105c858964bbea7543bd5aae866283edac07bbe4d0d1c3585dea5f7929064097 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/f0d805e05cfc3637fb862929c0dbc67a2ba45e186f855f1c30b49eaac4e104ec3950e47e1fa3026c8046637df1d78fc818a6e3dfb84d7462c925d52446a48eff +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/operations/f60decb80583abded0d4ba9da5b8b97f171f374dde82c905b25c4d75d2480b3dddab9feefba66e309683856034dd578eca41b40f448ce061e25b999142c1b342 +0 -4
- logic_asts-0.2.0/.jj/repo/op_store/operations/f882470fb88c2f30efafc55e7eb4f8d36a5f403df82e8a93a31c60b5a3d4f136e6e340cb9fc95170bfe01b4f82be2839945662feff658167dcd3201e5c6be810 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/type +0 -1
- logic_asts-0.2.0/.jj/repo/op_store/views/02bcfaf082f500471d9e64f32d8a416230c679efe7bd33a33b1c6a3ba93a1bd1613d1b35a8db3fa553be4de2cf8690cb186f07261f949c05746513a96d31216e +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/05abd424e86f22b95bc13365d9ccd010d0270b1113176bb49207c9797f4d3cf9e4f16a080893ec62f48ad6df75dbf0a482ee57d582a31da99cf211337262d0e3 +0 -20
- logic_asts-0.2.0/.jj/repo/op_store/views/074d293e16ad48bc27ad56ed7cb6ba4bf6de5f7c2f599a4768ea031929d00a8efec3b7193cccff05fcd6c159a25b04e9f0c6bf3c5f0bc0c4a93f420d5662f214 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/18a7526ed56e1c26ea3e895b33f6bce20ac5c3451e6d8fe6fffcae8e93c674574fb9bf8196991951fcc430fbc2e4657aca66137337e5398546314c073cc62c44 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/334fb674fee13ba5b698363f69eea78b3aba386a0375453dc45922742ff69be920e4f0460dbb5f44b4f45f0f65f841d3e62b5a128a0b22de8b91f6dc64894709 +0 -16
- logic_asts-0.2.0/.jj/repo/op_store/views/50451898bf52647dc89928cb16ab6a728f3013a8eb85d8bff2b14318f4816af1e7f6a38ebfc98dabe17be52096ae1ab9994093694712d5a2a8b6e7b610dc5450 +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/5536907112b3426eb5355dce462f99064ae03046ae6c3f1e897ae03784f7be3f7287c85ace6a85a5672402d9949357c2be92a1b589335d6111a08933c3b0016d +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/59c7ebee3767ef2f2c1af3478415bcc002b8008b6bb8e2cea0b807218d3788e2288be61a6582601f57c9a17a611b7dd6976809ad3b95b663a0028d2f151c732c +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/5a335ff0110008eafabe2fa3e60eb02ab5fc28d3e704e5e3a2ef6491e9b7a219ab720473e42687dafe387efa73fe020c9f264342ee8c70ed6b0962f5128aadad +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/5b002d7c75b8d284c5b83ed930df0a6a814e21e954b3db1bc77439bce34d6be4eefc49b45fc3b3eb58408c6d8207545a748bb85367f656162961b7d2ed34e7ee +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/62d8ddc6d7dbd2260c106c127af1dc90563ede37745dd42513efc9ade64d579a88fcb1ac5e3d2b5982aa17232a1a37e657c946e873b7541a09cf4e85902869e4 +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/66a7962794faa33ff703d49444177421094420c275c18a60f55ad0aa3e3c009e1f391fe8b89a613e105e680b8b23c9f265b7b3b69d4de8aa9774ea6a8f5848a0 +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/6c2b32f9cc181c7a587cf8c0e3f8e1110db1e4a71e0a5281f330a732d4433d9b4fd92ede58e29b2dd9f98841a36f6c6e72edcbd5a917af46dacf5100037a79eb +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/707515b3ca45c6f4d982eba9261f590649abdabfa27d72e1300658b32c7b3e14b109cc7e1a143f7b2f6ce45584566b0d684511b078a970c03526743167cad62e +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/74d282a08e62f9a9a252d44e91febb0342a78da7c2ada57d55224049959f947008208cdb090208837169feb599f2b89d99130c47d1dca9922edbe0f04ae34e57 +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/7881c0a515cd3d81b748b79ffcaf5c949019f87d78b1b55744b172e211d5989873fd94f150cc75e2d06e943b36f21fbf815b87b4a7039153d449246619dfb66d +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/805f0880d449f351f32a63fb2c3d67de2cac28231833fd89ba189b6c6a13f95062e13c1983dc0ea39169b494a1fc1cb44f3ae1fca2f7b1cfd0f8bf5f0f1f4afb +0 -25
- logic_asts-0.2.0/.jj/repo/op_store/views/85c3fb65664bad84822c7db92310b979c18975d7710576b3eb63aa0f24d6620e6343c659916b5f68c200a017e1a44883ba91a887a6fa7bad39ef1c57d8ee79f7 +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/877daec6b5b6af1dd30ebba87191c82ef9ac2e42011968855e5e0691ca4b4a8afdefc39273f14d28db983e9262551f147bca8a85593875b580ce2e61e485bf38 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/89c501d0805b93851f7d1b21a4d60eabd82d424eb496f1f05fc617ce9701df7f2d92bb66eff2a84d7967cc35fe6cd9637495b21c53d40bcefdb95996bbb2015f +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/944d79ab4fc74ae86ff305d544c435c45f0f47270be08418d41143873811c0c2d8d844e1a11d42ec8c4c970900963c2e6bc732ffa4ce54236fa7cca9ab04968d +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/9480f1b97c011c0a8a2062b51e56e7ba08ed7014bfc3dfc9a5c1dcd0ece37ce9afe4ec3027867bf2eff2f4455383f07185de69e08e4dfc1770afe8ec680987f1 +0 -20
- logic_asts-0.2.0/.jj/repo/op_store/views/9a07d547b4a9cef8671acc3137e418530e4b5dd45aa9ae803ff7f3c5ed985c1cf03f500c2cbe724c7d9c1b5cab3f5782bce4f5ba495a963d58cf28315148daca +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/9bc7a04a8709c20560b691810fdf0030170855037c1c515bec96bcae40714230557f545680853c1fb7dd9762dcfcd054ad564d8554088d8fe8e4d529653b49d2 +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/a8ba47b295545daa76bc6e52c9c2e8325403f8662ee003f2baa23c3901fd2740c512eea97fded0262ea4c89259d648f48df0dd8071d203135ae2a11c50d4c9eb +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/b4452d745321480fbf736b6087e6a5d2ca258664650fad7291f83b658af8a894552518b430647c9418a3bfb2af4671d1abad5bf1182d38ad4c9dae3c4591e871 +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/b4e0d88a10e21ac524ae6b46f9f15d90e1821f6bbc11f8091b5a6da94a5b5ac5b949968d6cf606e08b93e06d558ca8bf98a0a089ae2db243282bc741215e791d +0 -26
- logic_asts-0.2.0/.jj/repo/op_store/views/c4f58c19f9146808de1116e10cf8affedc997f79e3608044044731621d760190007995621c6261da41b292b7fa9ba6422331030d1f9edc77d5e25fc2dba1e9dd +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/c72c5f9e908bf0b9764d8330a51f103528cc38aa03557ef9cdcafecaa1276e16c0034c4e6196ff3814314b40232d4a8b3d1096e0ac5d9f941919f073f77e72d4 +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/c9dc3335f5f61ec4e1e7df7d10e4c67209928b6bd58990e47c9cece65fe737bf82c285d062d87b0a96a577fc1c1946650e9acb273717984d89085e7c5236e3ca +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/d69b72938390c692ccd51085f34d85a977ba5bc92babc301e9440438bd37f54a4eabf07bfc9e10aaa6f94dd2511f942dabf79e41f657e6de5a135ac27cd8668a +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/deefeb806e51de28cc60d4f0507240dac34453cd49fa655aa5620f8b057c4d75959112a0145e586d79dabe3b08dec7456754b13219cdfb3047812e345cf2a74a +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/e32c94c7ad7328d213d4e68a897a63ad60064e23b7847aac8953dc32bb7baeb1b53882315b70a87548a2e73d885952361f3d5b89e4e0d644eb2cac85be780c10 +0 -19
- logic_asts-0.2.0/.jj/repo/op_store/views/e603f1f928bfc381ce19879e5f096423b27b8a893c99eb467476e48a5aa190cb1303253ad940fa8dca9ca1703fae5ebc8bafb7cc8d3b0657c7f559f5686a7246 +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/e70a032f93b213587daf23c15f95bcfcabf8858755ea077350eaf742e28381ad84f5e77c8fdbf969a7fe235adb0b0a66ff0deaad1d3b07142698b4d33f5d4172 +0 -14
- logic_asts-0.2.0/.jj/repo/op_store/views/ed80f03f7aa8827bdb1dbee457c49c895d65944516a6f377fdf057043e67e018a0406755f17ee92ca594601c312f1d57c19834d4613525b410622281c6a411b6 +0 -24
- logic_asts-0.2.0/.jj/repo/op_store/views/f0c5f94376d1cd396052488f0fe5fe7bb8ae0df4cd1a36e6fb294d0431c1207a33e5f690547b1668753222d6da7e00343052a7b1508c45368cc7f99755c1f01d +0 -0
- logic_asts-0.2.0/.jj/repo/op_store/views/f24643cecfd283e15d0adf87a044d1576a8d2ed2156cf741f0a35fe13531b70ecce60930db4221154815518450a042137b00e95839ede159933ac7867d06b2d8 +0 -25
- logic_asts-0.2.0/.jj/repo/store/extra/03ab66f6b1eef4f5ce94922213a66b7499640a7b587ca4c4d1aba4313754459081168c6ed82c06cb159fba2d2957cf9948ba2a268c2229e7a8b1c5577be0a815 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/0737c10afae40e24d69750d17dbde0e3e5f622aafe4532fa93b3658b5b40811cfc6196c7f20c147edd779e4ba01a9cd7dc5d13c2b505f7cbc5a9af14b6596c59 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/0bad26bece1625969e8803d8d69c2fd5db4c880dded2b3b54bf84a5d9233cd5fb404d465e17c7f90cd50006280b160ab7ebbaf4903f763cead08c0498b9f189e +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/0bda35168817ac3fcc7abc6f6b476a58e51232b1e0f6c1cc5a096b5c9799a791e979c9110c5f63d5b17e3e2b5820d82ede508351b5fd2ccee2a75eb765a24db8 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/18f02f21bc7c194aaf4135c556e52bcf4ca813d458a1210183eb811f5e168835fbc90208857062da1aebe0fb0ca4914ba1a3086d1d087ba1008a995d5f793774 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/1bd33a63796c859ab97625087fc22f503ea361dd4427c851a69fcf3713c19a0e75a8e2b71cf5f9f78270c3801151b6af6e98304c49f987987b4d04864f3c13a7 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/2676c2e9ec402d052b0405d63ebd9327357a35b4952ddfcee9a5a6995b73e07c44837b79bf9970abe2ec2588002ba3565fda8fed79c44d2a213abc6d45ec3b00 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/2a29e1aac0c7468ae282275d7c34572f823673dcef93e9baa9a27bb97f2acbcf5705a93b2cfe09240220f4c848fc120a6aa9455d5ad55b26cca1d394281f1cfd +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/2e53e53c347dd2ca50559dc4f1b5e33d5bad36595395055bbdf3bb4afea4c0b08ee8bb25b36c98479ad2c955bce8c342730bf47d83e4d02c752340ad2e77d218 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/2ef9b457e6b7cff5baaf06fa6380773aa591466bef7c4ca698e51742cdc1c94bb3129d04623db6f93e1c9111c580c0bfb8844dba46d4d0dff2b36feb8401d4d0 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/3138888bbd1506adb541f168ad17d478fd925186ff3f53309176695fda4e795062031acefe6eb46c7ab7cc8b812a83ce51c0928504037f1eb095c789ba6570e1 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/35d38d9a8d2b2938ee88c4dbf8ec827b29e8db443efffc3bda2c39f6548b652c098388b594e4f9cd1e9888c5757bfcd22d468b9a10a811afd0a2bd67e4d00a0b +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/3b6659c8397fec2f619150c74a8951f377168874f778d3116b54a38d029a038cf52a1266df2d5c6e205f12d4821261989234e7433692f00a1265e53a6ee1be69 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/3c00c318b5d17bb6622625b331e988263622a7fc16404c6b1e169409637a2fa13ff28623ac2d9e6f0179edf7046cb13cd53f0f076dc1c716a95fd1a0dc7683e5 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/3ea4513109dce8411ac4110f483b93976a7cc1864abb17bd10ad26e111a14abce634add7aca17015b9a6250b32c488dc7a1af739e1ce8bd07b195c808813db9a +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/482ae5a29fbe856c7272f2071b8b0f0359ee2d89ff392b8a900643fbd0836eccd067b8bf41909e206c90d45d6e7d8b6686b93ecaee5fe1a9060d87b672101310 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/4871620b75b4198812a44f755c66df5a8bb7a231003a34a2ce6a0dc32d499766a62a28bc75793bac5fc16995e84fe01efd0bfcf8933bd1c542aecc1c4bba624c +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/50570a467496a2d76e3a8966efb9c5460a54a49bba4a71d1acc020f260c338c2d9db6acfd5db1dc51845dd9453c1292e96f2ca1e7f471f6581e4d4c6fb2b377a +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/57e7a60333e02ab1f24bba84600850973f0f37c0110258189f2d7cbb17aad497806a6dc07a10aa7d0e9f0202532840dc26549e14166fa1915080148aa71aba52 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/665d6744e2c4c7ebe64f1c238764e6779e1ebb198348e96f328aae05d57dbab0366c54e93f9b179afd1a5d55a278b37db67dae191ac2707b6be45791cb3c8202 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/6f6dc46e41e201094ee867e71590586d40eb7d0ec4fd67f8fac77d197dc69614131007b62a97f5682a48680029d8b74cc44d0636498a45d13f673ca127b8a66c +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/76f882e78820e022dc06965b576b97316114dbac7c97c4a9a4950f6c4607727731e9c1a7db87fe876405644827671d1fa7d99dc430f4a7b34f429060c85e51f7 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/7714594148716c1ffeea1c1d9eb4bc1014e5d0d9d30202759328cadad5729e3733678a4a6232184e5b961bca234ab75926c08e6845b3b7d6de9be3c12197a913 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/796743a27e317817e5e3829c86a95b525ee6cfa59256bf4b6782cbb2672666b2e569c092d4066868cffdb5d54dcc9f093a56d588082f967fbdaa98448481a7d3 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/7bf682c19a030aca2092b693de23630284cfc31cc7163cfab90ef49a3abfaf1797864351cf5734a1881ad44095925ac74a484cbb899c5ad0137e20153a3cb4b8 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/8851f70cf48babf38933aa4aead644994f955883fb0f10d76164a59024261f0ccdba8d1deebd2f82600ba338fa05307443e11afa90f9ae054935eab4174bc6b2 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/927060fbffeca248fdc390c2c897b4ae6dd65cc6b9336c59dd669bf2ba8b711d974ba3ebc201c83ebd4cb959f669c5878efbd31f2ae7adeaa5b098242d9aff42 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/940c047ce5b868c4183884f0550598b66b272182206bf8696f7aa9db24f71386c7bf323a536f82d23882c8b1b2c76bed7b1dd21c5320812b7db01ea1eeaeb892 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/96318706edceab566a58890d4317a56a0d682e087aec9ef56d06dd2646fb1e4557921aa6f5c71d8ca30177750f936ee015a2ad2e1f1be5563b57b38f505f4ca5 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/97361b581a51c062f7272f67447f7e4c659cc12e2d1ed132de97550f3cba197f22f287a2a933a2e8f465de57b30543aff479b91832663dd27e199eea18ed5f33 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/98be2592e99f8cc2c4ed55be68987ecca86ba6e8e003220c2a3f14c0fca1dbef76e0dfbbd2e99076b9a7bb2d5ee2a2998df2b832c6cb8c4b7d5908f0b351b5d6 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/9c28c24b3c21fa163f56f7f6205b2ad4d78902ec3528bded6228be945000125208a26318d5b52ba8eece0cc25aab6c19555f95d7d2ef4c88b5187cf98e246830 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/a08c53f524df4e69239980703a642772af3017a9ee4aa06a2c5cb2fc0b7c9e9668fce62cc83d36470f3e7fcf901cc79d9c002d70bdbb185f58434e10b83177da +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/ae132c1a6b4312b157cd1f62217218100d444fdde14b5c35775abe28f88b1ad0325b935249d3652c8c65e280df41ae4df184de7291664ceb523dcb4451828eae +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/b064d997ce273dd1ff7779d975191001e5381b2eedc97df8a1fb4e089255f32c4563f58a865815cc3c69158b0fe1371ae0893d3d01cd6d6b1d91123614beaee7 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/b9be29fca6083f6cae08aad484c26f6f4869f747e1baf54dd9fd08b8d5ff0080192b078f654dae4e12b2b6c51c6685ab369b911872d1d2c091b4b9e0ad7fe20a +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/c0263b76d47f6234fc9e6ef872961844749b0b7edcbc7ddd2fac29de33db0cb786e27db7adb21cd2633e6aae67178dbb2256ffa86f8b1e0dd4b357fd57c0a68c +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/c1309162eb877ed8f429b061d81615b07c38dd1931d5fe91984ffeb2555578041201f8a483c677f394b31f98cc0d59f7109b6d9884b3006d07f05e3e23e699cb +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/c9004bcbcbbb6fb6f609c0b84bee6fd024f7237c7b74ca56238fca702ff214dc29d57ce89ba491b32c0a8926fdb5b96fd98478181d1bd05c136048f3ef161ff6 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/cb6d3720600f951c529e266631ff522702ddcdc172bf4ca14cd00312c685e3d39999b15d370f299e083395e042c53a8f3957a15e5bc528fdf71af8e50fdcd7e3 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/cc41167b91c4796180645df2eed1c8fe305938868cc94707779b90dec2cde4b0303cc8ddd415407dc2a6f354debfd04dd027dd8382366329db11b47084e675fb +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/d1bd83bd631af88936f38dd4daf6a272c9a28f1cc1d022c95e0ba813d63413c6b227cfbfd464ca954ba4776da8c04d7e02e3e5a1645ee0c04ee6ffdc16f958bf +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/d3e38828c9b081db0a8066af23abfa11b56ea755fc405181843d67cca2787d01c83032a7f34d1b6fad72fcab23de3072b29af9130e5a0a7e246299d6d9663e58 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/df15c0dbb7a782d61570e5287984576eea4d20fac9f3859a853ba2cbd7467de02b1519dedad9046ada6696d6478dabf10f92d0008274b79c8ba23dcb5200cd47 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/e5fe501246286b06fe57d01e4f173c3a1d0071c3b8132cf3fc5430420933ae6ec87c776a3d446f64e0041bb08fc74da96e48f98f066af18b19b555e7d5239143 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/e8d4cd67b5d2d5fda235aab26608b863d7acfd846893e31c06b5670d77578978eca128b2911fded7c73a50c887b74fb85e707185dd8575b1a03184d726db216c +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/f0e228b05ea5cb6eb374b8717289c70caa484a230fe72054c995f3003e6a2b88a6a4eba4eb2b2e236f9a7f8dab89874c35070178e8a09b3df80a71a776a350d1 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/f2f0443ad5a93d53803beab9270fb6bbc7e8cdde08a0a411fe9f9eaf0b357b56b9bae29dbc880982a341a267860a21f61ed2c57289eb0724751ee7db0f477db7 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/f3f5203913117ff18207a2c320378e5816fbea42039df6ab2fd7b1ccb2edede36b1d3978cefe259a616147dbd609c7e3ffe7cd8e1fd02762f6b28373927996d5 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/fc360b91f6f01e822d926bbd3dca152692d666e9295647d94abaa37c9ec8f804030e7fc69622a6dbde24563726ceb43f675d08f01b8b5fd3545a567205ac479c +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/fd229efea4dca38d3fb6cf3f098b431b388b88133062c75a83d52a79fcaaae9a9b90af2b1a97cd3a108e72897b23657efbf7159e7bc3368574d1f1278221fe53 +0 -0
- logic_asts-0.2.0/.jj/repo/store/extra/heads/3ea4513109dce8411ac4110f483b93976a7cc1864abb17bd10ad26e111a14abce634add7aca17015b9a6250b32c488dc7a1af739e1ce8bd07b195c808813db9a +0 -0
- logic_asts-0.2.0/.jj/repo/store/git_target +0 -1
- logic_asts-0.2.0/.jj/repo/store/type +0 -1
- logic_asts-0.2.0/.jj/repo/submodule_store/type +0 -1
- logic_asts-0.2.0/.jj/working_copy/checkout +0 -1
- logic_asts-0.2.0/.jj/working_copy/tree_state +0 -0
- logic_asts-0.2.0/.jj/working_copy/type +0 -1
- logic_asts-0.2.0/src/logic_asts/base.py +0 -246
- logic_asts-0.2.0/tests/test_ltl.py +0 -30
- {logic_asts-0.2.0 → logic_asts-0.3.2}/.envrc.recommended +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/.gitignore +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/.python-version +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/README.md +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/base.lark +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/ltl.lark +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/grammars/strel.lark +0 -0
- {logic_asts-0.2.0 → logic_asts-0.3.2}/src/logic_asts/py.typed +0 -0
- {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
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
47
|
+
pythonVersion = "3.11"
|
|
48
48
|
pythonPlatform = "All"
|
|
49
49
|
reportUnknownMemberType = false
|
|
50
50
|
reportUnknownParameterType = false
|
|
@@ -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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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",
|