diff --git a/.gitignore b/.gitignore index 93bd5279a..8325eb900 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ flycheck_*.el # ide settings /.vscode + +# MacOS specific .DS_Store +.DS_Store diff --git a/Cargo.lock b/Cargo.lock index d27e2db51..33016c3db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -70,22 +70,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -128,13 +128,12 @@ checksum = "ca6c635b3aa665c649ad1415f1573c85957dfa47690ec27aebe7ec17efe3c643" [[package]] name = "assert_cmd" -version = "2.0.17" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd389a4b2970a01282ee455294913c0a43724daedcd1a24c3eb0ec1c1320b66" +checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" dependencies = [ "anstyle", "bstr", - "doc-comment", "libc", "predicates", "predicates-core", @@ -159,9 +158,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +checksum = "0e86f6d3dc9dc4352edeea6b8e499e13e3f5dc3b964d7ca5fd411415a3498473" dependencies = [ "compression-codecs", "compression-core", @@ -178,7 +177,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -195,7 +194,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -266,9 +265,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "regex-automata", @@ -289,9 +288,9 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "camino" @@ -313,9 +312,9 @@ dependencies = [ [[package]] name = "cargo-util-schemas" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45c9672203db3caf908423f25bc31f3b6a814a9d22f2380048236498a312e75" +checksum = "549c00f5bb23fdaf26135d747d7530563402a101f1887a5a1916afe2c09cf229" dependencies = [ "semver", "serde", @@ -329,9 +328,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "981a6f317983eec002839b90fae7411a85621410ae591a9cab2ecf5cb5744873" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" dependencies = [ "camino", "cargo-platform", @@ -343,9 +342,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a" dependencies = [ "find-msvc-tools", "jobserver", @@ -361,9 +360,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.5.50" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -371,9 +370,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.50" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -383,9 +382,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.59" +version = "4.5.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c" +checksum = "39615915e2ece2550c0149addac32fb5bd312c657f43845bb9088cb9c8a7c992" dependencies = [ "clap", ] @@ -399,7 +398,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -435,9 +434,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +checksum = "302266479cb963552d11bd042013a58ef1adc56768016c8b82b4199488f2d4ad" dependencies = [ "brotli", "compression-core", @@ -449,9 +448,9 @@ dependencies = [ [[package]] name = "compression-core" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" [[package]] name = "concolor" @@ -579,13 +578,13 @@ dependencies = [ [[package]] name = "delegate" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6178a82cf56c836a3ba61a7935cdb1c49bfaa6fa4327cd5bf554a503087de26b" +checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -596,7 +595,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -605,13 +604,34 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +[[package]] +name = "dir-test" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fc943f4c1320fad6dbfe6a00070d88480c4f343e917cd7d5c5e04856ee7026c" +dependencies = [ + "dir-test-macros 0.2.1", +] + [[package]] name = "dir-test" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62c013fe825864f3e4593f36426c1fa7a74f5603f13ca8d1af7a990c1cd94a79" dependencies = [ - "dir-test-macros", + "dir-test-macros 0.4.1", +] + +[[package]] +name = "dir-test-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cce5926e6ae92adcff7412e08ad0268d7eab7d15c1be1da34b7e9469a2dacb9" +dependencies = [ + "glob", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -623,7 +643,7 @@ dependencies = [ "glob", "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -634,14 +654,14 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] name = "doc-comment" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "780955b8b195a21ab8e4ac6b60dd1dbdcec1dc6c51c0617964b08c81785e12c9" [[package]] name = "dyn-clone" @@ -672,7 +692,7 @@ checksum = "4f4b100e337b021ae69f3e7dd82e230452c54ff833958446c4a3854c66dc9326" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -684,7 +704,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -728,9 +748,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" dependencies = [ "serde", "serde_core", @@ -755,9 +775,15 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "fixedbitset" @@ -767,9 +793,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -888,7 +914,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -1025,9 +1051,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", @@ -1048,12 +1074,11 @@ checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1088,9 +1113,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", @@ -1142,9 +1167,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -1168,9 +1193,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1181,9 +1206,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1194,11 +1219,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1209,42 +1233,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1275,9 +1295,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.24" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81776e6f9464432afcc28d03e52eb101c93b6f0566f52aef2427663e700f0403" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", @@ -1297,21 +1317,12 @@ checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", -] - -[[package]] -name = "indoc" -version = "2.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" -dependencies = [ - "rustversion", + "hashbrown 0.16.1", ] [[package]] @@ -1322,9 +1333,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" dependencies = [ "memchr", "serde", @@ -1332,13 +1343,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1364,26 +1375,26 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", - "serde", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -1432,9 +1443,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "line-index" @@ -1460,9 +1471,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" @@ -1475,9 +1486,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" @@ -1485,7 +1496,7 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" dependencies = [ - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -1538,15 +1549,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -1613,12 +1615,14 @@ version = "0.9.2-dev" dependencies = [ "ariadne", "ascii_tree", + "assert_cmd", "assert_fs", "async-trait", "bytecount", "colored", "csv", "delegate", + "dir-test 0.2.1", "dyn-clone", "enum-assoc", "env_logger 0.11.8", @@ -1636,7 +1640,7 @@ dependencies = [ "oxiri", "oxrdf", "oxrdfio", - "petgraph", + "petgraph 0.8.3", "petgraph-graphml", "quickcheck", "quickcheck_macros", @@ -1666,7 +1670,7 @@ dependencies = [ "assert_fs", "clap", "colored", - "dir-test", + "dir-test 0.4.1", "env_logger 0.11.8", "log", "nemo", @@ -1707,7 +1711,7 @@ dependencies = [ "enum_dispatch", "env_logger 0.11.8", "flate2", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "itertools", "levenshtein", "linked-hash-map", @@ -1735,11 +1739,19 @@ dependencies = [ ] [[package]] -name = "nemo-python" +name = "nemo-static-checks" version = "0.9.2-dev" dependencies = [ + "assert_cmd", + "clap", + "colored", + "dir-test 0.2.1", + "env_logger 0.11.8", + "log", "nemo", - "pyo3", + "nemo-cli", + "petgraph 0.6.5", + "predicates", "tokio", ] @@ -1916,9 +1928,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.74" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ "bitflags 2.10.0", "cfg-if", @@ -1937,7 +1949,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -1948,9 +1960,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.110" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -2144,7 +2156,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -2186,13 +2198,23 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap", +] + [[package]] name = "petgraph" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ - "fixedbitset", + "fixedbitset 0.5.7", "hashbrown 0.15.5", "indexmap", "serde", @@ -2204,7 +2226,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18e8697802703811a7d421bf4da49b69ae6b4ce18e52236c98d2175d71d4538e" dependencies = [ - "petgraph", + "petgraph 0.8.3", "xml-rs", ] @@ -2225,7 +2247,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -2263,9 +2285,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -2311,74 +2333,13 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e0f6df8eaa422d97d72edcd152e1451618fed47fabbdbd5a8864167b1d4aff7" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] -[[package]] -name = "pyo3" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf" -dependencies = [ - "indoc", - "libc", - "memoffset", - "once_cell", - "portable-atomic", - "pyo3-build-config", - "pyo3-ffi", - "pyo3-macros", - "unindent", -] - -[[package]] -name = "pyo3-build-config" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb" -dependencies = [ - "target-lexicon", -] - -[[package]] -name = "pyo3-ffi" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be" -dependencies = [ - "libc", - "pyo3-build-config", -] - -[[package]] -name = "pyo3-macros" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71" -dependencies = [ - "proc-macro2", - "pyo3-macros-backend", - "quote", - "syn", -] - -[[package]] -name = "pyo3-macros-backend" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b" -dependencies = [ - "heck", - "proc-macro2", - "pyo3-build-config", - "quote", - "syn", -] - [[package]] name = "quick-xml" version = "0.37.5" @@ -2407,14 +2368,14 @@ checksum = "f71ee38b42f8459a88d3362be6f9b841ad2d5421844f61eb1c59c11bff3ac14a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -2586,9 +2547,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.34" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "once_cell", "rustls-pki-types", @@ -2599,18 +2560,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring", "rustls-pki-types", @@ -2741,7 +2702,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -2765,7 +2726,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -2885,7 +2846,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -2896,9 +2857,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.107" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -2922,7 +2894,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -2952,12 +2924,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "target-lexicon" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" - [[package]] name = "tempfile" version = "3.23.0" @@ -2979,9 +2945,9 @@ checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "test-log" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b" +checksum = "37d53ac171c92a39e4769491c4b4dde7022c60042254b5fc044ae409d34a24d4" dependencies = [ "env_logger 0.11.8", "test-log-macros", @@ -2990,13 +2956,13 @@ dependencies = [ [[package]] name = "test-log-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" +checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3022,7 +2988,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3036,9 +3002,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -3067,7 +3033,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3092,9 +3058,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -3154,9 +3120,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" dependencies = [ "bitflags 2.10.0", "bytes", @@ -3207,7 +3173,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3218,9 +3184,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -3229,20 +3195,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", "valuable", @@ -3261,9 +3227,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -3290,9 +3256,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "unicode-ident" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" @@ -3312,12 +3278,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unindent" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" - [[package]] name = "untrusted" version = "0.9.0" @@ -3431,7 +3391,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.111", "wasm-bindgen-shared", ] @@ -3466,7 +3426,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3501,7 +3461,7 @@ checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3559,12 +3519,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" @@ -3573,31 +3527,31 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.1.3", + "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -3642,7 +3596,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -3682,7 +3636,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.1", + "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -3839,9 +3793,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wyz" @@ -3854,9 +3808,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xtask" @@ -3878,11 +3832,10 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -3890,34 +3843,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] @@ -3937,7 +3890,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", "synstructure", ] @@ -3949,9 +3902,9 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -3960,9 +3913,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -3971,13 +3924,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.111", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 6a2115ba3..ed532f105 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,16 +4,18 @@ default-members = [ "nemo", "nemo-cli", "nemo-physical", - "nemo-python", + #"nemo-python", + "nemo-static-checks", "nemo-language-server", ] members = [ "nemo", "nemo-cli", "nemo-physical", - "nemo-python", + #"nemo-python", "nemo-language-server", "nemo-wasm", + "nemo-static-checks", "xtask", ] @@ -21,16 +23,16 @@ members = [ description = "Nemo, a datalog-based rule engine for fast and scalable analytic data processing in memory" version = "0.9.2-dev" authors = [ -"Alex Ivliev ", -"Aidan Bailey ", -"Jakob Steinberg ", -"Lukas Gerlach ", -"Larry González ", -"Markus Krötzsch ", -"Matthias Meissner ", -"Maximilian Marx ", -"Simon Meusel ", -"Stefan Ellmauthaler ", + "Alex Ivliev ", + "Aidan Bailey ", + "Jakob Steinberg ", + "Lukas Gerlach ", + "Larry González ", + "Markus Krötzsch ", + "Matthias Meissner ", + "Maximilian Marx ", + "Simon Meusel ", + "Stefan Ellmauthaler ", ] edition = "2024" homepage = "https://github.com/knowsys/nemo" diff --git a/nemo-static-checks/Cargo.toml b/nemo-static-checks/Cargo.toml new file mode 100644 index 000000000..061259080 --- /dev/null +++ b/nemo-static-checks/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "nemo-static-checks" +description.workspace = true +version.workspace = true +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license.workspace = true +readme.workspace = true +repository.workspace = true + +[[bin]] +name = "nemo-static-checks" +path = "src/main.rs" +# required-features = ["tokio"] + +[lib] +path = "src/lib.rs" + +[dependencies] +colored = "3" +log = "0.4" +nemo = { path = "../nemo", default-features = false } +nemo-cli = { path = "../nemo-cli", default-features = false } +petgraph = "0.6.3" +tokio = { version = "1.47.1", features = ["rt", "macros"] } +clap = { version = "4.0.32", features = ["derive", "cargo", "env"] } +# tokio = { version = "1.45.1", features = [ +# "macros", +# "io-util", +# "rt-multi-thread", +# "io-std", +# ], optional = true } + +[dev-dependencies] +dir-test = "0.2.1" +env_logger = "*" +assert_cmd = "2.0" +predicates = "3.0.3" diff --git a/nemo-static-checks/src/cli.rs b/nemo-static-checks/src/cli.rs new file mode 100644 index 000000000..038e50ff0 --- /dev/null +++ b/nemo-static-checks/src/cli.rs @@ -0,0 +1,46 @@ +use clap::ArgAction; + +use std::path::PathBuf; + +/// Nemo CLI +#[derive(clap::Parser, Debug)] +#[command(author, version, about)] +pub struct CliApp { + /// One or more rule program files + #[arg(value_parser, required = true)] + pub(crate) rules: Vec, + + /// One or more static checks + #[arg(short = 'c', long = "checks", value_parser = CHECK_NAMES, action = ArgAction::Append, default_values = CHECK_NAMES)] + pub(crate) checks: Vec, +} + +const CHECK_NAMES: [&str; 27] = [ + "joinless", + "linear", + "guarded", + "sticky", + "domain-restricted", + "frontier-one", + "datalog", + "monadic", + "frontier-guarded", + "weakly-guarded", + "weakly-frontier-guarded", + "jointly-guarded", + "jointly-frontier-guarded", + "weakly-acyclic", + "jointly-acyclic", + "weakly-sticky", + "glut-guarded", + "glut-frontier-guarded", + "shy", + "mfa", + "msa", + "dmfa", + "rmfa", + "mfc", + "dmfc", + "drpc", + "rpc", +]; diff --git a/nemo-static-checks/src/lib.rs b/nemo-static-checks/src/lib.rs new file mode 100644 index 000000000..937f7e46d --- /dev/null +++ b/nemo-static-checks/src/lib.rs @@ -0,0 +1,2 @@ +pub mod cli; +pub mod static_checks; diff --git a/nemo-static-checks/src/main.rs b/nemo-static-checks/src/main.rs new file mode 100644 index 000000000..138742bc4 --- /dev/null +++ b/nemo-static-checks/src/main.rs @@ -0,0 +1,153 @@ +pub mod cli; +pub mod static_checks; + +use nemo::{ + error::{Error, report::ProgramReport}, + execution::execution_parameters::ExecutionParameters, + rule_file::RuleFile, + rule_model::{ + pipeline::transformations::default::TransformationDefault, programs::handle::ProgramHandle, + }, +}; + +use crate::static_checks::{rule_set::RuleSet, rules_properties::RulesProperties}; + +use colored::Colorize; + +use nemo_cli::error::CliError; + +use clap::Parser; +use cli::CliApp; + +fn get_handle_from_rule_file(program_file: RuleFile) -> Result { + let parameters: ExecutionParameters = ExecutionParameters::default(); + let handle = ProgramHandle::from_file(&program_file); + let report = ProgramReport::new(program_file); + + let (handle, report) = report.merge_program_parser_report(handle)?; + let (handle, _) = report.merge_validation_report( + &handle, + handle.transform(TransformationDefault::new(¶meters)), + )?; + + Ok(handle) +} + +async fn run(mut cli: CliApp) -> Result<(), CliError> { + if cli.rules.len() > 1 { + return Err(CliError::MultipleFilesNotImplemented); + } + + let program_path = cli.rules.pop().ok_or(CliError::NoInput)?; + let program_file = RuleFile::load(program_path)?; + let handle: ProgramHandle = get_handle_from_rule_file(program_file)?; + let rule_set: RuleSet = RuleSet(handle.materialize().all_rules()); + for check in cli.checks.into_iter() { + let check_str: &str = ✓ + match check_str { + "joinless" => println!("{check_str}: {}", RulesProperties::is_joinless(&rule_set)), + "linear" => println!("{check_str}: {}", RulesProperties::is_linear(&rule_set)), + "guarded" => println!("{check_str}: {}", RulesProperties::is_guarded(&rule_set)), + "sticky" => println!("{check_str}: {}", RulesProperties::is_sticky(&rule_set)), + "domain-restricted" => println!( + "{check_str}: {}", + RulesProperties::is_domain_restricted(&rule_set) + ), + "frontier-one" => println!( + "{check_str}: {}", + RulesProperties::is_frontier_one(&rule_set) + ), + "datalog" => println!("{check_str}: {}", RulesProperties::is_datalog(&rule_set)), + "monadic" => println!("{check_str}: {}", RulesProperties::is_monadic(&rule_set)), + "frontier-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_frontier_guarded(&rule_set) + ), + "weakly-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_weakly_guarded(&rule_set) + ), + "weakly-frontier-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_weakly_frontier_guarded(&rule_set) + ), + "jointly-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_jointly_guarded(&rule_set) + ), + "jointly-frontier-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_jointly_frontier_guarded(&rule_set) + ), + "weakly-acyclic" => println!( + "{check_str}: {}", + RulesProperties::is_weakly_acyclic(&rule_set) + ), + "jointly-acyclic" => println!( + "{check_str}: {}", + RulesProperties::is_jointly_acyclic(&rule_set) + ), + "weakly-sticky" => println!( + "{check_str}: {}", + RulesProperties::is_weakly_sticky(&rule_set) + ), + "glut-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_glut_guarded(&rule_set) + ), + "glut-frontier-guarded" => println!( + "{check_str}: {}", + RulesProperties::is_glut_frontier_guarded(&rule_set) + ), + "shy" => println!("{check_str}: {}", RulesProperties::is_shy(&rule_set)), + "mfa" => println!( + "{check_str}: not yet implemented", /*RulesProperties::is_mfa(&rule_set)*/ + ), + "msa" => println!("{check_str}: {}", RulesProperties::is_msa(&handle).await), + "dmfa" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_dmfa(&rule_set) + ), + "rmfa" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_rmfa(&rule_set) + ), + "mfc" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_mfc(&rule_set) + ), + "dmfc" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_dmfc(&rule_set) + ), + "drpc" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_drpc(&rule_set) + ), + "rpc" => println!( + "{check_str}: not yet implemented", + // RulesProperties::is_rpc(&rule_set) + ), + _ => unreachable!(), + } + } + Ok(()) +} + +#[tokio::main(flavor = "current_thread")] +async fn main() { + let cli = CliApp::parse(); + + if let Err(error) = run(cli).await { + if let CliError::NemoError(Error::ProgramReport(report)) = error { + // let _ = report.eprint(disable_warnings); + + if report.contains_errors() { + std::process::exit(1); + } + } else { + log::error!("{} {error}", "error:".red().bold()); + std::process::exit(1); + } + } +} diff --git a/nemo-static-checks/src/static_checks.rs b/nemo-static-checks/src/static_checks.rs new file mode 100644 index 000000000..2fed62294 --- /dev/null +++ b/nemo-static-checks/src/static_checks.rs @@ -0,0 +1,8 @@ +//! Functionality to give static checks for a RuleSet. +pub mod acyclicity_graphs; +pub mod collection_traits; +pub mod msa; +pub mod positions; +pub mod rule_properties; +pub mod rule_set; +pub mod rules_properties; diff --git a/nemo-static-checks/src/static_checks/acyclicity_graphs.rs b/nemo-static-checks/src/static_checks/acyclicity_graphs.rs new file mode 100644 index 000000000..5a1984ad9 --- /dev/null +++ b/nemo-static-checks/src/static_checks/acyclicity_graphs.rs @@ -0,0 +1,430 @@ +//! Functionality that provides methods to build the (JointAcyclicityGraph / WeakAcyclicityGraph) based on +/// a RuleSet. +use crate::static_checks::collection_traits::{InsertAll, RemoveAll}; +use crate::static_checks::positions::{Position, Positions, PositionsByRuleAndVariables}; +// use crate::static_checks::rule_set::*; +use crate::static_checks::rule_set::{RuleAndVariable, RuleSet}; +use nemo::rule_model::components::{rule::Rule, term::primitive::variable::Variable}; +use petgraph::algo::is_cyclic_directed; +use petgraph::graphmap::{DiGraphMap, NodeTrait}; +use std::collections::HashSet; + +use crate::static_checks::rule_set::*; + +type Cycle = Vec; + +/// Enum to distinguish between (Common / Special) edge between two Position(s) of the +/// WeakAcyclicityGraph. +#[derive(Clone, Copy, Debug)] +pub enum WeakAcyclicityGraphEdgeType { + /// There is a common edge between two Position(s) of the WeakAcyclicityGraph. + Common, + /// There is a special edge between two Position(s) of the WeakAcyclicityGraph. + Special, +} + +/// Type to declare a JointAcyclicityGraph of some RuleSet. +#[derive(Debug)] +pub struct JointAcyclicityGraph<'a>(DiGraphMap, ()>); + +/// This Impl-Block contains the function for creating the JointAcyclicityGraph. +impl<'a> JointAcyclicityGraph<'a> { + /// Builds the JointAcyclicityGraph of a RuleSet. + pub fn new(rule_set: &'a RuleSet) -> Self { + let mut jo_ac_graph_builder: JointAcyclicityGraphBuilder = + JointAcyclicityGraphBuilder::new(); + jo_ac_graph_builder.add_nodes(rule_set); + jo_ac_graph_builder.add_edges(rule_set); + jo_ac_graph_builder.finalize() + } +} + +impl<'a> JointAcyclicityGraph<'a> { + /// Returns all nodes of a Graph that appear in a Cycle. + pub fn all_nodes_of_cycles(&self) -> HashSet> { + let cycles: HashSet> = self.cycles(); + self.cycles_into_nodes(cycles) + } + + /// Checks if a Graph is cyclic. + pub fn is_cyclic(&self) -> bool { + is_cyclic_directed(&self.0) + } +} + +/// This struct declares a JointAcyclicityGraph of a RuleSet. +#[derive(Debug)] +struct JointAcyclicityGraphBuilder<'a>(DiGraphMap, ()>); + +/// This Impl-Block contains the main methods to Build the JointAcyclicityGraph. +impl<'a> JointAcyclicityGraphBuilder<'a> { + fn add_edges(&mut self, rule_set: &'a RuleSet) { + let attacked_pos_by_ex_rule_and_vars: PositionsByRuleAndVariables = + rule_set.attacked_positions_by_existential_rule_and_variables(); + rule_set.0.iter().for_each(|rule| { + self.add_edges_for_rule(rule, &attacked_pos_by_ex_rule_and_vars); + }) + } + + fn add_nodes(&mut self, rule_set: &'a RuleSet) { + let ex_rule_and_vars: HashSet = rule_set.existential_rule_and_variables(); + ex_rule_and_vars.into_iter().for_each(|ex_rule_and_var| { + self.0.add_node(ex_rule_and_var); + }); + } + + fn finalize(self) -> JointAcyclicityGraph<'a> { + JointAcyclicityGraph(self.0) + } + + fn new() -> Self { + Self(DiGraphMap::new()) + } +} + +/// This Impl-Block contains help methods to Build the JointAcyclicityGraph. +impl<'a> JointAcyclicityGraphBuilder<'a> { + fn add_edges_for_rule( + &mut self, + rule: &'a Rule, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables<'a>, + ) { + let ex_rule_and_vars: HashSet = rule.existential_rule_and_variables(); + let positive_variables: HashSet<&Variable> = rule.positive_variables(); + positive_variables.iter().for_each(|var| { + let rule_and_body_var: RuleAndVariable = RuleAndVariable(rule, var); + attacked_pos_by_rule_and_vars + .0 + .keys() + .for_each(|attacking_rule_and_var| { + if rule_and_body_var.is_attacked_by_rule_and_variable( + attacking_rule_and_var, + attacked_pos_by_rule_and_vars, + ) { + ex_rule_and_vars.iter().for_each(|ex_rule_and_var| { + self.0 + .add_edge(*attacking_rule_and_var, *ex_rule_and_var, ()); + }) + } + }) + }) + } +} + +#[derive(Debug)] +/// This struct declares a WeakAcyclicityGraph of a RuleSet. +pub struct WeakAcyclicityGraph<'a>(DiGraphMap, WeakAcyclicityGraphEdgeType>); + +/// This Impl-Block contains the function for creating the WeakAcyclicityGraph. +impl<'a> WeakAcyclicityGraph<'a> { + /// Builds the WeakAcyclicityGraph of a RuleSet. + pub fn new(rule_set: &'a RuleSet) -> WeakAcyclicityGraph<'a> { + let mut we_ac_graph_builder: WeakAcyclicityGraphBuilder = WeakAcyclicityGraphBuilder::new(); + we_ac_graph_builder.add_nodes(rule_set); + we_ac_graph_builder.add_edges(rule_set); + we_ac_graph_builder.finalize() + } +} + +/// This Impl-Block contains the main cycle methods that are exclusive for the WeakAcyclicityGraph. +impl<'a> WeakAcyclicityGraph<'a> { + /// Checks if there exists a Cycle in the WeakAcyclicityGraph that contains a special edge. + pub fn contains_cycle_with_special_edge(&self) -> bool { + let cycles: HashSet>> = self.cycles(); + cycles + .iter() + .any(|cycle| self.contains_special_edge_in_cycle(cycle)) + } + + fn contains_special_edge_in_cycle(&self, cycle: &Cycle>) -> bool { + let cycle_size: usize = cycle.len(); + cycle.iter().enumerate().any(|(i, pos)| { + let j: usize = (i + 1) % cycle_size; + let next_pos: &Position<'a> = cycle.get(j).unwrap(); + self.is_edge_special(pos, next_pos) + }) + } + + /// Returns all Cycles in the WeakAcyclicityGraph that contain a special edge. + fn cycles_containing_special_edges(&self) -> HashSet>> { + let cycles: HashSet>> = self.cycles(); + let special_edge_cycles: HashSet>> = cycles + .iter() + .filter(|cycle| self.contains_special_edge_in_cycle(cycle)) + .cloned() + .collect(); + special_edge_cycles + } + + fn is_edge_special(&self, node: &Position<'a>, next_node: &Position<'a>) -> bool { + matches!( + self.0.edge_weight(*node, *next_node).unwrap(), + WeakAcyclicityGraphEdgeType::Special + ) + } +} + +/// This Impl-Block provides a method to get the inifinite rank Positions of some WeakAcyclicityGraph. +impl<'a> WeakAcyclicityGraph<'a> { + /// Returns all nodes of a Graph. + fn all_nodes(&self) -> HashSet { + self.0.nodes().collect() + } + + fn conclude_reachable_nodes(&self, nodes: HashSet>) -> HashSet> { + nodes + .into_iter() + .fold(HashSet::::new(), |neighbors, node| { + let neighbors_of_node: HashSet = self.0.neighbors(node).collect(); + neighbors.insert_all_take_ret(neighbors_of_node) + }) + } + + /// Builds the infinite rank Positions for some WeakAcyclicityGraph. + pub fn infinite_rank_positions(&self) -> Positions { + let cycs_con_spe_edge: HashSet> = self.cycles_containing_special_edges(); + let repr_of_cycles: HashSet = self.represantatives_of_cycles(&cycs_con_spe_edge); + let mut inf_rank_pos_set: HashSet = self.cycles_into_nodes(cycs_con_spe_edge); + let all_nodes: HashSet = self.all_nodes(); + let mut unreachable_nodes: HashSet = all_nodes.remove_all_ret(&inf_rank_pos_set); + for pos in repr_of_cycles.iter() { + if unreachable_nodes.is_empty() { + break; + } + let rea_nodes_of_node: HashSet = self.reachable_nodes_of_node(pos); + unreachable_nodes.remove_all(&rea_nodes_of_node); + inf_rank_pos_set.insert_all_take(rea_nodes_of_node); + } + Positions::from(inf_rank_pos_set) + } + + /// Returns all reachable nodes of some node in the Graph. + fn reachable_nodes_of_node(&self, node: &Position<'a>) -> HashSet> { + let mut rea_nodes: HashSet = HashSet::from([*node]); + let mut new_found_rea_nodes: HashSet = rea_nodes.clone(); + while !new_found_rea_nodes.is_empty() { + let new_con_rea_nodes: HashSet = + self.conclude_reachable_nodes(new_found_rea_nodes); + new_found_rea_nodes = new_con_rea_nodes.remove_all_ret(&rea_nodes); + rea_nodes.insert_all(&new_found_rea_nodes); + } + rea_nodes + } + + /// Returns a represantative node of every Cycle in some Cycles. + fn represantatives_of_cycles( + &self, + cycles: &HashSet>>, + ) -> HashSet> { + cycles + .iter() + .fold(HashSet::::new(), |mut reprs, cycle| { + let repr_of_cycle: Position = *cycle.first().unwrap(); + reprs.insert(repr_of_cycle); + reprs + }) + } +} + +#[derive(Debug)] +struct WeakAcyclicityGraphBuilder<'a>(DiGraphMap, WeakAcyclicityGraphEdgeType>); + +/// This Impl-Block contains the main methods to Build the WeakAcyclicityGraph. +impl<'a> WeakAcyclicityGraphBuilder<'a> { + fn add_edges(&mut self, rule_set: &'a RuleSet) { + rule_set.0.iter().for_each(|rule| { + self.add_edges_for_rule(rule); + }); + } + + fn add_nodes(&mut self, rule_set: &'a RuleSet) { + let all_positive_ex_pos: HashSet = rule_set.all_positive_positions_as_set(); + all_positive_ex_pos.into_iter().for_each(|pos| { + self.0.add_node(pos); + }); + } + + fn finalize(self) -> WeakAcyclicityGraph<'a> { + WeakAcyclicityGraph(self.0) + } + + fn new() -> Self { + Self(DiGraphMap::new()) + } +} + +/// This Impl-Block contains help methods to Build the WeakAcyclicityGraph. +impl<'a> WeakAcyclicityGraphBuilder<'a> { + fn add_common_edges_for_rule_and_body_positions( + &mut self, + rule: &'a Rule, + all_pos_of_positive_body_set: &HashSet>, + ) { + let all_pos_of_head_set: HashSet = rule.all_positions_of_head_as_set(); + all_pos_of_positive_body_set.iter().for_each(|body_pos| { + all_pos_of_head_set.iter().for_each(|head_pos| { + self.0 + .add_edge(*body_pos, *head_pos, WeakAcyclicityGraphEdgeType::Common); + }) + }); + } + + fn add_edges_for_rule(&mut self, rule: &'a Rule) { + let all_pos_of_positive_body_set: HashSet = + rule.all_positions_of_positive_body_as_set(); + self.add_common_edges_for_rule_and_body_positions(rule, &all_pos_of_positive_body_set); + self.add_special_edges_for_rule_and_body_positions(rule, &all_pos_of_positive_body_set); + } + + fn add_special_edges_for_rule_and_body_positions( + &mut self, + rule: &'a Rule, + all_pos_of_positive_body_set: &HashSet>, + ) { + let pos_of_ex_vars_set: HashSet = + rule.positions_of_existential_variables_as_set(); + all_pos_of_positive_body_set.iter().for_each(|body_pos| { + pos_of_ex_vars_set.iter().for_each(|ex_pos| { + self.0 + .add_edge(*body_pos, *ex_pos, WeakAcyclicityGraphEdgeType::Special); + }) + }); + } +} + +/// This Trait provides methods that are used for both Graph(s) in relation with Cycle(s). +trait AcyclicityGraphMethods +where + N: NodeTrait, +{ + /// Returns all Cycles of a Graph. + fn cycles(&self) -> HashSet>; + /// Returns all nodes of all Cycles in a Graph. + fn cycles_into_nodes(&self, cycles: HashSet>) -> HashSet; +} + +impl AcyclicityGraphMethods for DiGraphMap +where + N: NodeTrait, +{ + fn cycles(&self) -> HashSet> { + let mut cycles: HashSet> = HashSet::>::new(); + let mut sorted_cycles: HashSet> = HashSet::>::new(); + let mut used_nodes: HashSet = HashSet::::new(); + let mut reused_cycle: Cycle = Cycle::::new(); + for node in self.nodes() { + if used_nodes.contains(&node) { + continue; + } + self.cycles_rec( + &node, + &mut reused_cycle, + &mut used_nodes, + &mut cycles, + &mut sorted_cycles, + ); + } + cycles + } + + fn cycles_into_nodes(&self, cycles: HashSet>) -> HashSet { + cycles + .into_iter() + .fold(HashSet::::new(), |nodes, cycle| { + nodes.insert_all_take_ret(cycle) + }) + } +} + +impl<'a> AcyclicityGraphMethods> for JointAcyclicityGraph<'a> { + fn cycles(&self) -> HashSet>> { + self.0.cycles() + } + + fn cycles_into_nodes( + &self, + cycles: HashSet>>, + ) -> HashSet> { + self.0.cycles_into_nodes(cycles) + } +} + +impl<'a> AcyclicityGraphMethods> for WeakAcyclicityGraph<'a> { + fn cycles(&self) -> HashSet>> { + self.0.cycles() + } + + fn cycles_into_nodes(&self, cycles: HashSet>>) -> HashSet> { + self.0.cycles_into_nodes(cycles) + } +} + +trait AcyclicityGraphMethodsPrivate +where + N: NodeTrait, +{ + fn cycles_rec( + &self, + node: &N, + reused_cycle: &mut Cycle, + used_nodes: &mut HashSet, + cycles: &mut HashSet>, + sorted_cycles: &mut HashSet>, + ); + fn recursion_stops( + &self, + node: &N, + reused_cycle: &mut Cycle, + cycles: &mut HashSet>, + sorted_cycles: &mut HashSet>, + ) -> bool; +} + +impl AcyclicityGraphMethodsPrivate for DiGraphMap +where + N: NodeTrait, +{ + fn cycles_rec( + &self, + node: &N, + reused_cycle: &mut Cycle, + used_nodes: &mut HashSet, + cycles: &mut HashSet>, + sorted_cycles: &mut HashSet>, + ) { + if self.recursion_stops(node, reused_cycle, cycles, sorted_cycles) { + return; + } + used_nodes.insert(*node); + reused_cycle.push(*node); + self.neighbors(*node).for_each(|neighbor| { + self.cycles_rec(&neighbor, reused_cycle, used_nodes, cycles, sorted_cycles); + }); + reused_cycle.pop(); + } + + fn recursion_stops( + &self, + node: &N, + reused_cycle: &mut Cycle, + cycles: &mut HashSet>, + sorted_cycles: &mut HashSet>, + ) -> bool { + if !reused_cycle.contains(node) { + return false; + } + let n: usize = reused_cycle + .iter() + .position(|cycle_node| cycle_node == node) + .unwrap(); + let mut cycle: Cycle = reused_cycle.split_off(n); + let mut sorted_cycle: Cycle = cycle.clone(); + sorted_cycle.sort(); + if !sorted_cycles.contains(&sorted_cycle) { + cycles.insert(cycle.clone()); + sorted_cycles.insert(sorted_cycle); + } + reused_cycle.append(&mut cycle); + true + } +} diff --git a/nemo-static-checks/src/static_checks/collection_traits.rs b/nemo-static-checks/src/static_checks/collection_traits.rs new file mode 100644 index 000000000..e2aec2d9f --- /dev/null +++ b/nemo-static-checks/src/static_checks/collection_traits.rs @@ -0,0 +1,122 @@ +//! Functionality that provides generalised methods for collections. +use std::collections::HashSet; +use std::hash::Hash; +use std::iter::IntoIterator; + +/// This Trait provides methods for collections to insert every element of another collection. +pub trait InsertAll { + /// Inserts all elements of another collection into the current collection. + fn insert_all(&mut self, other: &C); + /// Inserts all elements of another collection into the current collection and returns it. + fn insert_all_ret(self, other: &C) -> Self; + /// Inserts all elements of a consumed collection into the current collection. + fn insert_all_take(&mut self, other: C); + /// Inserts all elements of a consumed collection into the current collection and returns it. + fn insert_all_take_ret(self, other: C) -> Self; +} + +impl InsertAll, T> for HashSet +where + T: Clone + Eq + Hash + PartialEq, +{ + fn insert_all(&mut self, other: &HashSet) { + other.iter().for_each(|item| { + self.insert(item.clone()); + }) + } + + fn insert_all_ret(mut self, other: &HashSet) -> HashSet { + self.insert_all(other); + self + } + + fn insert_all_take(&mut self, other: HashSet) { + other.into_iter().for_each(|item| { + self.insert(item); + }) + } + + fn insert_all_take_ret(mut self, other: HashSet) -> HashSet { + self.insert_all_take(other); + self + } +} + +impl InsertAll, T> for HashSet +where + T: Clone + Eq + Hash + PartialEq, +{ + fn insert_all(&mut self, other: &Vec) { + other.iter().for_each(|item| { + self.insert(item.clone()); + }) + } + + fn insert_all_ret(mut self, other: &Vec) -> HashSet { + self.insert_all(other); + self + } + + fn insert_all_take(&mut self, other: Vec) { + other.into_iter().for_each(|item| { + self.insert(item); + }) + } + + fn insert_all_take_ret(mut self, other: Vec) -> HashSet { + self.insert_all_take(other); + self + } +} + +/// This Trait provides methods for collections to remove every element of another collection. +#[allow(dead_code)] +pub trait RemoveAll { + /// Removes all elements of another collection from the current collection. + fn remove_all(&mut self, other: &C); + /// Removes all elements of another collection from the current collection and returns it. + fn remove_all_ret(self, other: &C) -> Self; + /// Removes all elements of a consumed collection from the current collection. + fn remove_all_take(&mut self, other: C); + /// Removes all elements of a consumed collection from the current collection and returns it. + fn remove_all_take_ret(self, other: C) -> Self; +} + +impl RemoveAll, T> for HashSet +where + T: Clone + Eq + Hash + PartialEq, +{ + fn remove_all(&mut self, other: &HashSet) { + other.iter().for_each(|item| { + self.remove(item); + }) + } + + fn remove_all_ret(mut self, other: &HashSet) -> HashSet { + self.remove_all(other); + self + } + + fn remove_all_take(&mut self, other: HashSet) { + other.into_iter().for_each(|item| { + self.remove(&item); + }) + } + + fn remove_all_take_ret(mut self, other: HashSet) -> HashSet { + self.remove_all_take(other); + self + } +} + +/// This Trait provides a method to look for a superset relation between two instances for some type. +pub trait Superset { + /// Checks if there is a superset relation between two instances for some type. + fn is_superset(&self, other: &Self) -> bool; +} + +/// This Trait provides a method to look for a disjoint relation between two instances for some type. +pub trait Disjoint { + /// Checks if there is a disjoint relation between two instances for some type + fn is_disjoint(&self, other: &Self) -> bool; +} diff --git a/nemo-static-checks/src/static_checks/msa.rs b/nemo-static-checks/src/static_checks/msa.rs new file mode 100644 index 000000000..4a8afff04 --- /dev/null +++ b/nemo-static-checks/src/static_checks/msa.rs @@ -0,0 +1,22 @@ +//! Functionality for the msa check + +use nemo::execution::DefaultExecutionEngine; +use nemo::execution::ExecutionEngine; +use nemo::io::{import_manager::ImportManager, resource_providers::ResourceProviders}; +use nemo::rule_model::pipeline::transformations::{ + crit_instance::TransformationCriticalInstance, msa::TransformationMSA, +}; +use nemo::rule_model::programs::{handle::ProgramHandle, program::Program}; + +pub async fn msa_execution_engine_from_handle(mut handle: ProgramHandle) -> DefaultExecutionEngine { + handle = handle + .transform(TransformationCriticalInstance::default()) + .expect("TransformationCriticalInstance Error") + .transform(TransformationMSA::default()) + .expect("TransformationMSA Error"); + let prog: Program = handle.materialize(); + let import_manager: ImportManager = ImportManager::new(ResourceProviders::empty()); + ExecutionEngine::initialize(prog, import_manager) + .await + .expect("ExecutionEngine initialization failed") +} diff --git a/nemo-static-checks/src/static_checks/positions.rs b/nemo-static-checks/src/static_checks/positions.rs new file mode 100644 index 000000000..60d9948d4 --- /dev/null +++ b/nemo-static-checks/src/static_checks/positions.rs @@ -0,0 +1,482 @@ +//! Functionality that provides methods in relation with Position-Types. +use crate::static_checks::acyclicity_graphs::{JointAcyclicityGraph, WeakAcyclicityGraph}; +use crate::static_checks::collection_traits::{Disjoint, InsertAll, RemoveAll, Superset}; +use crate::static_checks::rule_set::{RuleAndVariable, RuleSet}; +use nemo::rule_model::components::{ + atom::Atom, rule::Rule, tag::Tag, term::primitive::variable::Variable, +}; + +use std::collections::{HashMap, HashSet}; + +use crate::static_checks::rule_set::*; + +/// Type to represent a position in an Atom. +pub type Index = usize; + +/// Type to map some Atom(s) to some positions in it. +#[derive(Clone, Debug, Default)] +pub struct Positions<'a>(pub HashMap<&'a Tag, HashSet>); + +/// Type to map some RuleIdxVariable(s) to some Positions. +#[derive(Debug)] +pub struct PositionsByRuleAndVariables<'a>(pub HashMap, Positions<'a>>); + +/// Type to map some Atom to some position in it. +pub type Position<'a> = (&'a Tag, Index); + +/// Enum to distinguish between (all existential variables / existential variables that appear in +/// cycles in the joint acyclicity graph) to be the attacking variables. +#[derive(Clone, Copy, Debug)] +pub enum AttackingType { + /// The attacking variables will be all existential variables. + Cycle, + /// The attacking variables will be the existential variables that appear in cycles in the + /// joint acyclicity graph. + Existential, +} + +/// Enum to distinguish between the (common / weakly) marking to be calculated. +#[derive(Clone, Copy, Debug)] +pub enum MarkingType { + /// The marking for the sticky-check will be calculated. + Sticky, + /// The marking for the weakly-sticky-check will be calculated. + WeaklySticky, +} + +impl<'a> From> for HashSet> { + /// Converts Positions to ExtendedPositions. + fn from(value: Positions<'a>) -> Self { + value + .0 + .into_iter() + .fold(HashSet::::new(), |ex_pos, (pred, indices)| { + let pred_pos: HashSet = + indices.into_iter().map(|index| (pred, index)).collect(); + ex_pos.insert_all_take_ret(pred_pos) + }) + } +} + +impl<'a> From>> for Positions<'a> { + /// Converts a set of positions to Positions. + fn from(value: HashSet>) -> Self { + value + .into_iter() + .fold(Positions::new(), |mut positions, (tag, index)| { + if !positions.0.contains_key(tag) { + positions.0.insert(tag, HashSet::::new()); + } + positions.0.get_mut(tag).unwrap().insert(index); + positions + }) + } +} + +/// This Impl-Block contains a method to create new positions. +impl Positions<'_> { + /// Creates new positions. + pub fn new() -> Self { + Self(HashMap::<&Tag, HashSet>::new()) + } +} + +/// This Impl-Block provides methods to get (affected positions | +/// attacked (all existential | cycle existential) positions | +/// marked (sticky | weakly-sticky) positions ) of a RuleSet. +impl RuleSet { + /// Builds and Returns the affected Positions of a RuleSet. + pub fn affected_positions(&self) -> Positions { + let mut aff_pos: Positions = self.initial_affected_positions(); + let mut new_found_aff_pos: Positions = aff_pos.clone(); + while !new_found_aff_pos.0.is_empty() { + let new_con_aff_pos: Positions = self.conclude_affected_positions(&new_found_aff_pos); + new_found_aff_pos = new_con_aff_pos.remove_all_ret(&aff_pos); + aff_pos.insert_all(&new_found_aff_pos); + } + aff_pos + } + + /// Builds all attacked positions ordered by (all existential / existential variables which appea + /// in cycles of the joint acyclicity graph) (PositionsByRuleIdxVariables) of some RuleSet. + fn attacked_positions(&self, att_type: AttackingType) -> PositionsByRuleAndVariables { + let att_variables: HashSet = self.match_attacking_variables(att_type); + let att_pos_by_rule_and_vars_unwrapped: HashMap = att_variables + .into_iter() + .map(|rule_and_var| { + ( + rule_and_var, + self.attacked_positions_by_rule_and_var(&rule_and_var), + ) + }) + .collect(); + PositionsByRuleAndVariables(att_pos_by_rule_and_vars_unwrapped) + } + + /// Builds and Returns the attacked Positions by existential Variables that appear in a Cycle of the + /// JointAcyclicityGraph of a RuleSet. + pub fn attacked_positions_by_cycle_rule_and_variables(&self) -> PositionsByRuleAndVariables { + self.attacked_positions(AttackingType::Cycle) + } + + /// Builds and Returns the attacked Positions by all existential Variables of a RuleSet. + pub fn attacked_positions_by_existential_rule_and_variables( + &self, + ) -> PositionsByRuleAndVariables { + self.attacked_positions(AttackingType::Existential) + } + + /// Returns the marking for the sticky-check of a RuleSet. + pub fn build_and_check_sticky_marking(&self) -> Option { + self.marking(MarkingType::Sticky) + } + + /// Returns the marking for the weakly-sticky-check of a RuleSet. + pub fn build_and_check_weakly_sticky_marking(&self) -> Option { + self.marking(MarkingType::WeaklySticky) + } + + fn marking(&self, mar_type: MarkingType) -> Option { + let mut mar_pos: Positions = self.match_initial_marked_positions(mar_type)?; + let mut new_found_mar_pos: Positions = mar_pos.clone(); + while !new_found_mar_pos.0.is_empty() { + let new_con_mar_pos: Positions = self.conclude_marked_positions(&new_found_mar_pos)?; + new_found_mar_pos = new_con_mar_pos.remove_all_ret(&mar_pos); + mar_pos.insert_all(&new_found_mar_pos); + } + Some(mar_pos) + } +} + +trait AffectedPositionsInference<'a> { + fn conclude_affected_positions(&'a self, last_it_pos: &Positions<'a>) -> Positions<'a>; + fn initial_affected_positions(&'a self) -> Positions<'a>; +} + +impl<'a> AffectedPositionsInference<'a> for RuleSet { + fn initial_affected_positions(&'a self) -> Positions<'a> { + self.0.iter().fold(Positions::new(), |init_aff_pos, rule| { + let pos_of_ex_vars: Positions = rule.initial_affected_positions(); + init_aff_pos.insert_all_take_ret(pos_of_ex_vars) + }) + } + + fn conclude_affected_positions(&'a self, last_it_pos: &Positions<'a>) -> Positions<'a> { + self.0 + .iter() + .fold(Positions::new(), |new_con_aff_pos, rule| { + let new_con_aff_pos_in_rule: Positions = + rule.conclude_affected_positions(last_it_pos); + new_con_aff_pos.insert_all_take_ret(new_con_aff_pos_in_rule) + }) + } +} + +impl<'a> AffectedPositionsInference<'a> for Rule { + fn initial_affected_positions(&'a self) -> Positions<'a> { + self.positions_of_existential_variables() + } + + fn conclude_affected_positions(&'a self, last_it_pos: &Positions<'a>) -> Positions<'a> { + self.positive_variables() + .iter() + .filter(|var| { + let positive_body_atoms: Vec<&Atom> = self.body_positive_refs(); + var.appears_at_some_positions_in_atoms(last_it_pos, &positive_body_atoms) + }) + .fold(Positions::new(), |new_aff_pos_in_rule, var| { + let pos_of_var_in_head: Positions = RuleAndVariable(self, var).positions_in_head(); + new_aff_pos_in_rule.insert_all_take_ret(pos_of_var_in_head) + }) + } +} + +trait AttackedPositionsInference<'a> { + fn conclude_attacked_positions(&'a self, cur_att_pos: &Positions<'a>) -> Positions<'a>; + fn initial_attacked_positions(&'a self, rule_and_var: &RuleAndVariable<'a>) -> Positions<'a>; +} + +impl<'a> AttackedPositionsInference<'a> for RuleSet { + fn conclude_attacked_positions(&'a self, cur_att_pos: &Positions<'a>) -> Positions<'a> { + self.0 + .iter() + .fold(Positions::new(), |new_found_attacked_positions, rule| { + let new_att_pos_in_rule: Positions = rule.conclude_attacked_positions(cur_att_pos); + new_found_attacked_positions.insert_all_take_ret(new_att_pos_in_rule) + }) + } + + // TODO: INSTEAD OF POSITIONS_IN_HEAD CALL, CALL INIT_ATT_POS OF RULE + fn initial_attacked_positions(&'a self, rule_and_var: &RuleAndVariable<'a>) -> Positions<'a> { + self.0.iter().filter(|rule| *rule == rule_and_var.0).fold( + Positions::new(), + |initial_pos, _| { + let initial_pos_of_rule: Positions = rule_and_var.positions_in_head(); + initial_pos.insert_all_take_ret(initial_pos_of_rule) + }, + ) + } +} + +impl<'a> AttackedPositionsInference<'a> for Rule { + fn conclude_attacked_positions(&self, cur_att_pos: &Positions) -> Positions { + self.positive_variables() + .iter() + .map(|var| RuleAndVariable(self, var)) + .filter(|rule_and_var| rule_and_var.is_attacked_by_positions(cur_att_pos)) + .fold(Positions::new(), |new_att_pos_in_rule, rule_and_var| { + let pos_of_var_in_head: Positions = rule_and_var.positions_in_head(); + new_att_pos_in_rule.insert_all_take_ret(pos_of_var_in_head) + }) + } + + fn initial_attacked_positions(&'a self, _rule_and_var: &RuleAndVariable<'a>) -> Positions<'a> { + todo!("IMPLEMENT"); + // TODO: IMPLEMENT + } +} + +trait AttackedPositionsBuilderInferenceExtended<'a> { + fn attacked_positions_by_rule_and_var( + &'a self, + rule_and_var: &RuleAndVariable<'a>, + ) -> Positions<'a>; + fn match_attacking_variables(&self, att_type: AttackingType) -> HashSet; +} + +impl<'a> AttackedPositionsBuilderInferenceExtended<'a> for RuleSet { + fn attacked_positions_by_rule_and_var( + &'a self, + rule_and_var: &RuleAndVariable<'a>, + ) -> Positions<'a> { + let mut att_pos: Positions = self.initial_attacked_positions(rule_and_var); + let mut new_found_att_pos: Positions = att_pos.clone(); + while !new_found_att_pos.0.is_empty() { + let new_con_att_pos: Positions = self.conclude_attacked_positions(&att_pos); + new_found_att_pos = new_con_att_pos.remove_all_ret(&att_pos); + att_pos.insert_all(&new_found_att_pos); + } + att_pos + } + + fn match_attacking_variables(&self, att_type: AttackingType) -> HashSet { + match att_type { + AttackingType::Cycle => { + let jo_ac_graph = JointAcyclicityGraph::new(self); + jo_ac_graph.all_nodes_of_cycles() + } + AttackingType::Existential => self.existential_rule_and_variables(), + } + } +} + +trait MarkedPositionsInference<'a> { + fn conclude_marked_positions(&'a self, last_it_pos: &Positions<'a>) -> Option>; + fn initial_marked_positions(&'a self) -> Option>; + fn initial_weakly_marked_positions(&'a self, inf_rank_pos: &Positions) + -> Option>; +} + +impl<'a> MarkedPositionsInference<'a> for RuleSet { + fn conclude_marked_positions(&'a self, last_it_pos: &Positions<'a>) -> Option> { + self.0 + .iter() + .try_fold(Positions::new(), |new_con_mar_pos, rule| { + let new_mar_pos_in_rule: Positions = rule.conclude_marked_positions(last_it_pos)?; + Some(new_con_mar_pos.insert_all_take_ret(new_mar_pos_in_rule)) + }) + } + + fn initial_marked_positions(&'a self) -> Option> { + self.0 + .iter() + .try_fold(Positions::new(), |init_mar_pos, rule| { + let init_mar_pos_of_rule: Positions = rule.initial_marked_positions()?; + Some(init_mar_pos.insert_all_take_ret(init_mar_pos_of_rule)) + }) + } + + fn initial_weakly_marked_positions( + &'a self, + _inf_rank_pos: &Positions, + ) -> Option> { + let we_ac_graph: WeakAcyclicityGraph = WeakAcyclicityGraph::new(self); + let inf_rank_pos: Positions = we_ac_graph.infinite_rank_positions(); + self.0 + .iter() + .try_fold(Positions::new(), |init_we_mar_pos, rule| { + let init_we_mar_pos_of_rule: Positions = + rule.initial_weakly_marked_positions(&inf_rank_pos)?; + Some(init_we_mar_pos.insert_all_take_ret(init_we_mar_pos_of_rule)) + }) + } +} + +impl<'a> MarkedPositionsInference<'a> for Rule { + fn conclude_marked_positions(&'a self, last_it_pos: &Positions<'a>) -> Option> { + self.positive_variables() + .iter() + .filter(|var| { + let positive_body_atoms: Vec<&Atom> = self.body_positive_refs(); + var.appears_at_some_positions_in_atoms(last_it_pos, &positive_body_atoms) + }) + .try_fold(Positions::new(), |new_mar_pos_in_rule, var| { + if self + .head() + .iter() + .any(|atom| !atom.variables_refs().contains(var)) + { + return None; + } + let pos_of_var_in_head: Positions = RuleAndVariable(self, var).positions_in_head(); + Some(new_mar_pos_in_rule.insert_all_take_ret(pos_of_var_in_head)) + }) + } + + fn initial_marked_positions(&'a self) -> Option> { + let join_vars: HashSet<&Variable> = self.join_variables(); + join_vars + .iter() + .try_fold(Positions::new(), |new_mar_pos_in_rule, var| { + if self + .head() + .iter() + .any(|atom| !atom.variables_refs().contains(var)) + { + return None; + } + let pos_of_var_in_head: Positions = RuleAndVariable(self, var).positions_in_head(); + Some(new_mar_pos_in_rule.insert_all_take_ret(pos_of_var_in_head)) + }) + } + + fn initial_weakly_marked_positions( + &'a self, + infinite_rank_positions: &Positions, + ) -> Option> { + let join_vars: HashSet<&Variable> = self.join_variables(); + join_vars + .iter() + .filter(|var| { + let positive_body_atoms: Vec<&Atom> = self.body_positive_refs(); + var.appears_only_at_positions_in_atoms( + infinite_rank_positions, + &positive_body_atoms, + ) + }) + .try_fold(Positions::new(), |new_we_mar_pos_in_rule, var| { + if self + .head() + .iter() + .any(|atom| !atom.variables_refs().contains(var)) + { + return None; + } + let pos_of_var_in_head: Positions = RuleAndVariable(self, var).positions_in_head(); + Some(new_we_mar_pos_in_rule.insert_all_take_ret(pos_of_var_in_head)) + }) + } +} + +trait MarkedPositionsInferenceExtended<'a> { + fn match_initial_marked_positions(&'a self, mar_type: MarkingType) -> Option>; +} + +impl<'a> MarkedPositionsInferenceExtended<'a> for RuleSet { + fn match_initial_marked_positions(&'a self, mar_type: MarkingType) -> Option> { + match mar_type { + MarkingType::Sticky => self.initial_marked_positions(), + MarkingType::WeaklySticky => self.initial_weakly_marked_positions(&Positions::new()), + } + } +} + +impl<'a> Disjoint for Positions<'a> { + fn is_disjoint(&self, other: &Positions<'a>) -> bool { + self.0.keys().all(|pred| { + !other.0.contains_key(pred) || { + let self_indices: &HashSet = self.0.get(pred).unwrap(); + let other_indices: &HashSet = other.0.get(pred).unwrap(); + self_indices.is_disjoint(other_indices) + } + }) + } +} + +impl<'a> InsertAll, (&'a Tag, HashSet)> for Positions<'a> { + fn insert_all(&mut self, other: &Positions<'a>) { + other.0.iter().for_each(|(pred, other_indices)| { + if !self.0.contains_key(pred) { + self.0.insert(pred, HashSet::::new()); + } + let unioned_indices: &mut HashSet = self.0.get_mut(pred).unwrap(); + unioned_indices.insert_all(other_indices); + }) + } + + fn insert_all_ret(mut self, other: &Positions<'a>) -> Positions<'a> { + self.insert_all(other); + self + } + + fn insert_all_take(&mut self, other: Positions<'a>) { + other.0.into_iter().for_each(|(pred, other_indices)| { + if !self.0.contains_key(pred) { + self.0.insert(pred, HashSet::::new()); + } + let unioned_indices: &mut HashSet = self.0.get_mut(pred).unwrap(); + unioned_indices.insert_all_take(other_indices); + }) + } + + fn insert_all_take_ret(mut self, other: Positions<'a>) -> Positions<'a> { + self.insert_all_take(other); + self + } +} + +impl<'a> RemoveAll, (&'a Tag, HashSet)> for Positions<'a> { + fn remove_all(&mut self, other: &Positions<'a>) { + other.0.iter().for_each(|(pred, other_indices)| { + if let Some(differenced_indices) = self.0.get_mut(pred) { + differenced_indices.remove_all(other_indices); + if differenced_indices.is_empty() { + self.0.remove(pred); + } + } + }) + } + + fn remove_all_ret(mut self, other: &Positions<'a>) -> Positions<'a> { + self.remove_all(other); + self + } + + fn remove_all_take(&mut self, other: Positions<'a>) { + other.0.into_iter().for_each(|(pred, other_indices)| { + if let Some(differenced_indices) = self.0.get_mut(pred) { + differenced_indices.remove_all_take(other_indices); + if differenced_indices.is_empty() { + self.0.remove(pred); + } + } + }) + } + + fn remove_all_take_ret(mut self, other: Positions<'a>) -> Positions<'a> { + self.remove_all_take(other); + self + } +} + +impl<'a> Superset for Positions<'a> { + fn is_superset(&self, other: &Positions<'a>) -> bool { + other.0.keys().all(|pred| { + self.0.contains_key(pred) && { + let self_indices: &HashSet = self.0.get(pred).unwrap(); + let other_indices: &HashSet = other.0.get(pred).unwrap(); + self_indices.is_superset(other_indices) + } + }) + } +} diff --git a/nemo-static-checks/src/static_checks/rule_properties.rs b/nemo-static-checks/src/static_checks/rule_properties.rs new file mode 100644 index 000000000..4d106f121 --- /dev/null +++ b/nemo-static-checks/src/static_checks/rule_properties.rs @@ -0,0 +1,203 @@ +//! Functionality that provides the static checks for a Rule. +use crate::static_checks::positions::{Positions, PositionsByRuleAndVariables}; +use crate::static_checks::rule_set::{RuleAndVariable, RuleAndVariablePair}; +use nemo::rule_model::components::{ + rule::Rule, term::primitive::variable::Variable, IterablePrimitives, +}; + +use crate::static_checks::rule_set::*; + +use std::collections::HashSet; + +/// This trait gives some static checks for some rule. +pub trait RuleProperties { + /// Determines if the rule is joinless. + fn is_joinless(&self) -> bool; + /// Determines if the rule is linear. + fn is_linear(&self) -> bool; + /// Determines if the rule is guarded. + fn is_guarded(&self) -> bool; + /// Determines if the rule is domain restricted. + fn is_domain_restricted(&self) -> bool; + /// Determines if the rule is frontier one. + fn is_frontier_one(&self) -> bool; + /// Determines if the rule is datalog. + fn is_datalog(&self) -> bool; + /// Determines if the rule is monadic. + fn is_monadic(&self) -> bool; + /// Determines if the rule is frontier guarded. + fn is_frontier_guarded(&self) -> bool; + /// Determines if the rule is weakly guarded. + fn is_weakly_guarded(&self, affected_positions: &Positions) -> bool; + /// Determines if the rule is weakly frontier guarded. + fn is_weakly_frontier_guarded(&self, affected_positions: &Positions) -> bool; + /// Determines if the rule is jointly guarded. + fn is_jointly_guarded( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool; + /// Determines if the rule is jointly frontier guarded. + fn is_jointly_frontier_guarded( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool; + /// Determines if the rule is glut guarded. + fn is_glut_guarded( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool; + /// Determines if the rule is glut frontier guarded. + fn is_glut_frontier_guarded( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool; + /// Determines if the rule is shy. + fn is_shy(&self, attacked_pos_by_vars: &PositionsByRuleAndVariables) -> bool; +} + +impl RuleProperties for Rule { + fn is_joinless(&self) -> bool { + self.join_variables().is_empty() + } + + fn is_linear(&self) -> bool { + 1 >= self.body().len() + } + + fn is_guarded(&self) -> bool { + let positive_variables: HashSet<&Variable> = self.positive_variables(); + self.is_guarded_for_variables(positive_variables) + } + + fn is_domain_restricted(&self) -> bool { + let positive_body_variables: HashSet<&Variable> = self.positive_variables(); + self.head().iter().all(|atom| { + let universal_variables_of_atom: HashSet<&Variable> = atom.universal_variables(); + universal_variables_of_atom.is_empty() + || universal_variables_of_atom == positive_body_variables + }) + } + + fn is_frontier_one(&self) -> bool { + 1 >= self.frontier_variables().len() + } + + fn is_datalog(&self) -> bool { + self.existential_variables().is_empty() + } + + fn is_monadic(&self) -> bool { + self.head() + .iter() + .all(|atom| 1 == atom.primitive_terms().count()) + } + + fn is_frontier_guarded(&self) -> bool { + let frontier_variables: HashSet<&Variable> = self.frontier_variables(); + self.is_guarded_for_variables(frontier_variables) + } + + fn is_weakly_guarded(&self, affected_positions: &Positions) -> bool { + let affected_universal_variables: HashSet<&Variable> = + self.affected_universal_variables(affected_positions); + self.is_guarded_for_variables(affected_universal_variables) + } + + fn is_weakly_frontier_guarded(&self, affected_positions: &Positions) -> bool { + let affected_frontier_variables: HashSet<&Variable> = + self.affected_frontier_variables(affected_positions); + self.is_guarded_for_variables(affected_frontier_variables) + } + + fn is_jointly_guarded( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool { + let attacked_universal_variables: HashSet<&Variable> = + self.attacked_universal_variables(attacked_pos_by_rule_and_vars); + self.is_guarded_for_variables(attacked_universal_variables) + } + + fn is_jointly_frontier_guarded( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool { + let attacked_frontier_variables: HashSet<&Variable> = + self.attacked_frontier_variables(attacked_pos_by_rule_and_vars); + self.is_guarded_for_variables(attacked_frontier_variables) + } + + fn is_glut_guarded( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool { + let attacked_universal_glut_variables: HashSet<&Variable> = + self.attacked_universal_glut_variables(attacked_pos_by_cycle_rule_and_vars); + self.is_guarded_for_variables(attacked_universal_glut_variables) + } + + fn is_glut_frontier_guarded( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool { + let attacked_frontier_glut_variables: HashSet<&Variable> = + self.attacked_frontier_glut_variables(attacked_pos_by_cycle_rule_and_vars); + self.is_guarded_for_variables(attacked_frontier_glut_variables) + } + + // TODO: SHORTEN FUNCTION + fn is_shy(&self, attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables) -> bool { + let join_vars_in_multiple_body_atoms_are_not_attacked: bool = self + .join_variables() + .iter() + .filter(|var| RuleAndVariable(self, var).appears_in_multiple_positive_body_atoms()) + .all(|var| !RuleAndVariable(self, var).is_attacked(attacked_pos_by_rule_and_vars)); + let frontier_vars_that_appear_in_diff_body_atoms_are_not_att_by_same_var: bool = self + .frontier_rule_and_variable_pairs() + .iter() + .filter(|rule_and_var_pair| rule_and_var_pair.appear_in_different_positive_body_atoms()) + .all(|RuleAndVariablePair([rule_and_var_1, rule_and_var_2])| { + attacked_pos_by_rule_and_vars.0.values().all(|ex_var_pos| { + !rule_and_var_1.is_attacked_by_positions(ex_var_pos) + || !rule_and_var_2.is_attacked_by_positions(ex_var_pos) + }) + }); + join_vars_in_multiple_body_atoms_are_not_attacked + && frontier_vars_that_appear_in_diff_body_atoms_are_not_att_by_same_var + } + + // fn is_mfa(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_dmfa(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_rmfa(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_mfc(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_dmfc(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_drpc(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } + // + // fn is_rpc(&self) -> bool { + // todo!("IMPLEMENT"); + // // TODO: IMPLEMENT + // } +} diff --git a/nemo-static-checks/src/static_checks/rule_set.rs b/nemo-static-checks/src/static_checks/rule_set.rs new file mode 100644 index 000000000..83c318018 --- /dev/null +++ b/nemo-static-checks/src/static_checks/rule_set.rs @@ -0,0 +1,886 @@ +//! Functionality that provides methods in relation with Rule-Types. +use crate::static_checks::collection_traits::{Disjoint, InsertAll, Superset}; +use crate::static_checks::positions::{Position, Positions, PositionsByRuleAndVariables}; +use nemo::rule_model::components::{ + atom::Atom, rule::Rule, term::primitive::variable::Variable, IterableVariables, +}; + +use std::collections::{HashMap, HashSet}; + +/// Type to relate an (existential) Variable to a Rule. Therefore a type to identificate an +/// (existential) Variable. +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +pub struct RuleAndVariable<'a>(pub &'a Rule, pub &'a Variable); + +impl Ord for RuleAndVariable<'_> { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.1.cmp(other.1) + } +} + +impl PartialOrd for RuleAndVariable<'_> { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.1.cmp(other.1)) + } +} + +// TODO: USE A REFERENCE TO RULE +/// Type to wrap a 'set' (Vec) of Rule(s). +#[derive(Debug)] +pub struct RuleSet(pub Vec); + +/// Type to relate 2 Variable(s) together. +#[derive(Debug, Eq, Hash, PartialEq)] +pub struct RuleAndVariablePair<'a>(pub [RuleAndVariable<'a>; 2]); + +/// This Impl-Block contains a method for a rule to get its existential variables. +// impl Rule { +// /// Returns all the existential Variables of a rule. +// pub fn existential_variables(&self) -> HashSet<&Variable> { +// self.variables() +// .filter(|var| var.is_existential()) +// .collect() +// } +// } +// +/// This Impl-Block contains a method for a rule to get its existential variables combined with the +/// rule. +// impl Rule { +// /// Returns all existential variables combined with its rule of a rule. +// pub fn existential_rule_and_variables(&self) -> HashSet { +// let ex_vars_of_rule: HashSet<&Variable> = self.existential_variables(); +// ex_vars_of_rule +// .into_iter() +// .map(|var| RuleAndVariable(self, var)) +// .collect() +// } +// } + +/// This Impl-Block contains methods for a rule to get the positions (set | compressed) of its +/// existential variables. +// impl Rule { +// /// Returns the positions of the existential Variables of the rule as a set. +// pub fn positions_of_existential_variables_as_set(&self) -> HashSet { +// let pos_of_ex_vars: Positions = self.positions_of_existential_variables(); +// HashSet::::from(pos_of_ex_vars) +// } +// +// /// Returns the Positions of the existential Variables of a rule. +// pub fn positions_of_existential_variables(&self) -> Positions { +// self.existential_rule_and_variables().into_iter().fold( +// Positions::new(), +// |pos_of_ex_var, rule_and_var| { +// let pos_of_ex_var_in_head: Positions = rule_and_var.positions_in_head(); +// pos_of_ex_var.insert_all_take_ret(pos_of_ex_var_in_head) +// }, +// ) +// } +// } + +pub trait ExistentialVariables { + /// Returns all the existential Variables of a rule. + // fn existential_variables(&self) -> HashSet<&Variable>; + /// Returns all existential variables combined with its rule of a rule. + fn existential_rule_and_variables(&self) -> HashSet; + /// Returns the positions of the existential Variables of the rule as a set. + fn positions_of_existential_variables_as_set(&self) -> HashSet; + /// Returns the Positions of the existential Variables of a rule. + fn positions_of_existential_variables(&self) -> Positions; +} + +impl ExistentialVariables for Rule { + // fn existential_variables(&self) -> HashSet<&Variable> { + // self.variables() + // .filter(|var| var.is_existential()) + // .collect() + // } + + fn existential_rule_and_variables(&self) -> HashSet { + let ex_vars_of_rule: HashSet<&Variable> = self.existential_variables(); + ex_vars_of_rule + .into_iter() + .map(|var| RuleAndVariable(self, var)) + .collect() + } + + fn positions_of_existential_variables_as_set(&self) -> HashSet { + let pos_of_ex_vars: Positions = self.positions_of_existential_variables(); + HashSet::::from(pos_of_ex_vars) + } + + fn positions_of_existential_variables(&self) -> Positions { + self.existential_rule_and_variables().into_iter().fold( + Positions::new(), + |pos_of_ex_var, rule_and_var| { + let pos_of_ex_var_in_head: Positions = rule_and_var.positions_in_head(); + pos_of_ex_var.insert_all_take_ret(pos_of_ex_var_in_head) + }, + ) + } +} + +/// This Impl-Block contains methods for a rule to get its (positive body / head) atoms. +// impl Rule { +// /// Returns the positive body Atom(s) as reference(s) of a Rule. +// pub fn body_positive_refs(&self) -> Vec<&Atom> { +// self.body_positive().collect() +// } +// +// /// Returns the head Atom(s) as reference(s) of a Rule. +// pub fn head_refs(&self) -> Vec<&Atom> { +// self.head().iter().collect() +// } +// } + +pub trait RuleRefs { + /// Returns the positive body Atom(s) as reference(s) of a Rule. + fn body_positive_refs(&self) -> Vec<&Atom>; + /// Returns the head Atom(s) as reference(s) of a Rule. + fn head_refs(&self) -> Vec<&Atom>; +} + +impl RuleRefs for Rule { + fn body_positive_refs(&self) -> Vec<&Atom> { + self.body_positive().collect() + } + + fn head_refs(&self) -> Vec<&Atom> { + self.head().iter().collect() + } +} + +/// This Impl-Block contains a method to check if the rule is guarded for a set of variables. +// impl Rule { +// /// Checks whether the Rule is gaurded for some Variables. +// pub fn is_guarded_for_variables(&self, variables: HashSet<&Variable>) -> bool { +// if variables.is_empty() { +// return true; +// } +// self.body_positive_refs().iter().any(|atom| { +// let vars_of_atom: HashSet<&Variable> = atom.variables_refs(); +// vars_of_atom.is_superset(&variables) +// }) +// } +// } + +pub trait Guarded { + /// Checks whether the Rule is gaurded for some Variables. + fn is_guarded_for_variables(&self, variables: HashSet<&Variable>) -> bool; +} + +impl Guarded for Rule { + fn is_guarded_for_variables(&self, variables: HashSet<&Variable>) -> bool { + if variables.is_empty() { + return true; + } + self.body_positive_refs().iter().any(|atom| { + let vars_of_atom: HashSet<&Variable> = atom.variables_refs(); + vars_of_atom.is_superset(&variables) + }) + } +} + +// NOTE: MAYBE IMPLEMENT A METHOD TO GET AN ITERATOR OVER THE JOIN VARIABLES +/// This Impl-Block contains methods for a rule to get its join variables. +// impl Rule { +// /// Returns the join Variables of a Rule. +// pub fn join_variables(&self) -> HashSet<&Variable> { +// let positive_vars: Vec<&Variable> = self.positive_variables_iter().collect(); +// positive_vars +// .iter() +// .filter(|var| positive_vars.iter().filter(|var1| var1 == var).count() > 1) +// .copied() +// .collect() +// } +// } + +// NOTE: MAYBE IMPLEMENT A METHOD TO GET AN ITERATOR OVER THE FRONTIER VARIABLES +/// This Impl-Block contains methods for a rule to get its frontier variables. +// impl Rule { +// /// Returns the frontier Variables of a Rule. +// pub fn frontier_variables(&self) -> HashSet<&Variable> { +// let positive_body_variables: HashSet<&Variable> = self.positive_variables(); +// let universal_head_variables: HashSet<&Variable> = self.universal_head_variables(); +// positive_body_variables +// .intersection(&universal_head_variables) +// .copied() +// .collect() +// } +// } + +/// This Impl-Block contains methods for a rule to get its frontier variable pairs. +// impl Rule { +// /// Returns all pairs of frontier Variables of a Rule excluding the reflexive pairs. +// pub fn frontier_rule_and_variable_pairs(&self) -> HashSet { +// let frontier_variables: HashSet<&Variable> = self.frontier_variables(); +// frontier_variables +// .iter() +// .fold(HashSet::::new(), |mut pairs, var1| { +// frontier_variables +// .iter() +// .filter(|var2| var1 != *var2) +// .for_each(|var2| { +// pairs.insert(RuleAndVariablePair([ +// RuleAndVariable(self, var1), +// RuleAndVariable(self, var2), +// ])); +// }); +// pairs +// }) +// } +// } +// +// /// This Impl-Block contains a method for a rule to get the universal variables of its head. +// impl Rule { +// fn universal_head_variables(&self) -> HashSet<&Variable> { +// self.head().iter().fold( +// HashSet::<&Variable>::new(), +// |universal_head_variables: HashSet<&Variable>, atom| { +// let un_vars_of_atom: HashSet<&Variable> = atom.universal_variables(); +// universal_head_variables.insert_all_take_ret(un_vars_of_atom) +// }, +// ) +// } +// } + +pub trait SpecialVariables { + /// Returns the join Variables of a Rule. + fn join_variables(&self) -> HashSet<&Variable>; + /// Returns the frontier Variables of a Rule. + // fn frontier_variables(&self) -> HashSet<&Variable>; + /// Returns all pairs of frontier Variables of a Rule excluding the reflexive pairs. + fn frontier_rule_and_variable_pairs(&self) -> HashSet; + // fn universal_head_variables(&self) -> HashSet<&Variable>; +} + +impl SpecialVariables for Rule { + fn join_variables(&self) -> HashSet<&Variable> { + let positive_vars: Vec<&Variable> = self.positive_variables_iter().collect(); + positive_vars + .iter() + .filter(|var| positive_vars.iter().filter(|var1| var1 == var).count() > 1) + .copied() + .collect() + } + + // fn frontier_variables(&self) -> HashSet<&Variable> { + // let positive_body_variables: HashSet<&Variable> = self.positive_variables(); + // let universal_head_variables: HashSet<&Variable> = self.universal_head_variables(); + // positive_body_variables + // .intersection(&universal_head_variables) + // .copied() + // .collect() + // } + + fn frontier_rule_and_variable_pairs(&self) -> HashSet { + let frontier_variables: HashSet<&Variable> = self.frontier_variables(); + frontier_variables + .iter() + .fold(HashSet::::new(), |mut pairs, var1| { + frontier_variables + .iter() + .filter(|var2| var1 != *var2) + .for_each(|var2| { + pairs.insert(RuleAndVariablePair([ + RuleAndVariable(self, var1), + RuleAndVariable(self, var2), + ])); + }); + pairs + }) + } + + // fn universal_head_variables(&self) -> HashSet<&Variable> { + // self.head().iter().fold( + // HashSet::<&Variable>::new(), + // |universal_head_variables: HashSet<&Variable>, atom| { + // let un_vars_of_atom: HashSet<&Variable> = atom.universal_variables(); + // universal_head_variables.insert_all_take_ret(un_vars_of_atom) + // }, + // ) + // } +} + +/// This Impl-Block contains methods for a rule to get all of the positions of its (positive body / head) variables. +// impl<'a> Rule { +// fn all_positions_of_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a> { +// atoms.iter().fold(Positions::new(), |all_pos, atom| { +// let positions: Positions = Positions(HashMap::from([( +// atom.predicate_ref(), +// (0..atom.len()).collect(), +// )])); +// all_pos.insert_all_take_ret(positions) +// }) +// } +// +// fn all_positions_of_head(&'a self) -> Positions<'a> { +// let head_atoms: Vec<&Atom> = self.head_refs(); +// self.all_positions_of_atoms(&head_atoms) +// } +// +// /// Returns all the positions of the head as a set. +// pub fn all_positions_of_head_as_set(&'a self) -> HashSet> { +// let all_pos_of_head: Positions<'a> = self.all_positions_of_head(); +// HashSet::::from(all_pos_of_head) +// } +// +// fn all_positions_of_positive_body(&'a self) -> Positions<'a> { +// let positive_body_atoms: Vec<&Atom> = self.body_positive_refs(); +// self.all_positions_of_atoms(&positive_body_atoms) +// } +// +// /// Returns all the positions of the positive body as a set. +// pub fn all_positions_of_positive_body_as_set(&'a self) -> HashSet> { +// let all_pos_of_positive_body: Positions<'a> = self.all_positions_of_positive_body(); +// HashSet::::from(all_pos_of_positive_body) +// } +// +// /// Returns all Positions of a rule. +// pub fn all_positive_literal_positions(&'a self) -> Positions<'a> { +// let all_positive_body_positions: Positions = self.all_positions_of_positive_body(); +// let all_head_positions: Positions = self.all_positions_of_head(); +// all_positive_body_positions.insert_all_take_ret(all_head_positions) +// } +// } + +pub trait AllPositions<'a> { + fn all_positions_of_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a>; + fn all_positions_of_head(&'a self) -> Positions<'a>; + /// Returns all the positions of the head as a set. + fn all_positions_of_head_as_set(&'a self) -> HashSet>; + fn all_positions_of_positive_body(&'a self) -> Positions<'a>; + /// Returns all the positions of the positive body as a set. + fn all_positions_of_positive_body_as_set(&'a self) -> HashSet>; + /// Returns all Positions of a rule. + fn all_positive_literal_positions(&'a self) -> Positions<'a>; +} + +impl<'a> AllPositions<'a> for Rule { + fn all_positions_of_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a> { + atoms.iter().fold(Positions::new(), |all_pos, atom| { + let positions: Positions = Positions(HashMap::from([( + atom.predicate_ref(), + (0..atom.len()).collect(), + )])); + all_pos.insert_all_take_ret(positions) + }) + } + + fn all_positions_of_head(&'a self) -> Positions<'a> { + let head_atoms: Vec<&Atom> = self.head_refs(); + self.all_positions_of_atoms(&head_atoms) + } + + fn all_positions_of_head_as_set(&'a self) -> HashSet> { + let all_pos_of_head: Positions<'a> = self.all_positions_of_head(); + HashSet::::from(all_pos_of_head) + } + + fn all_positions_of_positive_body(&'a self) -> Positions<'a> { + let positive_body_atoms: Vec<&Atom> = self.body_positive_refs(); + self.all_positions_of_atoms(&positive_body_atoms) + } + + fn all_positions_of_positive_body_as_set(&'a self) -> HashSet> { + let all_pos_of_positive_body: Positions<'a> = self.all_positions_of_positive_body(); + HashSet::::from(all_pos_of_positive_body) + } + + fn all_positive_literal_positions(&'a self) -> Positions<'a> { + let all_positive_body_positions: Positions = self.all_positions_of_positive_body(); + let all_head_positions: Positions = self.all_positions_of_head(); + all_positive_body_positions.insert_all_take_ret(all_head_positions) + } +} + +/// This Impl-Block contains methods for a rule to get its affected (frontier | universal) +/// variables. +// impl<'a> Rule { +// /// Returns the affected frontier Variables of a Rule. +// pub fn affected_frontier_variables( +// &self, +// affected_positions: &Positions, +// ) -> HashSet<&Variable> { +// self.affected_variables(self.frontier_variables(), affected_positions) +// } +// +// /// Returns the affected universal Variables of a Rule. +// pub fn affected_universal_variables( +// &self, +// affected_positions: &Positions, +// ) -> HashSet<&Variable> { +// self.affected_variables(self.positive_variables(), affected_positions) +// } +// +// /// Returns the affected Variables out of some Variables of a Rule. +// fn affected_variables( +// &self, +// variables: HashSet<&'a Variable>, +// affected_positions: &Positions, +// ) -> HashSet<&'a Variable> { +// variables +// .iter() +// .filter(|var| RuleAndVariable(self, var).is_affected(affected_positions)) +// .copied() +// .collect() +// } +// } + +pub trait AffectedPositions<'a> { + /// Returns the affected frontier Variables of a Rule. + fn affected_frontier_variables(&self, affected_positions: &Positions) -> HashSet<&Variable>; + /// Returns the affected universal Variables of a Rule. + fn affected_universal_variables(&self, affected_positions: &Positions) -> HashSet<&Variable>; + /// Returns the affected Variables out of some Variables of a Rule. + fn affected_variables( + &self, + variables: HashSet<&'a Variable>, + affected_positions: &Positions, + ) -> HashSet<&'a Variable>; +} + +impl<'a> AffectedPositions<'a> for Rule { + fn affected_frontier_variables(&self, affected_positions: &Positions) -> HashSet<&Variable> { + self.affected_variables(self.frontier_variables(), affected_positions) + } + + fn affected_universal_variables(&self, affected_positions: &Positions) -> HashSet<&Variable> { + self.affected_variables(self.positive_variables(), affected_positions) + } + + fn affected_variables( + &self, + variables: HashSet<&'a Variable>, + affected_positions: &Positions, + ) -> HashSet<&'a Variable> { + variables + .iter() + .filter(|var| RuleAndVariable(self, var).is_affected(affected_positions)) + .copied() + .collect() + } +} + +/// This Impl-Block contains methods for a rule to get its attacked (frontier | universal) +/// variables. +// impl<'a> Rule { +// /// Returns the attacked frontier Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). +// pub fn attacked_frontier_variables( +// &self, +// attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, +// ) -> HashSet<&Variable> { +// let frontier_variables: HashSet<&Variable> = self.frontier_variables(); +// self.attacked_variables(frontier_variables, attacked_pos_by_rule_and_vars) +// } +// +// /// Returns the attacked Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). +// pub fn attacked_universal_variables( +// &self, +// attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, +// ) -> HashSet<&Variable> { +// let universal_variables: HashSet<&Variable> = self.positive_variables(); +// self.attacked_variables(universal_variables, attacked_pos_by_rule_and_vars) +// } +// +// /// Returns the attacked Variables out of some Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). +// fn attacked_variables( +// &self, +// variables: HashSet<&'a Variable>, +// attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, +// ) -> HashSet<&'a Variable> { +// variables +// .iter() +// .filter(|var| RuleAndVariable(self, var).is_attacked(attacked_pos_by_rule_and_vars)) +// .copied() +// .collect() +// } +// } + +/// This Impl-Block contains methods for a rule to get its attacked (frontier | universal) glut +/// variables. +// impl Rule { +// /// Returns the attacked frontier glut Variables of a Rule. +// pub fn attacked_frontier_glut_variables( +// &self, +// attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, +// ) -> HashSet<&Variable> { +// let frontier_variables: HashSet<&Variable> = self.frontier_variables(); +// self.attacked_variables(frontier_variables, attacked_pos_by_cycle_rule_and_vars) +// } +// +// /// Returns the attacked glut Variables of a Rule. +// pub fn attacked_universal_glut_variables( +// &self, +// attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, +// ) -> HashSet<&Variable> { +// let universal_variables: HashSet<&Variable> = self.positive_variables(); +// self.attacked_variables(universal_variables, attacked_pos_by_cycle_rule_and_vars) +// } +// } + +pub trait AttackedVariables<'a> { + /// Returns the attacked frontier Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). + fn attacked_frontier_variables( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable>; + /// Returns the attacked Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). + fn attacked_universal_variables( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable>; + /// Returns the attacked Variables out of some Variables of some Rule based on the attacked positions by RuleIdxVariable(s) (PositionsByRuleIdxVariables). + fn attacked_variables( + &self, + variables: HashSet<&'a Variable>, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&'a Variable>; + /// Returns the attacked frontier glut Variables of a Rule. + fn attacked_frontier_glut_variables( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable>; + /// Returns the attacked glut Variables of a Rule. + fn attacked_universal_glut_variables( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable>; +} + +impl<'a> AttackedVariables<'a> for Rule { + fn attacked_frontier_variables( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable> { + let frontier_variables: HashSet<&Variable> = self.frontier_variables(); + self.attacked_variables(frontier_variables, attacked_pos_by_rule_and_vars) + } + + fn attacked_universal_variables( + &self, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable> { + let universal_variables: HashSet<&Variable> = self.positive_variables(); + self.attacked_variables(universal_variables, attacked_pos_by_rule_and_vars) + } + + fn attacked_variables( + &self, + variables: HashSet<&'a Variable>, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&'a Variable> { + variables + .iter() + .filter(|var| RuleAndVariable(self, var).is_attacked(attacked_pos_by_rule_and_vars)) + .copied() + .collect() + } + + fn attacked_frontier_glut_variables( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable> { + let frontier_variables: HashSet<&Variable> = self.frontier_variables(); + self.attacked_variables(frontier_variables, attacked_pos_by_cycle_rule_and_vars) + } + + fn attacked_universal_glut_variables( + &self, + attacked_pos_by_cycle_rule_and_vars: &PositionsByRuleAndVariables, + ) -> HashSet<&Variable> { + let universal_variables: HashSet<&Variable> = self.positive_variables(); + self.attacked_variables(universal_variables, attacked_pos_by_cycle_rule_and_vars) + } +} + +/// This Trait provides methods to get all positions (set | compressed) of a rule. +impl<'a> RuleSet { + /// Returns all positions of a ruleset as a set. + pub fn all_positive_positions_as_set(&'a self) -> HashSet> { + let all_positive_positions: Positions = self.all_positive_positions(); + HashSet::::from(all_positive_positions) + } + + /// Returns all positios of a ruleset. + fn all_positive_positions(&'a self) -> Positions<'a> { + self.0.iter().fold(Positions::new(), |all_pos, rule| { + let all_pos_of_rule: Positions = rule.all_positive_literal_positions(); + all_pos.insert_all_take_ret(all_pos_of_rule) + }) + } +} + +/// This Impl-Block contains a method for a ruleset to get its existential variables combined with the +/// rule it occurs in. +impl RuleSet { + /// Returns all existential variables combined with its rule of a ruleset. + pub fn existential_rule_and_variables(&self) -> HashSet { + self.0 + .iter() + .fold(HashSet::::new(), |ex_vars, rule| { + let ex_rule_and_vars: HashSet = + rule.existential_rule_and_variables(); + ex_vars.union(&ex_rule_and_vars).copied().collect() + }) + } +} + +/// This Impl-Block contains methods for a variable to check if it is attacked with different input +/// parameters. +impl RuleAndVariable<'_> { + /// Returns the attacked frontier Variables of a Rule. + pub fn is_attacked(&self, attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables) -> bool { + let positions_of_variable_in_body: Positions = self.positions_in_positive_body(); + attacked_pos_by_rule_and_vars + .0 + .values() + .any(|att_pos| att_pos.is_superset(&positions_of_variable_in_body)) + } + + /// Returns the attacked Variables of a Rule. + pub fn is_attacked_by_positions(&self, attacked_pos_of_rule_and_var: &Positions) -> bool { + let positions_of_variable_in_body: Positions = self.positions_in_positive_body(); + attacked_pos_of_rule_and_var.is_superset(&positions_of_variable_in_body) + } + + /// Returns the attacked Variables out of some Variables of a Rule. + pub fn is_attacked_by_rule_and_variable( + &self, + attacking_rule_and_var: &RuleAndVariable, + attacked_pos_by_rule_and_vars: &PositionsByRuleAndVariables, + ) -> bool { + let attacked_pos_of_rule_and_var: &Positions = attacked_pos_by_rule_and_vars + .0 + .get(attacking_rule_and_var) + .unwrap(); + self.is_attacked_by_positions(attacked_pos_of_rule_and_var) + } +} + +/// This Impl-Block contains a method for a variable to check if it is affected. +impl RuleAndVariable<'_> { + /// Checks whether a Variable is attacked in some Rule based on the + /// affected Positions. + fn is_affected(&self, affected_positions: &Positions) -> bool { + let positions_of_variable_in_body: Positions = self.positions_in_positive_body(); + affected_positions.is_superset(&positions_of_variable_in_body) + } +} + +/// This Impl-Block contains methods for a variable to determine if it appears in a special way in +/// a rule. +impl RuleAndVariable<'_> { + /// Checks if some Variable appears at multiple atoms in the positive body of some rule. + pub fn appears_in_multiple_positive_body_atoms(&self) -> bool { + self.0 + .body_positive_refs() + .iter() + .filter(|atom| self.1.appears_in_atom(atom)) + .count() + > 1 + } + + fn appears_without_other_in_positive_body_atom(&self, other: &RuleAndVariable) -> bool { + self.0 + .body_positive_refs() + .iter() + .filter(|atom| self.1.appears_in_atom(atom) && !other.1.appears_in_atom(atom)) + .count() + > 0 + } +} + +/// This Impl-Block contains methods for a variable to get its positions in some part of a rule. +impl<'a> RuleAndVariable<'a> { + /// Returns the positions of a variable in the head of some rule as a set. + pub fn positions_in_positive_body_as_set(self) -> HashSet> { + let body_pos_of_var: Positions = self.positions_in_positive_body(); + HashSet::::from(body_pos_of_var) + } + + /// Returns the positions of a variable in the positive body of a rule as a set. + pub fn positions_in_head_as_set(self) -> HashSet> { + let head_pos_of_var: Positions = self.positions_in_head(); + HashSet::::from(head_pos_of_var) + } + + /// Returns the positions of a variable in the head of a rule. + fn positions_in_positive_body(self) -> Positions<'a> { + let positive_body_atoms: Vec<&Atom> = self.0.body_positive_refs(); + self.1.positions_in_atoms(&positive_body_atoms) + } + + /// Returns the positions of a variable in the positive body of a rule. + pub fn positions_in_head(self) -> Positions<'a> { + let head_atoms: Vec<&Atom> = self.0.head_refs(); + self.1.positions_in_atoms(&head_atoms) + } +} + +/// This Impl-Block contains a method for a variable pair to check if its variables appear in +/// different positive body atoms of a rule. +impl RuleAndVariablePair<'_> { + // TODO: REEVALUATE FUNCTION BECAUSE '2 FRONTIER VARIABLE(S) APPEAR IN DIFFERENT ATOM(S)' IS + // NOT A CLEAR DEFINITION + /// Checks if some Variables of a VariablePair appear at different atoms in the positive body + /// of some rule. + pub fn appear_in_different_positive_body_atoms(&self) -> bool { + let found_var1_alone: bool = + self.0[0].appears_without_other_in_positive_body_atom(&self.0[1]); + let found_var2_alone: bool = + self.0[1].appears_without_other_in_positive_body_atom(&self.0[0]); + found_var1_alone && found_var2_alone + } +} + +/// This Impl-Block contains methods for a variable to get its positions in an atom or some atoms. +// impl<'a> Variable { +// /// Returns the Positions where the Variable appears in the Atom. +// fn positions_in_atom(&self, atom: &'a Atom) -> Positions<'a> { +// atom.variables() +// .enumerate() +// .filter(|(_, var)| self == *var) +// .fold(Positions::new(), |mut positions_in_atom, (index, _)| { +// positions_in_atom +// .0 +// .entry(atom.predicate_ref()) +// .and_modify(|indeces| { +// indeces.insert(index); +// }) +// .or_insert(HashSet::from([index])); +// positions_in_atom +// }) +// } +// +// /// Returns the Positions where the Variable appears in the Atom(s). +// fn positions_in_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a> { +// atoms +// .iter() +// .fold(Positions::new(), |positions_in_atoms, atom| { +// let positions_in_atom: Positions = self.positions_in_atom(atom); +// positions_in_atoms.insert_all_take_ret(positions_in_atom) +// }) +// } +// } + +/// This Impl-Block contains methods for a variable to check its appearance on positions of an atom +/// or some atoms. +// impl Variable { +// /// Checks if a variable appears at some positions in an atom. +// fn appears_at_some_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool { +// let positions_in_atom: Positions = self.positions_in_atom(atom); +// !positions_in_atom.is_disjoint(positions) +// } +// +// /// Checks if a variable appears at some positions in some atoms. +// pub fn appears_at_some_positions_in_atoms( +// &self, +// positions: &Positions, +// atoms: &[&Atom], +// ) -> bool { +// atoms +// .iter() +// .any(|atom| self.appears_at_some_positions_in_atom(positions, atom)) +// } +// +// /// Checks if a variable appears only at positions in an atom. +// fn appears_only_at_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool { +// let positions_in_atom: Positions = self.positions_in_atom(atom); +// positions.is_superset(&positions_in_atom) +// } +// +// /// Checks if a variable appears only at positions in some atoms. +// pub fn appears_only_at_positions_in_atoms( +// &self, +// positions: &Positions, +// atoms: &[&Atom], +// ) -> bool { +// atoms +// .iter() +// .all(|atom| self.appears_only_at_positions_in_atom(positions, atom)) +// } +// } + +pub trait AtomPositions<'a> { + /// Returns the Positions where the Variable appears in the Atom. + fn positions_in_atom(&self, atom: &'a Atom) -> Positions<'a>; + /// Returns the Positions where the Variable appears in the Atom(s). + fn positions_in_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a>; + /// Checks if a variable appears at some positions in an atom. + fn appears_at_some_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool; + /// Checks if a variable appears at some positions in some atoms. + fn appears_at_some_positions_in_atoms(&self, positions: &Positions, atoms: &[&Atom]) -> bool; + /// Checks if a variable appears only at positions in an atom. + fn appears_only_at_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool; + /// Checks if a variable appears only at positions in some atoms. + fn appears_only_at_positions_in_atoms(&self, positions: &Positions, atoms: &[&Atom]) -> bool; +} + +impl<'a> AtomPositions<'a> for Variable { + fn positions_in_atom(&self, atom: &'a Atom) -> Positions<'a> { + atom.variables() + .enumerate() + .filter(|(_, var)| self == *var) + .fold(Positions::new(), |mut positions_in_atom, (index, _)| { + positions_in_atom + .0 + .entry(atom.predicate_ref()) + .and_modify(|indeces| { + indeces.insert(index); + }) + .or_insert(HashSet::from([index])); + positions_in_atom + }) + } + + fn positions_in_atoms(&self, atoms: &[&'a Atom]) -> Positions<'a> { + atoms + .iter() + .fold(Positions::new(), |positions_in_atoms, atom| { + let positions_in_atom: Positions = self.positions_in_atom(atom); + positions_in_atoms.insert_all_take_ret(positions_in_atom) + }) + } + + fn appears_at_some_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool { + let positions_in_atom: Positions = self.positions_in_atom(atom); + !positions_in_atom.is_disjoint(positions) + } + + fn appears_at_some_positions_in_atoms(&self, positions: &Positions, atoms: &[&Atom]) -> bool { + atoms + .iter() + .any(|atom| self.appears_at_some_positions_in_atom(positions, atom)) + } + + fn appears_only_at_positions_in_atom(&self, positions: &Positions, atom: &Atom) -> bool { + let positions_in_atom: Positions = self.positions_in_atom(atom); + positions.is_superset(&positions_in_atom) + } + + fn appears_only_at_positions_in_atoms(&self, positions: &Positions, atoms: &[&Atom]) -> bool { + atoms + .iter() + .all(|atom| self.appears_only_at_positions_in_atom(positions, atom)) + } +} + +/// Thisk Impl-Block contains methods for a variable to check its appearance in an atom or some +/// atoms. +// impl Variable { +// /// Checks if a variable appears in an atom. +// fn appears_in_atom(&self, atom: &Atom) -> bool { +// atom.variables_refs().contains(self) +// } +// } + +pub trait AtomAppearance { + /// Checks if a variable appears in an atom. + fn appears_in_atom(&self, atom: &Atom) -> bool; +} + +impl AtomAppearance for Variable { + fn appears_in_atom(&self, atom: &Atom) -> bool { + atom.variables_refs().contains(self) + } +} diff --git a/nemo-static-checks/src/static_checks/rules_properties.rs b/nemo-static-checks/src/static_checks/rules_properties.rs new file mode 100644 index 000000000..0f7c8de81 --- /dev/null +++ b/nemo-static-checks/src/static_checks/rules_properties.rs @@ -0,0 +1,339 @@ +//! Functionality that provides the static checks for a RuleSet. +use crate::static_checks::acyclicity_graphs::{JointAcyclicityGraph, WeakAcyclicityGraph}; +use crate::static_checks::msa::msa_execution_engine_from_handle; +use crate::static_checks::positions::PositionsByRuleAndVariables; +use crate::static_checks::rule_set::RuleSet; +use crate::static_checks::{positions::Positions, rule_properties::RuleProperties}; +use nemo::execution::DefaultExecutionEngine; +use nemo::rule_model::{components::tag::Tag, programs::handle::ProgramHandle}; + +/// This trait gives some static checks for some ruleset. +pub trait RulesProperties { + /// Determines if the ruleset is joinless. + fn is_joinless(&self) -> bool; + /// Determines if the ruleset is linear. + fn is_linear(&self) -> bool; + /// Determines if the ruleset is guarded. + fn is_guarded(&self) -> bool; + /// Determines if the ruleset is sticky. + fn is_sticky(&self) -> bool; + /// Determines if the ruleset is domain restricted. + fn is_domain_restricted(&self) -> bool; + /// Determines if the ruleset is frontier one. + fn is_frontier_one(&self) -> bool; + /// Determines if the ruleset is datalog. + fn is_datalog(&self) -> bool; + /// Determines if the ruleset is monadic. + fn is_monadic(&self) -> bool; + /// Determines if the ruleset is frontier guarded. + fn is_frontier_guarded(&self) -> bool; + /// Determines if the ruleset is weakly guarded. + fn is_weakly_guarded(&self) -> bool; + /// Determines if the ruleset is weakly fronier guarded. + fn is_weakly_frontier_guarded(&self) -> bool; + /// Determines if the ruleset is jointly guarded. + fn is_jointly_guarded(&self) -> bool; + /// Determines if the ruleset is jointly frontier guarded. + fn is_jointly_frontier_guarded(&self) -> bool; + /// Determines if the ruleset is weakly acyclic. + fn is_weakly_acyclic(&self) -> bool; + /// Determines if the ruleset is jointly acyclic. + fn is_jointly_acyclic(&self) -> bool; + /// Determines if the ruleset is weakly sticky. + fn is_weakly_sticky(&self) -> bool; + /// Determines if the ruleset is glut guarded. + fn is_glut_guarded(&self) -> bool; + /// Determines if the ruleset is glut frontier guarded. + fn is_glut_frontier_guarded(&self) -> bool; + /// Determines if the ruleset is shy. + fn is_shy(&self) -> bool; + /// Determines if the ruleset is mfa. + fn is_mfa(&self) -> bool; + /// Determines if the ruleset is msa. + fn is_msa(&self) -> impl std::future::Future; + /// Determines if the ruleset is dmfa. + fn is_dmfa(&self) -> bool; + /// Determines if the ruleset is rmfa. + fn is_rmfa(&self) -> bool; + /// Determines if the ruleset is mfc. + fn is_mfc(&self) -> bool; + /// Determines if the ruleset is dmfc. + fn is_dmfc(&self) -> bool; + /// Determines if the ruleset is drpc. + fn is_drpc(&self) -> bool; + /// Determines if the ruleset is rpc. + fn is_rpc(&self) -> bool; +} + +impl RulesProperties for RuleSet { + fn is_joinless(&self) -> bool { + self.0.iter().all(|rule| rule.is_joinless()) + } + + fn is_linear(&self) -> bool { + self.0.iter().all(|rule| rule.is_linear()) + } + + fn is_guarded(&self) -> bool { + self.0.iter().all(|rule| rule.is_guarded()) + } + + fn is_sticky(&self) -> bool { + self.build_and_check_sticky_marking().is_some() + } + + fn is_weakly_sticky(&self) -> bool { + self.build_and_check_weakly_sticky_marking().is_some() + } + + fn is_domain_restricted(&self) -> bool { + self.0.iter().all(|rule| rule.is_domain_restricted()) + } + + fn is_frontier_one(&self) -> bool { + self.0.iter().all(|rule| rule.is_frontier_one()) + } + + fn is_datalog(&self) -> bool { + self.0.iter().all(|rule| rule.is_datalog()) + } + + fn is_monadic(&self) -> bool { + self.0.iter().all(|rule| rule.is_monadic()) + } + + fn is_frontier_guarded(&self) -> bool { + self.0.iter().all(|rule| rule.is_frontier_guarded()) + } + + fn is_weakly_guarded(&self) -> bool { + let affected_positions: Positions = self.affected_positions(); + self.0 + .iter() + .all(|rule| rule.is_weakly_guarded(&affected_positions)) + } + + fn is_weakly_frontier_guarded(&self) -> bool { + let affected_positions: Positions = self.affected_positions(); + self.0 + .iter() + .all(|rule| rule.is_weakly_frontier_guarded(&affected_positions)) + } + + fn is_jointly_guarded(&self) -> bool { + let attacked_pos_by_ex_rule_and_vars: PositionsByRuleAndVariables = + self.attacked_positions_by_existential_rule_and_variables(); + self.0 + .iter() + .all(|rule| rule.is_jointly_guarded(&attacked_pos_by_ex_rule_and_vars)) + } + + fn is_jointly_frontier_guarded(&self) -> bool { + let attacked_pos_by_ex_rule_and_vars: PositionsByRuleAndVariables = + self.attacked_positions_by_existential_rule_and_variables(); + self.0 + .iter() + .all(|rule| rule.is_jointly_frontier_guarded(&attacked_pos_by_ex_rule_and_vars)) + } + + fn is_weakly_acyclic(&self) -> bool { + let we_ac_graph: WeakAcyclicityGraph = WeakAcyclicityGraph::new(self); + !we_ac_graph.contains_cycle_with_special_edge() + } + + fn is_jointly_acyclic(&self) -> bool { + let jo_ac_graph: JointAcyclicityGraph = JointAcyclicityGraph::new(self); + !jo_ac_graph.is_cyclic() + } + + fn is_glut_guarded(&self) -> bool { + let attacked_pos_by_cycle_rule_and_vars: PositionsByRuleAndVariables = + self.attacked_positions_by_cycle_rule_and_variables(); + self.0 + .iter() + .all(|rule| rule.is_glut_guarded(&attacked_pos_by_cycle_rule_and_vars)) + } + + fn is_glut_frontier_guarded(&self) -> bool { + let attacked_pos_by_cycle_rule_and_vars: PositionsByRuleAndVariables = + self.attacked_positions_by_cycle_rule_and_variables(); + self.0 + .iter() + .all(|rule| rule.is_glut_frontier_guarded(&attacked_pos_by_cycle_rule_and_vars)) + } + + fn is_shy(&self) -> bool { + let attacked_pos_by_existential_rule_and_vars: PositionsByRuleAndVariables = + self.attacked_positions_by_existential_rule_and_variables(); + self.0 + .iter() + .all(|rule| rule.is_shy(&attacked_pos_by_existential_rule_and_vars)) + } + + fn is_mfa(&self) -> bool { + unreachable!(); + } + + async fn is_msa(&self) -> bool { + unreachable!(); + // let mut msa_exec_eng: DefaultExecutionEngine = + // msa_execution_engine_from_rules(&self.0).await; + // msa_exec_eng.execute().await.expect("no errors possible"); + // let c_pred: Tag = Tag::from("_msa_C"); + // if msa_exec_eng + // .predicate_rows(&c_pred) + // .await + // .expect("no errors possible") + // .is_none() + // { + // return true; + // } + // false + } + + fn is_dmfa(&self) -> bool { + unreachable!(); + } + + fn is_rmfa(&self) -> bool { + unreachable!(); + } + + fn is_mfc(&self) -> bool { + unreachable!(); + } + + fn is_dmfc(&self) -> bool { + unreachable!(); + } + + fn is_drpc(&self) -> bool { + unreachable!(); + } + + fn is_rpc(&self) -> bool { + unreachable!(); + } +} + +impl RulesProperties for ProgramHandle { + fn is_joinless(&self) -> bool { + unreachable!(); + } + + fn is_linear(&self) -> bool { + unreachable!(); + } + + fn is_guarded(&self) -> bool { + unreachable!(); + } + + fn is_sticky(&self) -> bool { + unreachable!(); + } + + fn is_weakly_sticky(&self) -> bool { + unreachable!(); + } + + fn is_domain_restricted(&self) -> bool { + unreachable!(); + } + + fn is_frontier_one(&self) -> bool { + unreachable!(); + } + + fn is_datalog(&self) -> bool { + unreachable!(); + } + + fn is_monadic(&self) -> bool { + unreachable!(); + } + + fn is_frontier_guarded(&self) -> bool { + unreachable!(); + } + + fn is_weakly_guarded(&self) -> bool { + unreachable!(); + } + + fn is_weakly_frontier_guarded(&self) -> bool { + unreachable!(); + } + + fn is_jointly_guarded(&self) -> bool { + unreachable!(); + } + + fn is_jointly_frontier_guarded(&self) -> bool { + unreachable!(); + } + + fn is_weakly_acyclic(&self) -> bool { + unreachable!(); + } + + fn is_jointly_acyclic(&self) -> bool { + unreachable!(); + } + + fn is_glut_guarded(&self) -> bool { + unreachable!(); + } + + fn is_glut_frontier_guarded(&self) -> bool { + unreachable!(); + } + + fn is_shy(&self) -> bool { + unreachable!(); + } + + fn is_mfa(&self) -> bool { + unimplemented!(); + } + + async fn is_msa(&self) -> bool { + let mut msa_exec_eng: DefaultExecutionEngine = + msa_execution_engine_from_handle(self.clone()).await; + msa_exec_eng.execute().await.expect("no errors possible"); + let c_pred: Tag = Tag::from("_msa_C"); + if msa_exec_eng + .predicate_rows(&c_pred) + .await + .expect("no errors possible") + .is_none() + { + return true; + } + false + } + + fn is_dmfa(&self) -> bool { + unreachable!(); + } + + fn is_rmfa(&self) -> bool { + unreachable!(); + } + + fn is_mfc(&self) -> bool { + unreachable!(); + } + + fn is_dmfc(&self) -> bool { + unreachable!(); + } + + fn is_drpc(&self) -> bool { + unreachable!(); + } + + fn is_rpc(&self) -> bool { + unreachable!(); + } +} diff --git a/nemo-static-checks/tests/test.rs b/nemo-static-checks/tests/test.rs new file mode 100644 index 000000000..0bb28e55f --- /dev/null +++ b/nemo-static-checks/tests/test.rs @@ -0,0 +1,463 @@ +#![cfg(not(miri))] + +use assert_cmd::Command; +use std::{assert_eq, path::PathBuf, str::FromStr}; + +use dir_test::{Fixture, dir_test}; + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isDatalog", + glob: "*.rls", + postfix: "datalog_negative", +)] +fn datalog_negative(fixture: Fixture<&str>) { + test(fixture, false, "datalog") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isDatalog", + glob: "*.rls", + postfix: "datalog_positive", +)] +fn datalog_positive(fixture: Fixture<&str>) { + test(fixture, true, "datalog") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isDomainRestricted", + glob: "*.rls", + postfix: "domain_restricted_negative", +)] +fn domain_restricted_negative(fixture: Fixture<&str>) { + test(fixture, false, "domain-restricted") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isDomainRestricted", + glob: "*.rls", + postfix: "domain_restricted_positive", +)] +fn domain_restricted_positive(fixture: Fixture<&str>) { + test(fixture, true, "domain-restricted") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isFrontierGuarded", + glob: "*.rls", + postfix: "frontier_guarded_negative", +)] +fn frontier_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isFrontierGuarded", + glob: "*.rls", + postfix: "frontier_guarded_positive", +)] +fn frontier_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isFrontierOne", + glob: "*.rls", + postfix: "frontier_one_negative", +)] +fn frontier_one_negative(fixture: Fixture<&str>) { + test(fixture, false, "frontier-one") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isFrontierOne", + glob: "*.rls", + postfix: "frontier_one_positive", +)] +fn frontier_one_positive(fixture: Fixture<&str>) { + test(fixture, true, "frontier-one") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded", + glob: "*.rls", + postfix: "glut_frontier_guarded_negative", +)] +fn glut_frontier_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "glut-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded", + glob: "*.rls", + postfix: "glut_frontier_guarded_positive", +)] +fn glut_frontier_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "glut-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isGlutGuarded", + glob: "*.rls", + postfix: "glut_guarded_negative", +)] +fn glut_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "glut-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isGlutGuarded", + glob: "*.rls", + postfix: "glut_guarded_positive", +)] +fn glut_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "glut-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isGuarded", + glob: "*.rls", + postfix: "guarded_negative", +)] +fn guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isGuarded", + glob: "*.rls", + postfix: "guarded_positive", +)] +fn guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isJoinless", + glob: "*.rls", + postfix: "joinless_negative", +)] +fn joinless_negative(fixture: Fixture<&str>) { + test(fixture, false, "joinless") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isJoinless", + glob: "*.rls", + postfix: "joinless_positive", +)] +fn joinless_positive(fixture: Fixture<&str>) { + test(fixture, true, "joinless") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isJointlyAcyclic", + glob: "*.rls", + postfix: "jointly_acyclic_negative", +)] +fn jointly_acyclic_negative(fixture: Fixture<&str>) { + test(fixture, false, "jointly-acyclic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isJointlyAcyclic", + glob: "*.rls", + postfix: "jointly_acyclic_positive", +)] +fn jointly_acyclic_positive(fixture: Fixture<&str>) { + test(fixture, true, "jointly-acyclic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded", + glob: "*.rls", + postfix: "jointly_frontier_guarded_negative", +)] +fn jointly_frontier_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "jointly-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded", + glob: "*.rls", + postfix: "jointly_frontier_guarded_positive", +)] +fn jointly_frontier_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "jointly-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isJointlyGuarded", + glob: "*.rls", + postfix: "jointly_guarded_negative", +)] +fn jointly_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "jointly-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isJointlyGuarded", + glob: "*.rls", + postfix: "jointly_guarded_positive", +)] +fn jointly_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "jointly-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isLinear", + glob: "*.rls", + postfix: "linear_negative", +)] +fn linear_negative(fixture: Fixture<&str>) { + test(fixture, false, "linear") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isLinear", + glob: "*.rls", + postfix: "linear_positive", +)] +fn linear_positive(fixture: Fixture<&str>) { + test(fixture, true, "linear") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isMonadic", + glob: "*.rls", + postfix: "monadic_negative", +)] +fn monadic_negative(fixture: Fixture<&str>) { + test(fixture, false, "monadic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isMonadic", + glob: "*.rls", + postfix: "monadic_positive", +)] +fn monadic_positive(fixture: Fixture<&str>) { + test(fixture, true, "monadic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isShy", + glob: "*.rls", + postfix: "shy_negative", +)] +fn shy_negative(fixture: Fixture<&str>) { + test(fixture, false, "shy") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isShy", + glob: "*.rls", + postfix: "shy_positive", +)] +fn shy_positive(fixture: Fixture<&str>) { + test(fixture, true, "shy") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isSticky", + glob: "*.rls", + postfix: "sticky_negative", +)] +fn sticky_negative(fixture: Fixture<&str>) { + test(fixture, false, "sticky") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isSticky", + glob: "*.rls", + postfix: "sticky_positive", +)] +fn sticky_positive(fixture: Fixture<&str>) { + test(fixture, true, "sticky") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isWeaklyAcyclic", + glob: "*.rls", + postfix: "weakly_acyclic_negative", +)] +fn weakly_acyclic_negative(fixture: Fixture<&str>) { + test(fixture, false, "weakly-acyclic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isWeaklyAcyclic", + glob: "*.rls", + postfix: "weakly_acyclic_positive", +)] +fn weakly_acyclic_positive(fixture: Fixture<&str>) { + test(fixture, true, "weakly-acyclic") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded", + glob: "*.rls", + postfix: "weakly_frontier_guarded_negative", +)] +fn weakly_frontier_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "weakly-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded", + glob: "*.rls", + postfix: "weakly_frontier_guarded_positive", +)] +fn weakly_frontier_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "weakly-frontier-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isWeaklyGuarded", + glob: "*.rls", + postfix: "weakly_guarded_negative", +)] +fn weakly_guarded_negative(fixture: Fixture<&str>) { + test(fixture, false, "weakly-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isWeaklyGuarded", + glob: "*.rls", + postfix: "weakly_guarded_positive", +)] +fn weakly_guarded_positive(fixture: Fixture<&str>) { + test(fixture, true, "weakly-guarded") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isWeaklySticky", + glob: "*.rls", + postfix: "weakly_sticky_negative", +)] +fn weakly_sticky_negative(fixture: Fixture<&str>) { + test(fixture, false, "weakly-sticky") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isWeaklySticky", + glob: "*.rls", + postfix: "weakly_sticky_positive", +)] +fn weakly_sticky_positive(fixture: Fixture<&str>) { + test(fixture, true, "weakly-sticky") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/negative/isDmfa", + glob: "*.rls", + postfix: "msa_negative", +)] +fn msa_negative(fixture: Fixture<&str>) { + test(fixture, false, "msa") +} + +#[dir_test( + dir: "$CARGO_MANIFEST_DIR/../resources/testcases_static_checks/tests/positive/isDmfa", + glob: "*.rls", + postfix: "msa_positive", +)] +fn msa_positive(fixture: Fixture<&str>) { + test(fixture, true, "msa") +} + +struct TestCase<'a> { + file: PathBuf, + exp_res: String, + check: &'a str, +} + +impl<'a> TestCase<'a> { + fn new(file: PathBuf, exp_res: String, check: &'a str) -> Self { + Self { + file, + exp_res, + check, + } + } + + fn run(&self) -> Result<(), Box> { + let mut cmd = Command::cargo_bin("nemo-static-checks")?; + + let output = cmd + .current_dir("/Users/louis/kbs/nemo/") + .arg("-c") + .arg(self.check) + .arg(self.file.as_path()) + .output() + .expect("failed to execute"); + + assert_eq!( + str::from_utf8(&output.stdout).expect("").trim(), + self.exp_res.trim() + ); + + Ok(()) + } +} + +fn test(fixture: Fixture<&str>, exp_bool: bool, check: &str) { + let path = path_canonicalized(fixture.path()); + let test_case = TestCase::new(path, format!("{check}: {}\n", exp_bool), check); + test_case.run().unwrap(); +} + +fn path_canonicalized(path: &str) -> PathBuf { + PathBuf::from_str(path).unwrap().canonicalize().unwrap() +} + +// struct TestCase<'a, Input> { +// expected_result: bool, +// input: Input, +// static_check: &'a dyn Fn(&Input) -> bool, +// } +// +// impl<'a, Input: RulesProperties> TestCase<'a, Input> { +// fn test_from_rule_file( +// rule_file: PathBuf, +// expected_result: bool, +// static_check: &'a dyn Fn(&Input) -> bool, +// ) -> Result> { +// Ok(Self { +// expected_result, +// rule_set: run_until_rule_model(rule_file)?, +// static_check, +// }) +// } +// +// fn run(&self) -> Result<(), Box> { +// let func = self.static_check; +// assert_eq!(self.expected_result, func(&self.rule_set)); +// Ok(()) +// } +// } +// +// fn run_until_rule_model(file_path: PathBuf) -> Result> { +// let rule_file: RuleFile = RuleFile::load(file_path)?; +// let execution_parameters: ExecutionParameters = ExecutionParameters::default(); +// let (engine, _) = +// DefaultExecutionEngine::from_file(rule_file, execution_parameters)?.into_pair(); +// let program: &Program = engine.program(); +// let rule_set: RuleSet = RuleSet(program.all_rules()); +// Ok(rule_set) +// } +// +// fn path_canonicalized(path: &str) -> PathBuf { +// PathBuf::from_str(path).unwrap().canonicalize().unwrap() +// } +// +// fn test( +// fixture: Fixture<&str>, +// expected_result: bool, +// static_check: &dyn Fn(&Input) -> bool, +// ) { +// let path = path_canonicalized(fixture.path()); +// assert!(path.exists()); +// _ = env_logger::builder().is_test(true).try_init(); +// let test_case = TestCase::test_from_rule_file(path, expected_result, static_check).unwrap(); +// test_case.run().unwrap(); +// } diff --git a/nemo/Cargo.toml b/nemo/Cargo.toml index e22d7c8ee..6e431485c 100644 --- a/nemo/Cargo.toml +++ b/nemo/Cargo.toml @@ -60,6 +60,8 @@ itertools = "0.14.0" indexmap = "2.10.0" [dev-dependencies] +assert_cmd = "2.0" +dir-test = "0.2.1" env_logger = "*" assert_fs = "1.0" test-log = "0.2" diff --git a/nemo/src/rule_model/components/atom.rs b/nemo/src/rule_model/components/atom.rs index 5d69e756b..79745426c 100644 --- a/nemo/src/rule_model/components/atom.rs +++ b/nemo/src/rule_model/components/atom.rs @@ -1,6 +1,7 @@ //! This module defines an [Atom]. use std::{ + collections::HashSet, fmt::Display, hash::Hash, ops::{Deref, DerefMut, Index, IndexMut}, @@ -94,6 +95,15 @@ impl Atom { self.predicate.clone() } + pub fn predicate_ref(&self) -> &Tag { + &self.predicate + } + + /// Return the predicate of this atom as a reference with its length. + pub fn predicate_ref_and_len(&self) -> (&Tag, usize) { + (self.predicate_ref(), self.len()) + } + /// Return an iterator over the terms of this atom. pub fn terms(&self) -> impl Iterator { self.terms.iter() @@ -146,6 +156,22 @@ impl DerefMut for Atom { } } +/// This Impl-Block contains a method for an atom to get its universal variables. +impl Atom { + /// This method returns the universal Variables of an Atom. + pub fn universal_variables(&self) -> HashSet<&Variable> { + self.variables().filter(|var| var.is_universal()).collect() + } +} + +/// This Impl-Block contains a method for an atom to get its variables as a reference. +impl Atom { + /// Returns all the Variables of an Atom. + pub fn variables_refs(&self) -> HashSet<&Variable> { + self.variables().collect() + } +} + impl Display for Atom { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_fmt(format_args!("{}(", self.predicate))?; diff --git a/nemo/src/rule_model/components/fact.rs b/nemo/src/rule_model/components/fact.rs index b22f730a7..733b95e51 100644 --- a/nemo/src/rule_model/components/fact.rs +++ b/nemo/src/rule_model/components/fact.rs @@ -278,6 +278,17 @@ impl IterablePrimitives for Fact { } } +impl From<(&Tag, Vec)> for Fact { + fn from((predicate, terms): (&Tag, Vec)) -> Self { + Self { + origin: Origin::Created, + id: ProgramComponentId::default(), + predicate: predicate.clone(), + terms, + } + } +} + impl From for Fact { fn from(value: GroundAtom) -> Self { let origin = Origin::Created; diff --git a/nemo/src/rule_model/components/literal.rs b/nemo/src/rule_model/components/literal.rs index 04e0699c2..8303fb857 100644 --- a/nemo/src/rule_model/components/literal.rs +++ b/nemo/src/rule_model/components/literal.rs @@ -52,6 +52,24 @@ impl Literal { Literal::Operation(_) => None, } } + + /// Return the predicate (positive Atom | negative Atom) or None (Operation) of the + /// Literal as a reference + pub fn predicate_ref(&self) -> Option<&Tag> { + match self { + Literal::Positive(atom) | Literal::Negative(atom) => Some(atom.predicate_ref()), + Literal::Operation(_) => None, + } + } + + /// Return the predicate as a reference and its length (positive Atom | negative Atom) or None (Operation) of the + /// Literal + pub fn predicate_ref_and_len(&self) -> Option<(&Tag, usize)> { + match self { + Literal::Positive(atom) | Literal::Negative(atom) => Some(atom.predicate_ref_and_len()), + Literal::Operation(_) => None, + } + } } impl Display for Literal { diff --git a/nemo/src/rule_model/components/rule.rs b/nemo/src/rule_model/components/rule.rs index fc1e31caf..0d7c986f6 100644 --- a/nemo/src/rule_model/components/rule.rs +++ b/nemo/src/rule_model/components/rule.rs @@ -18,6 +18,7 @@ use super::{ atom::Atom, component_iterator, component_iterator_mut, literal::Literal, + tag::Tag, term::{ Term, primitive::{Primitive, variable::Variable}, @@ -151,6 +152,28 @@ impl Rule { &mut self.head } + pub fn existential_variables(&self) -> HashSet<&Variable> { + self.variables() + .filter(|var| var.is_existential()) + .collect() + } + + pub fn positive_variables_iter(&self) -> impl Iterator { + self.body_positive().flat_map(|atom| { + atom.terms() + .filter_map(|term| match term { + Term::Primitive(Primitive::Variable(variable)) => Some(variable), + _ => None, + }) + .filter(|variable| variable.is_universal() && variable.name().is_some()) + }) + } + + /// Return the set of variables that are bound in positive body atoms. + pub fn positive_variables(&self) -> HashSet<&Variable> { + self.positive_variables_iter().collect() + } + /// Return an iterator over all positive and negative [Atom]s /// contained in the body of this rule. pub fn body_atoms(&self) -> impl Iterator { @@ -166,6 +189,23 @@ impl Rule { self.head.iter().chain(self.body_atoms()) } + /// Return the predicates of all Literals (no Operations) of the Rule. + pub fn predicates_ref(&self) -> Vec<&Tag> { + self.body() + .iter() + .filter_map(|literal| literal.predicate_ref()) + .chain(self.head().iter().map(|atom| atom.predicate_ref())) + .collect() + } + + pub fn predicates_ref_and_lens(&self) -> Vec<(&Tag, usize)> { + self.body() + .iter() + .filter_map(|literal| literal.predicate_ref_and_len()) + .chain(self.head().iter().map(|atom| atom.predicate_ref_and_len())) + .collect() + } + /// Return an iterator over all [ImportClause]s /// that are evaluated as part of this rule. pub fn imports(&self) -> impl Iterator { @@ -177,24 +217,45 @@ impl Rule { self.imports.push(import); } - /// Return the set of variables that are bound in positive body atoms. - pub fn positive_variables(&self) -> HashSet<&Variable> { - let mut result = HashSet::new(); - - for literal in &self.body { - if let Literal::Positive(atom) = literal { - for term in atom.terms() { - if let Term::Primitive(Primitive::Variable(variable)) = term - && variable.is_universal() - && variable.name().is_some() - { - result.insert(variable); - } - } - } - } - - result + // /// Return the set of variables that are bound in positive body atoms. + // pub fn positive_variables(&self) -> HashSet<&Variable> { + // let mut result = HashSet::new(); + // + // for literal in &self.body { + // if let Literal::Positive(atom) = literal { + // for term in atom.terms() { + // if let Term::Primitive(Primitive::Variable(variable)) = term + // && variable.is_universal() + // && variable.name().is_some() + // { + // result.insert(variable); + // } + // } + // } + // } + // } + + pub fn frontier_variables(&self) -> HashSet<&Variable> { + let positive_body_variables: HashSet<&Variable> = self.positive_variables(); + let universal_head_variables: HashSet<&Variable> = self.universal_head_variables(); + positive_body_variables + .intersection(&universal_head_variables) + .copied() + .collect() + } + + fn universal_head_variables(&self) -> HashSet<&Variable> { + self.head().iter().fold( + HashSet::<&Variable>::new(), + |mut universal_head_variables: HashSet<&Variable>, atom| { + let un_vars_of_atom: HashSet<&Variable> = atom.universal_variables(); + un_vars_of_atom.into_iter().for_each(|var| { + universal_head_variables.insert(var); + }); + universal_head_variables + // universal_head_variables.insert_all_take_ret(un_vars_of_atom) + }, + ) } /// Return the set of variables that are bound by import statements diff --git a/nemo/src/rule_model/components/tag.rs b/nemo/src/rule_model/components/tag.rs index 1903b5ebb..ee9fcf7e9 100644 --- a/nemo/src/rule_model/components/tag.rs +++ b/nemo/src/rule_model/components/tag.rs @@ -54,6 +54,12 @@ impl Display for Tag { } } +impl Ord for Tag { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.tag.cmp(&other.tag) + } +} + impl PartialEq for Tag { fn eq(&self, other: &Self) -> bool { self.tag == other.tag @@ -64,7 +70,7 @@ impl Eq for Tag {} impl PartialOrd for Tag { fn partial_cmp(&self, other: &Self) -> Option { - self.tag.partial_cmp(&other.tag) + Some(self.tag.cmp(&other.tag)) } } diff --git a/nemo/src/rule_model/components/term/primitive/variable.rs b/nemo/src/rule_model/components/term/primitive/variable.rs index 46cce2d30..53ca43363 100644 --- a/nemo/src/rule_model/components/term/primitive/variable.rs +++ b/nemo/src/rule_model/components/term/primitive/variable.rs @@ -26,7 +26,7 @@ pub mod universal; /// /// A general placeholder that can be bound to any value. /// We distinguish [UniversalVariable] and [ExistentialVariable]. -#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)] pub enum Variable { /// Universal variable Universal(UniversalVariable), diff --git a/nemo/src/rule_model/components/term/primitive/variable/existential.rs b/nemo/src/rule_model/components/term/primitive/variable/existential.rs index 44c2ddb0f..71519892c 100644 --- a/nemo/src/rule_model/components/term/primitive/variable/existential.rs +++ b/nemo/src/rule_model/components/term/primitive/variable/existential.rs @@ -78,7 +78,13 @@ impl Eq for ExistentialVariable {} impl PartialOrd for ExistentialVariable { fn partial_cmp(&self, other: &Self) -> Option { - self.name.partial_cmp(&other.name) + Some(self.cmp(other)) + } +} + +impl Ord for ExistentialVariable { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.name.cmp(&other.name) } } diff --git a/nemo/src/rule_model/components/term/primitive/variable/global.rs b/nemo/src/rule_model/components/term/primitive/variable/global.rs index 8e6ca8f13..84da4967e 100644 --- a/nemo/src/rule_model/components/term/primitive/variable/global.rs +++ b/nemo/src/rule_model/components/term/primitive/variable/global.rs @@ -68,11 +68,17 @@ impl PartialEq for GlobalVariable { } } +impl Ord for GlobalVariable { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.name.cmp(&other.name) + } +} + impl Eq for GlobalVariable {} impl PartialOrd for GlobalVariable { fn partial_cmp(&self, other: &Self) -> Option { - self.name.partial_cmp(&other.name) + Some(self.cmp(other)) } } diff --git a/nemo/src/rule_model/components/term/primitive/variable/universal.rs b/nemo/src/rule_model/components/term/primitive/variable/universal.rs index 8b9893595..dd5742e22 100644 --- a/nemo/src/rule_model/components/term/primitive/variable/universal.rs +++ b/nemo/src/rule_model/components/term/primitive/variable/universal.rs @@ -102,7 +102,13 @@ impl Eq for UniversalVariable {} impl PartialOrd for UniversalVariable { fn partial_cmp(&self, other: &Self) -> Option { - self.name.partial_cmp(&other.name) + Some(self.cmp(other)) + } +} + +impl Ord for UniversalVariable { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.name.cmp(&other.name) } } diff --git a/nemo/src/rule_model/pipeline/commit.rs b/nemo/src/rule_model/pipeline/commit.rs index e03de5205..f00c9a8fd 100644 --- a/nemo/src/rule_model/pipeline/commit.rs +++ b/nemo/src/rule_model/pipeline/commit.rs @@ -38,7 +38,7 @@ pub struct ProgramCommit { impl ProgramCommit { /// Create a new [ProgramCommit] representing an empty program. - pub(crate) fn empty(pipeline: Rc, report: ValidationReport) -> Self { + pub fn empty(pipeline: Rc, report: ValidationReport) -> Self { Self { pipeline, new: Vec::default(), diff --git a/nemo/src/rule_model/pipeline/transformations.rs b/nemo/src/rule_model/pipeline/transformations.rs index 6f8e40362..b209d7206 100644 --- a/nemo/src/rule_model/pipeline/transformations.rs +++ b/nemo/src/rule_model/pipeline/transformations.rs @@ -1,12 +1,14 @@ //! This module defines [ProgramTransformation]s. pub mod active; +pub mod crit_instance; pub mod default; pub mod empty; pub mod exports; pub mod filter_imports; pub mod global; pub mod incremental; +pub mod msa; pub mod set_default_outputs; pub mod skolem; pub mod split; diff --git a/nemo/src/rule_model/pipeline/transformations/crit_instance.rs b/nemo/src/rule_model/pipeline/transformations/crit_instance.rs new file mode 100644 index 000000000..9f39138ab --- /dev/null +++ b/nemo/src/rule_model/pipeline/transformations/crit_instance.rs @@ -0,0 +1,49 @@ +use super::ProgramTransformation; +use crate::rule_model::components::{ + fact::Fact, rule::Rule, statement::Statement, tag::Tag, term::Term, +}; +use crate::rule_model::error::ValidationReport; +use crate::rule_model::programs::handle::ProgramHandle; +use crate::rule_model::programs::{ProgramRead, ProgramWrite}; + +use std::collections::HashSet; + +#[derive(Debug, Default, Clone, Copy)] +pub struct TransformationCriticalInstance {} + +fn critical_instance(rules: &[&Rule]) -> HashSet { + let star_term: Term = Term::from("__STAR__"); + let predicates_and_lens: HashSet<(&Tag, usize)> = rules + .iter() + .flat_map(|rule| rule.predicates_ref_and_lens()) + .collect(); + predicates_and_lens + .into_iter() + .map(|(pred, len)| { + let terms: Vec = vec![star_term.clone(); len]; + Fact::from((pred, terms)) + }) + .collect() +} + +impl ProgramTransformation for TransformationCriticalInstance { + fn apply(self, program: &ProgramHandle) -> Result { + let mut commit = program.fork(); + + let mut rules: Vec<&Rule> = Vec::new(); + + for stmt in program.statements() { + if let Statement::Rule(rule) = stmt { + rules.push(rule); + commit.keep(stmt) + } + } + + let crit_inst: HashSet = critical_instance(&rules); + crit_inst.into_iter().for_each(|fact| { + commit.add_fact(fact); + }); + + commit.submit() + } +} diff --git a/nemo/src/rule_model/pipeline/transformations/msa.rs b/nemo/src/rule_model/pipeline/transformations/msa.rs new file mode 100644 index 000000000..f921538ff --- /dev/null +++ b/nemo/src/rule_model/pipeline/transformations/msa.rs @@ -0,0 +1,177 @@ +use super::ProgramTransformation; +use crate::rule_model::components::{ + atom::Atom, + literal::Literal, + rule::Rule, + statement::Statement, + tag::Tag, + term::{ + Term, + primitive::{Primitive, variable::Variable}, + }, +}; +use crate::rule_model::error::ValidationReport; +use crate::rule_model::pipeline::commit::ProgramCommit; +use crate::rule_model::programs::handle::ProgramHandle; +use crate::rule_model::programs::{ProgramRead, ProgramWrite}; +use crate::rule_model::substitution::Substitution; + +use std::collections::HashSet; + +#[derive(Debug, Default, Clone, Copy)] +pub struct TransformationMSA {} + +fn f_preds_for_ex_vars(ex_vars_of_rule: &HashSet<&Variable>, rule_name: usize) -> Vec { + ex_vars_of_rule + .iter() + .enumerate() + .fold(Vec::::new(), |mut f_preds, (i, _)| { + let f_name: String = format!("_msa_F_{}_{}", rule_name, i); + let f_pred: Tag = Tag::new(f_name); + f_preds.push(f_pred); + f_preds + }) +} + +fn ex_vars_as_terms(ex_vars_of_rule: &HashSet<&Variable>) -> Vec { + ex_vars_of_rule + .iter() + .fold(Vec::::new(), |mut terms, var| { + let term: Term = Term::from((*var).clone()); + terms.push(term); + terms + }) +} + +fn modified_msa_rule( + rule: &Rule, + rule_name: usize, + s_pred: &Tag, + f_preds: &[Tag], + ex_vars_of_rule: HashSet<&Variable>, +) -> Rule { + let mut ret_val: Rule = rule.clone(); + let head_of_rule_mut: &mut Vec = ret_val.head_mut(); + let ex_vars_as_terms: Vec = ex_vars_as_terms(&ex_vars_of_rule); + let preds_zip_terms: Vec<(Tag, Term)> = f_preds.iter().cloned().zip(ex_vars_as_terms).collect(); + let frontier_vars: HashSet<&Variable> = rule.frontier_variables(); + + preds_zip_terms.into_iter().for_each(|(f_pred, ex_term)| { + let f_atom: Atom = Atom::new(f_pred, Vec::from([ex_term.clone()])); + head_of_rule_mut.push(f_atom); + frontier_vars.iter().for_each(|var| { + let var_as_term: Term = Term::from((*var).clone()); + let s_atom: Atom = Atom::new(s_pred.clone(), Vec::from([var_as_term, ex_term.clone()])); + head_of_rule_mut.push(s_atom); + }); + }); + let mut msa_sub_for_rule: Substitution = Substitution::default(); + ex_vars_of_rule.iter().enumerate().for_each(|(i, var)| { + let cons_name: String = format!("_msa_c_{}_{}", rule_name, i); + let cons: Term = Term::from(cons_name); + let var_as_prim: Primitive = Primitive::from((*var).clone()); + msa_sub_for_rule.insert(var_as_prim, cons); + }); + msa_sub_for_rule.apply(&mut ret_val); + ret_val +} + +fn generic_rules(s_pred: &Tag, d_pred: &Tag, x1_term: &Term, x2_term: &Term) -> (Rule, Rule) { + let x3_var: Variable = Variable::universal("_msa_x3"); + let x3_term: Term = Term::from(x3_var); + + let s_atom_1_2: Atom = Atom::new( + s_pred.clone(), + Vec::from([x1_term.clone(), x2_term.clone()]), + ); + let s_lit_1_2: Literal = Literal::Positive(s_atom_1_2); + + let s_atom_2_3: Atom = Atom::new( + s_pred.clone(), + Vec::from([x2_term.clone(), x3_term.clone()]), + ); + let s_lit_2_3: Literal = Literal::Positive(s_atom_2_3); + + let d_atom_1_2: Atom = Atom::new( + d_pred.clone(), + Vec::from([x1_term.clone(), x2_term.clone()]), + ); + let d_lit_1_2: Literal = Literal::Positive(d_atom_1_2.clone()); + + let d_atom_1_3: Atom = Atom::new( + d_pred.clone(), + Vec::from([x1_term.clone(), x3_term.clone()]), + ); + + let rule_s_to_d: Rule = Rule::new(Vec::from([d_atom_1_2]), Vec::from([s_lit_1_2])); + let rule_d_s_to_d: Rule = Rule::new(Vec::from([d_atom_1_3]), Vec::from([d_lit_1_2, s_lit_2_3])); + (rule_s_to_d, rule_d_s_to_d) +} + +fn f_msa_rules(f_preds: &[Tag], d_pred: &Tag, x1_term: &Term, x2_term: &Term) -> Vec { + let null_term: Term = Term::from("nullaryPredsNotAllowed"); + let c_pred: Tag = Tag::from("_msa_C"); + let c_atom: Atom = Atom::new(c_pred, Vec::from([null_term])); + + f_preds + .iter() + .fold(Vec::::new(), |mut f_msa_rules, f_pred| { + let f_atom_1: Atom = Atom::new(f_pred.clone(), Vec::from([x1_term.clone()])); + let f_lit_1: Literal = Literal::Positive(f_atom_1); + let f_atom_2: Atom = Atom::new(f_pred.clone(), Vec::from([x2_term.clone()])); + let f_lit_2: Literal = Literal::Positive(f_atom_2); + let d_atom_1_2: Atom = Atom::new( + d_pred.clone(), + Vec::from([x1_term.clone(), x2_term.clone()]), + ); + let d_lit_1_2: Literal = Literal::Positive(d_atom_1_2); + let f_msa_rule: Rule = Rule::new( + Vec::from([c_atom.clone()]), + Vec::from([f_lit_1, d_lit_1_2, f_lit_2]), + ); + f_msa_rules.push(f_msa_rule); + f_msa_rules + }) +} + +impl ProgramTransformation for TransformationMSA { + fn apply(self, program: &ProgramHandle) -> Result { + let mut commit: ProgramCommit = program.fork(); + + let s_pred: Tag = Tag::from("_msa_S"); + + let d_pred: Tag = Tag::from("_msa_D"); + + let x1_var: Variable = Variable::universal("_msa_x1"); + let x1_term: Term = Term::from(x1_var); + let x2_var: Variable = Variable::universal("_msa_x2"); + let x2_term: Term = Term::from(x2_var); + + let (rule_s_to_d, rule_d_s_to_d): (Rule, Rule) = + generic_rules(&s_pred, &d_pred, &x1_term, &x2_term); + commit.add_rule(rule_s_to_d); + commit.add_rule(rule_d_s_to_d); + + for (i, statement) in program.statements().enumerate() { + if let Statement::Rule(rule) = statement { + let ex_vars_of_rule: HashSet<&Variable> = rule.existential_variables(); + if ex_vars_of_rule.is_empty() { + commit.keep(statement); + continue; + } + let f_preds: Vec = f_preds_for_ex_vars(&ex_vars_of_rule, i); + let modified_msa_rule: Rule = + modified_msa_rule(rule, i, &s_pred, &f_preds, ex_vars_of_rule); + commit.add_rule(modified_msa_rule); + let f_msa_rules: Vec = f_msa_rules(&f_preds, &d_pred, &x1_term, &x2_term); + f_msa_rules.into_iter().for_each(|f_msa_rule| { + commit.add_rule(f_msa_rule); + }); + } else { + commit.keep(statement); + } + } + + commit.submit() + } +} diff --git a/nemo/src/rule_model/programs/handle.rs b/nemo/src/rule_model/programs/handle.rs index 82cb2677a..6734af723 100644 --- a/nemo/src/rule_model/programs/handle.rs +++ b/nemo/src/rule_model/programs/handle.rs @@ -19,7 +19,7 @@ use crate::{ }; /// Program-like object that is a spefic revision within [ProgramPipeline] -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct ProgramHandle { /// Reference to the [ProgramPipeline] pipeline: Rc, diff --git a/nemo/src/rule_model/programs/program.rs b/nemo/src/rule_model/programs/program.rs index 99f822771..2f81f8f3e 100644 --- a/nemo/src/rule_model/programs/program.rs +++ b/nemo/src/rule_model/programs/program.rs @@ -42,6 +42,15 @@ impl Program { } } + /// Returns all rules of the program + // TODO: NEEDED FOR TESTS OF STATIC CHECKS, SHOULD BE REMOVED + pub fn all_rules(&self) -> Vec { + (0..self.rules.len()).fold(Vec::::new(), |mut ret_val, index| { + ret_val.push(self.rule(index).clone()); + ret_val + }) + } + /// Remove all export statements pub fn clear_exports(&mut self) { self.statements.retain(|statement| !statement.is_export()); diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/a28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/b28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/c28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/d28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/e28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/e28plus.rls b/resources/testcases_static_checks/tests/negative/isDatalog/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/f28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/g28.rls b/resources/testcases_static_checks/tests/negative/isDatalog/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isDatalog/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isDatalog/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isDatalog/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isDatalog/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isDatalog/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isDatalog/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDatalog/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isDatalog/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDatalog/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDatalog/void-null-join.rls b/resources/testcases_static_checks/tests/negative/isDatalog/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDatalog/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/blockCheckNeedsConstantRemaping.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/blockCheckNeedsConstantRemaping.rlsd new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/blockCheckNeedsConstantRemaping.rlsd @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/c28.rls b/resources/testcases_static_checks/tests/negative/isDmfa/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/higherCyclicTermDeptchRequired.rls b/resources/testcases_static_checks/tests/negative/isDmfa/higherCyclicTermDeptchRequired.rls new file mode 100644 index 000000000..b817f3c08 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/higherCyclicTermDeptchRequired.rls @@ -0,0 +1,5 @@ +R(!Z, ?X) :- A(?X) . +A(?X) :- R(?X, ?Y), C(?Y) . + +@export R :- csv {} . +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isDmfa/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isDmfa/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isDmfa/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isDmfa/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDmfa/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r01.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r02.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r03.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r04.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r07.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r08.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r09.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/r09.rlsd new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r09.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r10.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/r10.rlsd new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r10.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r11.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/r11.rlsd new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r11.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r12.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/r12.rlsd new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r12.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r13.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r14.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/r14.rlsd new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r14.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r15.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/r16.rls b/resources/testcases_static_checks/tests/negative/isDmfa/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizza.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizza.rlsd new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizza.rlsd @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd b/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isDmfa/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..7e1b5ffb6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,4 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + +@export R :- csv {} . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDmfa/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r01.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r02.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r07.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r08.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r09.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r10.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r11.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r12.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r13.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r14.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r15.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/r16.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfa2/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isDmfa2/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfa2/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls b/resources/testcases_static_checks/tests/negative/isDmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls new file mode 120000 index 000000000..939d13b74 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls b/resources/testcases_static_checks/tests/negative/isDmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls new file mode 120000 index 000000000..fb0b5b3fe --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r01.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r02.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r03.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r04.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r05.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r06.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/r07.rls b/resources/testcases_static_checks/tests/negative/isDmfc/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDmfc/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isDmfc/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDmfc/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/c28.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28plus.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/projection.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/propagation.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/transitivity.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDomainRestricted/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isDomainRestricted/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDomainRestricted/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls new file mode 120000 index 000000000..939d13b74 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/criticalInstanceRequiredForUnblockableCheck.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/criticalInstanceRequiredForUnblockableCheck.rls new file mode 100644 index 000000000..755ce1333 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/criticalInstanceRequiredForUnblockableCheck.rls @@ -0,0 +1,2 @@ +A(!Z), R(?X, !Z) :- A(?X) . +R(?Z, ?Z) :- R(?X, ?Y), R(?Y, ?Z) . diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls new file mode 120000 index 000000000..fb0b5b3fe --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective.rls new file mode 120000 index 000000000..cd9ff4a77 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/inducedConstantMappingNeedsToBeInjective.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/minCardinalityFixed.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/minCardinalityFixed.rls new file mode 100644 index 000000000..859762592 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/minCardinalityFixed.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y), R_2(?X, ?Y), R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r01.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r02.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r03.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r04.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r05.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r06.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r07.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r08.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r09.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r10.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r11.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r12.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/r13.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/negative/isDrmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls b/resources/testcases_static_checks/tests/negative/isDrmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls new file mode 120000 index 000000000..a1a25aa9e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isDrmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/b28.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/c28.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/cross-product.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/d28.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/e28plus.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierGuarded/transitivity.rls b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/b28.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/c28.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/cross-product.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/d28.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/e28plus.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/g28.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/projection.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/transitivity.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isFrontierOne/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isFrontierOne/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isFrontierOne/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGlutFrontierGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGlutGuarded/f28.rls b/resources/testcases_static_checks/tests/negative/isGlutGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGlutGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGlutGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isGlutGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGlutGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGlutGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isGlutGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGlutGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/b28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/c28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/cross-product.rls b/resources/testcases_static_checks/tests/negative/isGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/d28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/e28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/e28plus.rls b/resources/testcases_static_checks/tests/negative/isGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/f28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/joinless.rls b/resources/testcases_static_checks/tests/negative/isGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/transitivity.rls b/resources/testcases_static_checks/tests/negative/isGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/a28.rls b/resources/testcases_static_checks/tests/negative/isJoinless/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/b28.rls b/resources/testcases_static_checks/tests/negative/isJoinless/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/c28.rls b/resources/testcases_static_checks/tests/negative/isJoinless/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/cq-entailment.rls b/resources/testcases_static_checks/tests/negative/isJoinless/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/d28.rls b/resources/testcases_static_checks/tests/negative/isJoinless/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/e28.rls b/resources/testcases_static_checks/tests/negative/isJoinless/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/e28plus.rls b/resources/testcases_static_checks/tests/negative/isJoinless/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isJoinless/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isJoinless/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isJoinless/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/propagation.rls b/resources/testcases_static_checks/tests/negative/isJoinless/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/simple-join.rls b/resources/testcases_static_checks/tests/negative/isJoinless/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isJoinless/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/transitivity.rls b/resources/testcases_static_checks/tests/negative/isJoinless/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isJoinless/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJoinless/void-null-join.rls b/resources/testcases_static_checks/tests/negative/isJoinless/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJoinless/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/c28.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28plus.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/f28.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyAcyclic/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyFrontierGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyGuarded/f28.rls b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isJointlyGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isJointlyGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/a28.rls b/resources/testcases_static_checks/tests/negative/isLinear/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/b28.rls b/resources/testcases_static_checks/tests/negative/isLinear/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/c28.rls b/resources/testcases_static_checks/tests/negative/isLinear/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/cq-entailment.rls b/resources/testcases_static_checks/tests/negative/isLinear/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/cross-product.rls b/resources/testcases_static_checks/tests/negative/isLinear/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/d28.rls b/resources/testcases_static_checks/tests/negative/isLinear/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/e28.rls b/resources/testcases_static_checks/tests/negative/isLinear/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/e28plus.rls b/resources/testcases_static_checks/tests/negative/isLinear/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/f28.rls b/resources/testcases_static_checks/tests/negative/isLinear/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/g28.rls b/resources/testcases_static_checks/tests/negative/isLinear/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isLinear/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isLinear/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/joinless.rls b/resources/testcases_static_checks/tests/negative/isLinear/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isLinear/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isLinear/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isLinear/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/propagation.rls b/resources/testcases_static_checks/tests/negative/isLinear/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isLinear/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/simple-join.rls b/resources/testcases_static_checks/tests/negative/isLinear/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isLinear/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/transitivity.rls b/resources/testcases_static_checks/tests/negative/isLinear/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isLinear/void-null-join.rls b/resources/testcases_static_checks/tests/negative/isLinear/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isLinear/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/b28.rls b/resources/testcases_static_checks/tests/negative/isMonadic/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/c28.rls b/resources/testcases_static_checks/tests/negative/isMonadic/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/cross-product.rls b/resources/testcases_static_checks/tests/negative/isMonadic/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/d28.rls b/resources/testcases_static_checks/tests/negative/isMonadic/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/e28plus.rls b/resources/testcases_static_checks/tests/negative/isMonadic/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/g28.rls b/resources/testcases_static_checks/tests/negative/isMonadic/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isMonadic/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isMonadic/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/joinless-with-existential.rls b/resources/testcases_static_checks/tests/negative/isMonadic/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isMonadic/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isMonadic/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/projection.rls b/resources/testcases_static_checks/tests/negative/isMonadic/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isMonadic/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isMonadic/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isMonadic/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/transitivity.rls b/resources/testcases_static_checks/tests/negative/isMonadic/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isMonadic/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isMonadic/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isMonadic/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/negative/isRmfa/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/higherCyclicTermDeptchRequired.rls b/resources/testcases_static_checks/tests/negative/isRmfa/higherCyclicTermDeptchRequired.rls new file mode 100644 index 000000000..31a241ec1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/higherCyclicTermDeptchRequired.rls @@ -0,0 +1,3 @@ +R(!Z, ?X) :- A(?X) . +A(?X) :- R(?X, ?Y), C(?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/minCardinality.rls b/resources/testcases_static_checks/tests/negative/isRmfa/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r01.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r02.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r03.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r10.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r11.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r12.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r13.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r14.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r15.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/r16.rls b/resources/testcases_static_checks/tests/negative/isRmfa/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/minCardinality.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r01.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r10.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r11.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r12.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r13.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r14.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r15.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/r16.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfa2/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls b/resources/testcases_static_checks/tests/negative/isRmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls new file mode 120000 index 000000000..939d13b74 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/criticalInstanceRequiredForUnblockableCheck.rls b/resources/testcases_static_checks/tests/negative/isRmfc/criticalInstanceRequiredForUnblockableCheck.rls new file mode 100644 index 000000000..755ce1333 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/criticalInstanceRequiredForUnblockableCheck.rls @@ -0,0 +1,2 @@ +A(!Z), R(?X, !Z) :- A(?X) . +R(?Z, ?Z) :- R(?X, ?Y), R(?Y, ?Z) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls b/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls new file mode 120000 index 000000000..fb0b5b3fe --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective.rls b/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective.rls new file mode 120000 index 000000000..cd9ff4a77 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/inducedConstantMappingNeedsToBeInjective.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/minCardinality.rls b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityDisj.rls b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityDisj.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityDisj.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityFixed.rls b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityFixed.rls new file mode 100644 index 000000000..859762592 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/minCardinalityFixed.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y), R_2(?X, ?Y), R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r01.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r02.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r03.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r04.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r05.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r06.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r07.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r08.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r09.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r10.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r11.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r12.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r13.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r14.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/r15.rls b/resources/testcases_static_checks/tests/negative/isRmfc/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/ruleRewritingRequired.rls b/resources/testcases_static_checks/tests/negative/isRmfc/ruleRewritingRequired.rls new file mode 100644 index 000000000..ea7765e22 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/ruleRewritingRequired.rls @@ -0,0 +1,5 @@ +A(?X), B(?X) :- P(?X) . +R(?X, !V) :- A(?X) . +R(?X, !W) :- B(?X) . +P(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isRmfc/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/uniqueConstantsRequired.rls b/resources/testcases_static_checks/tests/negative/isRmfc/uniqueConstantsRequired.rls new file mode 100644 index 000000000..1d4ec60b1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/uniqueConstantsRequired.rls @@ -0,0 +1,5 @@ +R(?Y, !Z) :- R(?X, ?Y) . +S(?Y, !Z) :- R(?X, ?Y) . +T(?Y, !Z) :- R(?X, ?Y) . +R(?X, ?Y) :- S(?X, ?Y), T(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls b/resources/testcases_static_checks/tests/negative/isRmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls new file mode 120000 index 000000000..a1a25aa9e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRmfc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls b/resources/testcases_static_checks/tests/negative/isRpc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls new file mode 120000 index 000000000..939d13b74 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/criticalInstanceRequiredForUnblockableCheck.rls b/resources/testcases_static_checks/tests/negative/isRpc/criticalInstanceRequiredForUnblockableCheck.rls new file mode 100644 index 000000000..755ce1333 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/criticalInstanceRequiredForUnblockableCheck.rls @@ -0,0 +1,2 @@ +A(!Z), R(?X, !Z) :- A(?X) . +R(?Z, ?Z) :- R(?X, ?Y), R(?Y, ?Z) . diff --git a/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls b/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls new file mode 120000 index 000000000..fb0b5b3fe --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective.rls b/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective.rls new file mode 120000 index 000000000..cd9ff4a77 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/inducedConstantMappingNeedsToBeInjective.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/minCardinalityFixed.rls b/resources/testcases_static_checks/tests/negative/isRpc/minCardinalityFixed.rls new file mode 100644 index 000000000..859762592 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/minCardinalityFixed.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y), R_2(?X, ?Y), R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r01.rls b/resources/testcases_static_checks/tests/negative/isRpc/r01.rls new file mode 120000 index 000000000..21c259350 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r01.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r01.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r02.rls b/resources/testcases_static_checks/tests/negative/isRpc/r02.rls new file mode 120000 index 000000000..b35bd6dd9 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r02.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r02.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r03.rls b/resources/testcases_static_checks/tests/negative/isRpc/r03.rls new file mode 120000 index 000000000..243163b09 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r03.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r03.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r04.rls b/resources/testcases_static_checks/tests/negative/isRpc/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r05.rls b/resources/testcases_static_checks/tests/negative/isRpc/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r06.rls b/resources/testcases_static_checks/tests/negative/isRpc/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r07.rls b/resources/testcases_static_checks/tests/negative/isRpc/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r08.rls b/resources/testcases_static_checks/tests/negative/isRpc/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r09.rls b/resources/testcases_static_checks/tests/negative/isRpc/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r10.rls b/resources/testcases_static_checks/tests/negative/isRpc/r10.rls new file mode 120000 index 000000000..f133dd41a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r10.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r10.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r11.rls b/resources/testcases_static_checks/tests/negative/isRpc/r11.rls new file mode 120000 index 000000000..f1aefd820 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r11.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r11.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r12.rls b/resources/testcases_static_checks/tests/negative/isRpc/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r13.rls b/resources/testcases_static_checks/tests/negative/isRpc/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/r15.rls b/resources/testcases_static_checks/tests/negative/isRpc/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isRpc/reorderPizza.rls b/resources/testcases_static_checks/tests/negative/isRpc/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/negative/isRpc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/negative/isRpc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/negative/isRpc/ruleRewritingRequired.rls b/resources/testcases_static_checks/tests/negative/isRpc/ruleRewritingRequired.rls new file mode 100644 index 000000000..ea7765e22 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/ruleRewritingRequired.rls @@ -0,0 +1,5 @@ +A(?X), B(?X) :- P(?X) . +R(?X, !V) :- A(?X) . +R(?X, !W) :- B(?X) . +P(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/negative/isRpc/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/negative/isRpc/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/negative/isRpc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls b/resources/testcases_static_checks/tests/negative/isRpc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls new file mode 120000 index 000000000..a1a25aa9e --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isRpc/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls @@ -0,0 +1 @@ +../../../tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/g28.rls b/resources/testcases_static_checks/tests/negative/isShy/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isShy/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isShy/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isShy/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isShy/void-null-join.rls b/resources/testcases_static_checks/tests/negative/isShy/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isShy/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/a28.rls b/resources/testcases_static_checks/tests/negative/isSticky/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/b28.rls b/resources/testcases_static_checks/tests/negative/isSticky/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/c28.rls b/resources/testcases_static_checks/tests/negative/isSticky/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/cq-entailment.rls b/resources/testcases_static_checks/tests/negative/isSticky/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/d28.rls b/resources/testcases_static_checks/tests/negative/isSticky/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/e28.rls b/resources/testcases_static_checks/tests/negative/isSticky/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/e28plus.rls b/resources/testcases_static_checks/tests/negative/isSticky/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/non-sticky-projection.rls b/resources/testcases_static_checks/tests/negative/isSticky/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/negative/isSticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isSticky/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/propagation.rls b/resources/testcases_static_checks/tests/negative/isSticky/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/transitivity.rls b/resources/testcases_static_checks/tests/negative/isSticky/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isSticky/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isSticky/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isSticky/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/a28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/b28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/c28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/d28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28plus.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/f28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/inf-chain.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyAcyclic/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/b28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/d28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyFrontierGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/b28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/c28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/d28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28plus.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/f28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/g28.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/pseudo-grid.rls b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklyGuarded/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/b28.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/c28.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/d28.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28plus.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/negative/isWeaklySticky/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/negative/isWeaklySticky/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/negative/isWeaklySticky/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isDatalog/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/cross-product.rls b/resources/testcases_static_checks/tests/positive/isDatalog/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/joinless.rls b/resources/testcases_static_checks/tests/positive/isDatalog/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/projection.rls b/resources/testcases_static_checks/tests/positive/isDatalog/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/propagation.rls b/resources/testcases_static_checks/tests/positive/isDatalog/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/simple-join.rls b/resources/testcases_static_checks/tests/positive/isDatalog/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/transitivity.rls b/resources/testcases_static_checks/tests/positive/isDatalog/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDatalog/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/a28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/b28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isDmfa/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/cross-product.rls b/resources/testcases_static_checks/tests/positive/isDmfa/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/d28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/e28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/e28plus.rls b/resources/testcases_static_checks/tests/positive/isDmfa/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/f28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/g28.rls b/resources/testcases_static_checks/tests/positive/isDmfa/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isDmfa/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/joinless.rls b/resources/testcases_static_checks/tests/positive/isDmfa/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isDmfa/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isDmfa/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isDmfa/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/projection.rls b/resources/testcases_static_checks/tests/positive/isDmfa/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/propagation.rls b/resources/testcases_static_checks/tests/positive/isDmfa/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/r05.rlsd b/resources/testcases_static_checks/tests/positive/isDmfa/r05.rlsd new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/r05.rlsd @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/r06.rls b/resources/testcases_static_checks/tests/positive/isDmfa/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizza.rlsd b/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizza.rlsd new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizza.rlsd @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd b/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/reorderPizzaWithMoreDatalogRules.rlsd @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/simple-join.rls b/resources/testcases_static_checks/tests/positive/isDmfa/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isDmfa/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/transitivity.rls b/resources/testcases_static_checks/tests/positive/isDmfa/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isDmfa/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa2/higherCyclicTermDeptchRequired.rls b/resources/testcases_static_checks/tests/positive/isDmfa2/higherCyclicTermDeptchRequired.rls new file mode 100644 index 000000000..31a241ec1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa2/higherCyclicTermDeptchRequired.rls @@ -0,0 +1,3 @@ +R(!Z, ?X) :- A(?X) . +A(?X) :- R(?X, ?Y), C(?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDmfa2/r05.rls b/resources/testcases_static_checks/tests/positive/isDmfa2/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa2/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa2/r06.rls b/resources/testcases_static_checks/tests/positive/isDmfa2/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa2/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfa2/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/00114-modified.owl.rls b/resources/testcases_static_checks/tests/positive/isDmfc/00114-modified.owl.rls new file mode 100644 index 000000000..7c595bcfe --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/00114-modified.owl.rls @@ -0,0 +1,9 @@ +(?X, !Z), (!Z) :- (?X) . +(?X, !Z), (!Z) :- (?X) . +(?Y) :- (?Y, ?X), (?X) . +(?Y) :- (?Y, ?X), (?X) . +(?X) :- (?X), (?X) . +(?X) :- (?X), (?X) . +(?X) :- (?X) . +(?X, ?Y) :- (?Y, ?X) . +(?X, ?Y) :- (?Y, ?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/DmfcAndRmfa.rls b/resources/testcases_static_checks/tests/positive/isDmfc/DmfcAndRmfa.rls new file mode 100644 index 000000000..03fea70d7 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/DmfcAndRmfa.rls @@ -0,0 +1 @@ +P(?X, !Z), P(!Z, ?X) :- P(?Y, ?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/positive/isDmfc/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/minCardinality.rls b/resources/testcases_static_checks/tests/positive/isDmfc/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/minCardinalityWithoutBackwardsRule.rls b/resources/testcases_static_checks/tests/positive/isDmfc/minCardinalityWithoutBackwardsRule.rls new file mode 100644 index 000000000..60ce46553 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/minCardinalityWithoutBackwardsRule.rls @@ -0,0 +1,13 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r08.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r09.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r12.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r12.rls new file mode 120000 index 000000000..bafc7079d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r12.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r12.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r13.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r13.rls new file mode 120000 index 000000000..d7319513e --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r13.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r13.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r14.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r15.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/r16.rls b/resources/testcases_static_checks/tests/positive/isDmfc/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDmfc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/a28.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/b28.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/cross-product.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/d28.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/f28.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/g28.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/simple-join.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDomainRestricted/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isDomainRestricted/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDomainRestricted/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinality.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinalityWithoutBackwardsRule.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinalityWithoutBackwardsRule.rls new file mode 100644 index 000000000..60ce46553 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/minCardinalityWithoutBackwardsRule.rls @@ -0,0 +1,13 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/r14.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/r15.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/r15.rls new file mode 120000 index 000000000..e2471e221 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/r15.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r15.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/r16.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/ruleRewritingRequired.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/ruleRewritingRequired.rls new file mode 100644 index 000000000..ea7765e22 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/ruleRewritingRequired.rls @@ -0,0 +1,5 @@ +A(?X), B(?X) :- P(?X) . +R(?X, !V) :- A(?X) . +R(?X, !W) :- B(?X) . +P(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isDrmfc/uniqueConstantsRequired.rls b/resources/testcases_static_checks/tests/positive/isDrmfc/uniqueConstantsRequired.rls new file mode 100644 index 000000000..1d4ec60b1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isDrmfc/uniqueConstantsRequired.rls @@ -0,0 +1,5 @@ +R(?Y, !Z) :- R(?X, ?Y) . +S(?Y, !Z) :- R(?X, ?Y) . +T(?Y, !Z) :- R(?X, ?Y) . +R(?X, ?Y) :- S(?X, ?Y), T(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/f28.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/a28.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/e28.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/f28.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/joinless.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/propagation.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/simple-join.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isFrontierOne/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isFrontierOne/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isFrontierOne/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/b28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/c28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/d28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28plus.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/f28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/g28.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutFrontierGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/b28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/c28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/d28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28plus.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/g28.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-guadedness.rls new file mode 120000 index 000000000..cde0336dc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGlutGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isGlutGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGlutGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/cross-product.rls b/resources/testcases_static_checks/tests/positive/isJoinless/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/f28.rls b/resources/testcases_static_checks/tests/positive/isJoinless/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/g28.rls b/resources/testcases_static_checks/tests/positive/isJoinless/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isJoinless/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/positive/isJoinless/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isJoinless/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/joinless.rls b/resources/testcases_static_checks/tests/positive/isJoinless/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isJoinless/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/projection.rls b/resources/testcases_static_checks/tests/positive/isJoinless/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/pseudo-grid.rls b/resources/testcases_static_checks/tests/positive/isJoinless/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJoinless/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isJoinless/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJoinless/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/a28.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/b28.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cross-product.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/d28.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/g28.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/propagation.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/simple-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/transitivity.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyAcyclic/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/b28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/c28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/d28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28plus.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/f28.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyFrontierGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/b28.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/c28.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/d28.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28plus.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isJointlyGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isJointlyGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isLinear/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isLinear/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isLinear/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isLinear/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isLinear/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isLinear/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isLinear/projection.rls b/resources/testcases_static_checks/tests/positive/isLinear/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isLinear/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isLinear/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isLinear/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isLinear/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isLinear/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isLinear/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isLinear/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/a28.rls b/resources/testcases_static_checks/tests/positive/isMonadic/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isMonadic/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/e28.rls b/resources/testcases_static_checks/tests/positive/isMonadic/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/f28.rls b/resources/testcases_static_checks/tests/positive/isMonadic/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/joinless.rls b/resources/testcases_static_checks/tests/positive/isMonadic/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/propagation.rls b/resources/testcases_static_checks/tests/positive/isMonadic/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/simple-join.rls b/resources/testcases_static_checks/tests/positive/isMonadic/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isMonadic/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isMonadic/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isMonadic/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/DmfcAndRmfa.rls b/resources/testcases_static_checks/tests/positive/isRmfa/DmfcAndRmfa.rls new file mode 100644 index 000000000..03fea70d7 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/DmfcAndRmfa.rls @@ -0,0 +1 @@ +P(?X, !Z), P(!Z, ?X) :- P(?Y, ?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/minCardinalityFixed.rls b/resources/testcases_static_checks/tests/positive/isRmfa/minCardinalityFixed.rls new file mode 100644 index 000000000..859762592 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/minCardinalityFixed.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y), R_2(?X, ?Y), R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r04.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r05.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r06.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r07.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r08.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/r09.rls b/resources/testcases_static_checks/tests/positive/isRmfa/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/positive/isRmfa/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/DmfcAndRmfa.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/DmfcAndRmfa.rls new file mode 100644 index 000000000..03fea70d7 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/DmfcAndRmfa.rls @@ -0,0 +1 @@ +P(?X, !Z), P(!Z, ?X) :- P(?Y, ?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/higherCyclicTermDeptchRequired.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/higherCyclicTermDeptchRequired.rls new file mode 100644 index 000000000..31a241ec1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/higherCyclicTermDeptchRequired.rls @@ -0,0 +1,3 @@ +R(!Z, ?X) :- A(?X) . +A(?X) :- R(?X, ?Y), C(?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/minCardinalityFixed.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/minCardinalityFixed.rls new file mode 100644 index 000000000..859762592 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/minCardinalityFixed.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y), R_2(?X, ?Y), R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r04.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r04.rls new file mode 120000 index 000000000..ad4a8cbfd --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r04.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r04.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r05.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r05.rls new file mode 120000 index 000000000..926e09446 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r05.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r05.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r06.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r06.rls new file mode 120000 index 000000000..df3d00e18 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r06.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r06.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r07.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r07.rls new file mode 120000 index 000000000..ce7adc9d1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r07.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r07.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r08.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r08.rls new file mode 120000 index 000000000..ed85cbce6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r08.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r08.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/r09.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/r09.rls new file mode 120000 index 000000000..520301ad4 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/r09.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r09.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizza.rls new file mode 100644 index 000000000..2b6892061 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizza.rls @@ -0,0 +1,2 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +LastForToday(?Y) :- NextOrder(?X, ?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..0ae837dad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +B(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRmfa2/terminatingNotDmfaButRmfa.rls b/resources/testcases_static_checks/tests/positive/isRmfa2/terminatingNotDmfaButRmfa.rls new file mode 100644 index 000000000..4428f2a5c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfa2/terminatingNotDmfaButRmfa.rls @@ -0,0 +1,3 @@ +P(!Z, ?X), P(?X, !Z) :- R(?X, ?Y, ?W, ?V, ?U) . +R(?X, ?Y, ?W, ?V, ?U) :- P(?X, ?Y), R(?Y, ?W, ?V, ?U, ?T), C(?T) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfc/minCardinalityWithoutBackwardsRule.rls b/resources/testcases_static_checks/tests/positive/isRmfc/minCardinalityWithoutBackwardsRule.rls new file mode 100644 index 000000000..60ce46553 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfc/minCardinalityWithoutBackwardsRule.rls @@ -0,0 +1,13 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRmfc/r16.rls b/resources/testcases_static_checks/tests/positive/isRmfc/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRmfc/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRpc/blockCheckNeedsConstantRemaping.rls b/resources/testcases_static_checks/tests/positive/isRpc/blockCheckNeedsConstantRemaping.rls new file mode 100644 index 000000000..43b3941d6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/blockCheckNeedsConstantRemaping.rls @@ -0,0 +1 @@ +R(?X, !Z), P(!Z) | Q(?X) :- P(?X), Q(?Y) . diff --git a/resources/testcases_static_checks/tests/positive/isRpc/minCardinality.rls b/resources/testcases_static_checks/tests/positive/isRpc/minCardinality.rls new file mode 100644 index 000000000..5dfda24fa --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/minCardinality.rls @@ -0,0 +1,14 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R_1(?X, ?Y) | R_2(?X, ?Y) | R_3(?X, ?Y) :- R(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRpc/minCardinalityWithoutBackwardsRule.rls b/resources/testcases_static_checks/tests/positive/isRpc/minCardinalityWithoutBackwardsRule.rls new file mode 100644 index 000000000..60ce46553 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/minCardinalityWithoutBackwardsRule.rls @@ -0,0 +1,13 @@ +R_1(?X, !Z) :- A(?X) . +R_2(?X, !Z) :- A(?X) . +R_3(?X, !Z) :- A(?X) . +R(?X, ?Y) :- R_1(?X, ?Y) . +R(?X, ?Y) :- R_2(?X, ?Y) . +R(?X, ?Y) :- R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_2(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_1(?X, ?Y), R_3(?X, ?Y) . +bottomObjectProperty(?X, ?Y) :- R_2(?X, ?Y), R_3(?X, ?Y) . +R(?Y, ?X) :- R(?X, ?Y) . + +A(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isRpc/r14.rls b/resources/testcases_static_checks/tests/positive/isRpc/r14.rls new file mode 120000 index 000000000..a7b00b828 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/r14.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r14.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRpc/r16.rls b/resources/testcases_static_checks/tests/positive/isRpc/r16.rls new file mode 120000 index 000000000..a21dd0f78 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/r16.rls @@ -0,0 +1 @@ +../../../tests_common_data/from-evaluation-section/r16.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isRpc/reorderPizza.rls b/resources/testcases_static_checks/tests/positive/isRpc/reorderPizza.rls new file mode 100644 index 000000000..7c30b8d53 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/reorderPizza.rls @@ -0,0 +1 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRpc/reorderPizzaWithMoreDatalogRules.rls b/resources/testcases_static_checks/tests/positive/isRpc/reorderPizzaWithMoreDatalogRules.rls new file mode 100644 index 000000000..d6d708a73 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/reorderPizzaWithMoreDatalogRules.rls @@ -0,0 +1,6 @@ +NextOrder(?X, !Z), Pizza(!Z) | LastForToday(?X) :- Pizza(?X) . +A(?Y) :- NextOrder(?X, ?Y) . +D(?X) :- A(?X) . +LastForToday(?X) :- B(?X) . +C(?X) :- A(?X) . +A(?X) :- C(?X) . diff --git a/resources/testcases_static_checks/tests/positive/isRpc/uniqueConstantsRequired.rls b/resources/testcases_static_checks/tests/positive/isRpc/uniqueConstantsRequired.rls new file mode 100644 index 000000000..1d4ec60b1 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isRpc/uniqueConstantsRequired.rls @@ -0,0 +1,5 @@ +R(?Y, !Z) :- R(?X, ?Y) . +S(?Y, !Z) :- R(?X, ?Y) . +T(?Y, !Z) :- R(?X, ?Y) . +R(?X, ?Y) :- S(?X, ?Y), T(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests/positive/isShy/a28.rls b/resources/testcases_static_checks/tests/positive/isShy/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/b28.rls b/resources/testcases_static_checks/tests/positive/isShy/b28.rls new file mode 120000 index 000000000..d593b8939 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/b28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/b28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/c28.rls b/resources/testcases_static_checks/tests/positive/isShy/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isShy/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/cross-product.rls b/resources/testcases_static_checks/tests/positive/isShy/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/d28.rls b/resources/testcases_static_checks/tests/positive/isShy/d28.rls new file mode 120000 index 000000000..282cf14fc --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/d28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/d28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/e28.rls b/resources/testcases_static_checks/tests/positive/isShy/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/e28plus.rls b/resources/testcases_static_checks/tests/positive/isShy/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/f28.rls b/resources/testcases_static_checks/tests/positive/isShy/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isShy/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isShy/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/joinless.rls b/resources/testcases_static_checks/tests/positive/isShy/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isShy/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isShy/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isShy/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/projection.rls b/resources/testcases_static_checks/tests/positive/isShy/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/propagation.rls b/resources/testcases_static_checks/tests/positive/isShy/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isShy/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/simple-join.rls b/resources/testcases_static_checks/tests/positive/isShy/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isShy/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/transitivity.rls b/resources/testcases_static_checks/tests/positive/isShy/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isShy/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isShy/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isShy/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/cross-product.rls b/resources/testcases_static_checks/tests/positive/isSticky/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/f28.rls b/resources/testcases_static_checks/tests/positive/isSticky/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/g28.rls b/resources/testcases_static_checks/tests/positive/isSticky/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isSticky/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/positive/isSticky/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isSticky/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/joinless.rls b/resources/testcases_static_checks/tests/positive/isSticky/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isSticky/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/projection.rls b/resources/testcases_static_checks/tests/positive/isSticky/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/pseudo-grid.rls b/resources/testcases_static_checks/tests/positive/isSticky/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isSticky/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/simple-join.rls b/resources/testcases_static_checks/tests/positive/isSticky/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isSticky/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isSticky/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isSticky/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isSticky/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cross-product.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/g28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/propagation.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/simple-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/transitivity.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyAcyclic/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/c28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/c28.rls new file mode 120000 index 000000000..18451572c --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/c28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/c28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28.rls new file mode 120000 index 000000000..8cce7481a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28plus.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28plus.rls new file mode 120000 index 000000000..6024f5043 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/e28plus.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/e28plus.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/f28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyFrontierGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/a28.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cross-product.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-2.rls new file mode 120000 index 000000000..a0b1def7a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/oblivious-non-terminating-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/propagation.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/simple-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/transitivity.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unrestricted-join-quaternary-ladder.rls new file mode 120000 index 000000000..a279a2de0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklyGuarded/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/a28.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/a28.rls new file mode 120000 index 000000000..db0ebbab0 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/a28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/a28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/cq-entailment.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/cq-entailment.rls new file mode 120000 index 000000000..84838422a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/cq-entailment.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cq-entailment.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/cross-product.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/cross-product.rls new file mode 120000 index 000000000..a007c2793 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/cross-product.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/cross-product.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/f28.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/f28.rls new file mode 120000 index 000000000..a38301a8b --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/f28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/f28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/g28.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/g28.rls new file mode 120000 index 000000000..8f6b85f9d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/g28.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/g28.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/inf-chain.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/inf-chain.rls new file mode 120000 index 000000000..28e1d4223 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/inf-chain.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/inf-chain.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-non-terminating.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-non-terminating.rls new file mode 120000 index 000000000..3a3bcc4cf --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-non-terminating.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-non-terminating.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-with-existential.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-with-existential.rls new file mode 120000 index 000000000..19140d0ca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless-with-existential.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless-with-existential.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless.rls new file mode 120000 index 000000000..0d93dc191 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joinless.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joinless.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 120000 index 000000000..4fcac9cc5 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/non-sticky-projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/non-sticky-projection.rls new file mode 120000 index 000000000..bbdd35be6 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/non-sticky-projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/non-sticky-projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..367192cb2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/oblivious-non-terminating-1.rls new file mode 120000 index 000000000..fd6d682c2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/oblivious-non-terminating-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/projection.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/projection.rls new file mode 120000 index 000000000..b833fdeca --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/projection.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/projection.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/propagation.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/propagation.rls new file mode 120000 index 000000000..76af27346 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/propagation.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/propagation.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/pseudo-grid.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/pseudo-grid.rls new file mode 120000 index 000000000..dc182a0ad --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/pseudo-grid.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/pseudo-grid.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/quaternary-ladder.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/quaternary-ladder.rls new file mode 120000 index 000000000..63ec6044a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/quaternary-ladder.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/quaternary-ladder.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/simple-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/simple-join.rls new file mode 120000 index 000000000..a60a0e7b2 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/simple-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/simple-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 120000 index 000000000..63e60160d --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/transitivity.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/transitivity.rls new file mode 120000 index 000000000..3a6d38b97 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/transitivity.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/transitivity.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-1.rls new file mode 120000 index 000000000..c2dfcbe8a --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-1.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-2.rls new file mode 120000 index 000000000..b22814859 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/unguarded-cq-entailment-2.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests/positive/isWeaklySticky/void-null-join.rls b/resources/testcases_static_checks/tests/positive/isWeaklySticky/void-null-join.rls new file mode 120000 index 000000000..bcc003530 --- /dev/null +++ b/resources/testcases_static_checks/tests/positive/isWeaklySticky/void-null-join.rls @@ -0,0 +1 @@ +../../../tests_common_data/rule-classification-examples/void-null-join.rls \ No newline at end of file diff --git a/resources/testcases_static_checks/tests_common_data/.DS_Store b/resources/testcases_static_checks/tests_common_data/.DS_Store new file mode 100644 index 000000000..10d221df9 Binary files /dev/null and b/resources/testcases_static_checks/tests_common_data/.DS_Store differ diff --git a/resources/testcases_static_checks/tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls b/resources/testcases_static_checks/tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls new file mode 100644 index 000000000..98642f47c --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/critical-examples/allowingRuleApplicationsWithOnlyConstantsInFrontierBreaksMfc2.rls @@ -0,0 +1,6 @@ +S(?Y, ?Z, !W) :- R(?X, ?Y, ?Z), B(?V) . +T(?V, !W) :- B(?V) . +P(?X, ?W, ?Z) :- S(?X, ?Y, ?Z), T(?V, ?W) . +R(?X, ?Y, ?Z) | A(?Z, ?Y) :- P(?X, ?Y, ?Z) . +A(?Y, ?X) :- P(?X, ?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls b/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls new file mode 100644 index 000000000..b8b5ecf3f --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective-skolemVersion.rls @@ -0,0 +1,5 @@ +R(?X, !Z), S(?Y, !Z) :- P(?X, ?Y) . +T(?Y, !Z) | T(?Y, ?X) :- R(?X, ?Y) . +T(?Y, ?X) :- R(?X, ?Y), S(?X, ?Y) . +P(?Y, ?Y) :- T(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls b/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls new file mode 100644 index 000000000..d70b91fde --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/critical-examples/inducedConstantMappingNeedsToBeInjective.rls @@ -0,0 +1,5 @@ +R(?X, !Z), S(?Y, !Z) :- P(?X, ?Y) . +T(?Y, !Z) :- R(?X, ?Y) . +T(?Y, ?X) :- R(?X, ?Y), S(?X, ?Y) . +P(?Y, ?Y) :- T(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls b/resources/testcases_static_checks/tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls new file mode 100644 index 000000000..2ef5d0d8d --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/critical-examples/useOfUniqueConstantsOrCriticalRuleConstantsInUnblockabilityInstancePreventsDetectionOfCyclicityForRestrictedChase.rls @@ -0,0 +1,4 @@ +T(!W), S(?Y, ?Z, !W) :- R(?X, ?Y, ?Z) . +P(?X, ?W) :- S(?X, ?Y, ?Z), T(?W) . +P(?X, ?X), R(!V, ?Y, ?Y) :- P(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r01.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r01.rls new file mode 100644 index 000000000..724606ea2 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r01.rls @@ -0,0 +1,5 @@ +R(?X, !Y), B(!Y) :- A(?X) . +A(?Y) :- R(?X, ?Y), B(?X) . + +@export A :- csv {} . +@export R :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r02.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r02.rls new file mode 100644 index 000000000..5c2002569 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r02.rls @@ -0,0 +1,6 @@ +R(?X, !Y), B(!Y) :- A(?X) . +A(?Y) :- R(?X, ?Y), B(?X) . +R(?Y, ?X) :- R(?X, ?Y) . + +@export R :- csv {} . +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r03.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r03.rls new file mode 100644 index 000000000..cc2511efd --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r03.rls @@ -0,0 +1,5 @@ +R(?X, !Y) :- A(?X) . +A(?Y) :- R(?X, ?Y), C(?X) . + +@export R :- csv {} . +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r04.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r04.rls new file mode 100644 index 000000000..740be6f35 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r04.rls @@ -0,0 +1,6 @@ +R(?X, !Y) :- A(?X) . +A(?Y) :- R(?X, ?Y), C(?X) . +R(?Y, ?X) :- R(?X, ?Y) . + +@export R :- csv {} . +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r05.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r05.rls new file mode 100644 index 000000000..c412546a2 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r05.rls @@ -0,0 +1,4 @@ +R(?X, !Z), B(!Z) :- A(?X) . +A(?X) | B(?X) :- P(?X) . +P(?X) :- B(?X) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r06.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r06.rls new file mode 100644 index 000000000..2cdd2bfc7 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r06.rls @@ -0,0 +1 @@ +B(?X) :- A(?X) . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r07.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r07.rls new file mode 100644 index 000000000..27f999b5e --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r07.rls @@ -0,0 +1,8 @@ +R(?X, !Y), B(!Y) :- A(?X) . +A(?Y) :- R(?X, ?Y), B(?X) . +R(?Y, ?X) :- R(?X, ?Y) . +B(?Y) :- R(?X, ?Y), A(?X) . + +@export R :- csv {} . +@export A :- csv {} . +@export B :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r08.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r08.rls new file mode 100644 index 000000000..8bcca7ba5 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r08.rls @@ -0,0 +1,5 @@ +R(?X, !Y), A(!Y) :- A(?X) . +R(?Y, ?X) :- R(?X, ?Y) . + +@export R :- csv {} . +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r09.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r09.rls new file mode 100644 index 000000000..70436f564 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r09.rls @@ -0,0 +1,4 @@ +R(?X, !Y) :- A(?X) . +R(?Y, ?X) :- R(?X, ?Y) . +A(?Y) | B(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r10.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r10.rls new file mode 100644 index 000000000..947ffb829 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r10.rls @@ -0,0 +1,4 @@ +R(?X, !Y) :- A(?X) . +S(?X, !Y) :- A(?X) . +R(?Y, ?X), A(?Y) | Halt(?Y) :- R(?X, ?Y), S(?X, ?Z) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r11.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r11.rls new file mode 100644 index 000000000..0759bbd63 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r11.rls @@ -0,0 +1,5 @@ +R(?X, !Y) :- A(?X) . +S(?X, !Y) :- A(?X) . +R(?Y, ?X), A(?Y) | Halt(?X) :- R(?X, ?Y), S(?X, ?Z) . +R(?Y, ?X), A(?Y) :- R(?X, ?Y), S(?X, ?Z) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r12.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r12.rls new file mode 100644 index 000000000..6c819ea9b --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r12.rls @@ -0,0 +1,4 @@ +R(?X, !Y), R(!Y, ?X), B(!Y) :- A(?X) . +R(?X, !Y), R(!Y, ?X), C(!Y) :- B(?X) . +R(?X, !Y), R(!Y, ?X), A(!Y) | Halt(?X) :- C(?X) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r13.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r13.rls new file mode 100644 index 000000000..579809bb4 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r13.rls @@ -0,0 +1,5 @@ +R(?X, !Y), R(!Y, ?X), B(!Y) :- A(?X) . +R(?X, !Y), R(!Y, ?X), C(!Y) :- B(?X) . +R(?X, !Y), R(!Y, ?X), A(!Y) :- C(?X) . + +@export R :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r14.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r14.rls new file mode 100644 index 000000000..2ccc678d2 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r14.rls @@ -0,0 +1,3 @@ +R(?X, !Y) :- A(?X) . +A(?Y) | B(?Y) :- R(?X, ?Y) . + diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r15.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r15.rls new file mode 100644 index 000000000..2e7f0db43 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r15.rls @@ -0,0 +1,8 @@ +R(?X, !Y) :- A(?X) . +R(?X, !Z) :- B(?X) . +A(?Y) :- R(?X, ?Y) . +B(?Y) :- R(?X, ?Y) . + +@export R :- csv {} . +@export A :- csv {} . +@export B :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r16.rls b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r16.rls new file mode 100644 index 000000000..293f0296f --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/from-evaluation-section/r16.rls @@ -0,0 +1,3 @@ +R(?X, !Y), A(!Y) :- A(?X) . + +@export R :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/a28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/a28.rls new file mode 100644 index 000000000..29d09087f --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/a28.rls @@ -0,0 +1,3 @@ +A(!Y) :- A(?X), B(?X) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/b28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/b28.rls new file mode 100644 index 000000000..c7d084d5d --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/b28.rls @@ -0,0 +1,5 @@ +A(!Z), E(?X, ?Y) :- A(?X), B(?X), A(?Y), B(?Y) . +B(!Z), E(?X, ?Y) :- A(?X), B(?X), A(?Y), B(?Y) . + +@export A :- csv {} . +@export B :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/c28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/c28.rls new file mode 100644 index 000000000..57414d30c --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/c28.rls @@ -0,0 +1,3 @@ +A(!V), C(!V), D(!Vprime), E(?X, ?Y) :- A(?X), B(?Y), C(?Z), D(?Z) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cq-entailment.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cq-entailment.rls new file mode 100644 index 000000000..0ce421190 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cq-entailment.rls @@ -0,0 +1,3 @@ +Goal(nullAryPredicatesAreNotAllowedSoWePutThisConstant) :- A(?X), R(?X, ?Y, ?Z) . + +@export Goal :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cross-product.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cross-product.rls new file mode 100644 index 000000000..69b7acbba --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/cross-product.rls @@ -0,0 +1,3 @@ +E(?X, ?Y) :- A(?X), B(?Y) . + +@export E :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/d28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/d28.rls new file mode 100644 index 000000000..889667c38 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/d28.rls @@ -0,0 +1,3 @@ +A(!V), B(!Vprime), E(?X, ?Y) :- A(?X), B(?X), A(?Y), B(?Y) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28.rls new file mode 100644 index 000000000..1c2e28226 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28.rls @@ -0,0 +1,3 @@ +A(!V), B(!Vprime), E(?X) :- A(?X), B(?X), A(?Y) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28plus.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28plus.rls new file mode 100644 index 000000000..9506573f2 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/e28plus.rls @@ -0,0 +1,4 @@ +A(!V), B(!Vprime), E(?X, ?Z) :- A(?X), B(?X), A(?Y), C(?Z) . + +@export A :- csv {} . + diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/f28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/f28.rls new file mode 100644 index 000000000..e1e3dca17 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/f28.rls @@ -0,0 +1,3 @@ +A(!V), B(!Vprime) :- A(?X), B(?Y) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/g28.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/g28.rls new file mode 100644 index 000000000..571bc464f --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/g28.rls @@ -0,0 +1,5 @@ +B(!V) :- A(?X) . +E(?X, ?Y) :- B(?X), B(?Y) . + +@export B :- csv {} . +@export E :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/inf-chain.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/inf-chain.rls new file mode 100644 index 000000000..d39724da9 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/inf-chain.rls @@ -0,0 +1,3 @@ +E(?Y, !Z) :- E(?X, ?Y) . + +@export E :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-non-terminating.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-non-terminating.rls new file mode 100644 index 000000000..73fd4b454 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-non-terminating.rls @@ -0,0 +1,3 @@ +R(?X, ?Y, !Z), A(!Z) :- A(?X), A(?Y) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-with-existential.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-with-existential.rls new file mode 100644 index 000000000..5181f074c --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless-with-existential.rls @@ -0,0 +1,3 @@ +R(?X, ?Y, !Z) :- A(?X), B(?Y) . + +@export R :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless.rls new file mode 100644 index 000000000..c360e8d3b --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joinless.rls @@ -0,0 +1,3 @@ +Goal(nullAryPredicatesAreNotAllowedSoWePutThisConstant) :- A(?X), B(?Y) . + +@export Goal :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls new file mode 100644 index 000000000..78b49c772 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-acyclicity.rls @@ -0,0 +1,6 @@ +Person(?X) :- Mother(?X) . +Parent(!V, ?X), Person(!V) :- Person(?X), Mother(?X) . +Parent(?X, !W), Parent(?Y, !W), Mother(!W) :- Sibling(?X, ?Y) . + +@export Person :- csv {} . +@export Parent :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls new file mode 100644 index 000000000..d6ad3c99c --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/joint-acyclicity-guarded-talk-guadedness.rls @@ -0,0 +1,11 @@ +Ancestor(?X, ?Z) :- C(?X), Ancestor(?X, ?Y), Ancestor(?Y, ?Z) . +Ancestor(?X, ?Y) :- Parent(?X, ?Y) . +Person(?X) :- C(?X) . +Parent(?X, !W), Person(!W) :- Person(?X) . +Parent(?X, !V), Parent(?Y, !V), C(!V) :- Sibling(?X, ?Y) . +Uncle(?X, ?Z) :- Parent(?X, ?Y), Sibling(?Y, ?Z) . + +@export Ancestor :- csv {} . +@export Person :- csv {} . +@export Parent :- csv {} . +@export Uncle :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/non-sticky-projection.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/non-sticky-projection.rls new file mode 100644 index 000000000..c39ff9e45 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/non-sticky-projection.rls @@ -0,0 +1,5 @@ +C(?X, !Y) :- A(?X), B(?X) . +D(?Y) :- C(?X, ?Y) . + +@export C :- csv {} . +@export D :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 100644 index 000000000..af5bedd70 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/not-sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1,5 @@ +T(?X, ?Y, !W) :- R(?X, ?Y), P(?Y, ?Z) . +S(?X, !W) :- T(?X, ?Y, ?Z) . + +@export T :- csv {} . +@export S :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls new file mode 100644 index 000000000..d625a97a4 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-1.rls @@ -0,0 +1,3 @@ +A(!Y) :- A(?X) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls new file mode 100644 index 000000000..d86d61d05 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/oblivious-non-terminating-2.rls @@ -0,0 +1,3 @@ +A(!Y), B(!Y) :- A(?X), B(?X) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/projection.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/projection.rls new file mode 100644 index 000000000..11cedd493 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/projection.rls @@ -0,0 +1,3 @@ +E(?X, ?Y) :- R(?X, ?Y, ?Z) . + +@export E :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/propagation.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/propagation.rls new file mode 100644 index 000000000..7c6272661 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/propagation.rls @@ -0,0 +1,3 @@ +A(?Y) :- A(?X), E(?X, ?Y) . + +@export A :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/pseudo-grid.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/pseudo-grid.rls new file mode 100644 index 000000000..d4a1eb101 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/pseudo-grid.rls @@ -0,0 +1,7 @@ +E(?Y, !Z) :- E(?X, ?Y) . +R(?X, ?Y, !Z) :- E(?X, ?Xprime), E(?Y, ?Yprime) . +X(?X, ?Z), Y(?Y, ?Z) :- R(?X, ?Y, ?Z) . + +@export E :- csv {} . +@export R :- csv {} . +@export Y :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/quaternary-ladder.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/quaternary-ladder.rls new file mode 100644 index 000000000..5ece04cae --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/quaternary-ladder.rls @@ -0,0 +1,3 @@ +F(?Y, ?Yprime, !Z, !Zprime) :- F(?X, ?Xprime, ?Y, ?Yprime) . + +@export F :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/simple-join.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/simple-join.rls new file mode 100644 index 000000000..da75f371c --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/simple-join.rls @@ -0,0 +1,3 @@ +C(?X) :- A(?X), B(?X) . + +@export C :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls new file mode 100644 index 000000000..a7e943634 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/sticky-example-from-all-instance-restricted-termination-paper.rls @@ -0,0 +1,5 @@ +T(?X, ?Y, !W) :- R(?X, ?Y), P(?Y, ?Z) . +S(?Y, !W) :- T(?X, ?Y, ?Z) . + +@export T :- csv {} . +@export S :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/transitivity.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/transitivity.rls new file mode 100644 index 000000000..be063811a --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/transitivity.rls @@ -0,0 +1,3 @@ +E(?X, ?Z) :- E(?X, ?Y), E(?Y, ?Z) . + +@export E :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls new file mode 100644 index 000000000..7f1a0334e --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-1.rls @@ -0,0 +1,3 @@ +Goal(nullAryPredicatesAreNotAllowedSoWePutThisConstant) :- A(?X, ?Y), R(?Y, ?Z) . + +@export Goal :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls new file mode 100644 index 000000000..907581007 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unguarded-cq-entailment-2.rls @@ -0,0 +1,3 @@ +Goal(nullAryPredicatesAreNotAllowedSoWePutThisConstant) :- A(?X, ?Y, ?Z), R(?Y, ?Z, ?V) . + +@export Goal :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls new file mode 100644 index 000000000..7f8051d51 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/unrestricted-join-quaternary-ladder.rls @@ -0,0 +1,3 @@ +F(?Yprime, ?X, ?Yprime, !Xprime) :- F(?X, ?Y, ?X, ?Yprime) . + +@export F :- csv {} . diff --git a/resources/testcases_static_checks/tests_common_data/rule-classification-examples/void-null-join.rls b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/void-null-join.rls new file mode 100644 index 000000000..902459bf2 --- /dev/null +++ b/resources/testcases_static_checks/tests_common_data/rule-classification-examples/void-null-join.rls @@ -0,0 +1,5 @@ +N1(!X), N2(!X) :- Top(?YUnaryPredsNotAllowedSoWeJustPutAUniversalVariableHere) . +A(?X) :- N1(?X), N2(?X) . + +@export A :- csv {} . +@export N1 :- csv {} .