rustdl 0.3.3__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rustdl-0.3.3 → rustdl-0.3.4}/Cargo.lock +9 -9
- {rustdl-0.3.3 → rustdl-0.3.4}/Cargo.toml +6 -6
- {rustdl-0.3.3 → rustdl-0.3.4}/PKG-INFO +1 -1
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/konclude_closure_diff.rs +40 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-saturation/src/lib.rs +195 -2
- {rustdl-0.3.3 → rustdl-0.3.4}/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/absorb.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/clause.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/convert.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/convert_back.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/data_axioms.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/definitions.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/disjunction_existential.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/ir.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/lib.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/locality.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/normalize.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/ontology.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/residual_trigger.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/role_hierarchy.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/told.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/transform.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/src/vocab.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/tests/concept_pool_proptest.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/tests/convert_round_trip_proptest.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/tests/role_hierarchy_proptest.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-datatypes/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-datatypes/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-datatypes/src/lib.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/.gitignore +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/classify.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/errors.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/lib.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/load.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/materialize.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/src/queries.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/conftest.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_classify.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_examples.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_materialize.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_queries.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_smoke.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-py/tests/python/test_soundness.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/abox_check.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/classify.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/lib.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/model_cache.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/realize.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/src/union_find.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/abox_consistency.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/anon349_diagnostic.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/datatype_completeness.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_direct_bot.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_no_bot.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_different_individuals.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_consistent.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_inconsistent.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_without_different.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_same_target.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_cardinality_disjoint.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain-classified.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition-classified.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/functional_data_property.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property-classified.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.owx +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/label_heuristic_canary.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/phase2c_pair_06_canary.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/real_ontology_corpus.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/snapshot_phase0_canary.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-saturation/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-saturation/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-saturation/tests/fixtures/phase2a_functional_role_canary.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-saturation/tests/fixtures/phase2b_compound_existential_canary.ofn +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/Cargo.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/README.md +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/counters.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/deps.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/graph.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/hyper.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/lib.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/replay.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/rules.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/saturate.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/search.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/snapshot.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/src/trail.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/tests/backprop_risk.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/tests/replay_driver.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/tests/replay_roundtrip.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-tableau/tests/snapshot_capture.rs +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/pyproject.toml +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/python/rustdl/__init__.py +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/python/rustdl/data/pizza.owl.gz +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/python/rustdl/data/sio.owl.gz +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/python/rustdl/data/sulo.owl.gz +0 -0
- {rustdl-0.3.3 → rustdl-0.3.4}/python/rustdl/examples.py +0 -0
|
@@ -1037,7 +1037,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
|
|
1037
1037
|
|
|
1038
1038
|
[[package]]
|
|
1039
1039
|
name = "owl-dl-bench"
|
|
1040
|
-
version = "0.3.
|
|
1040
|
+
version = "0.3.4"
|
|
1041
1041
|
dependencies = [
|
|
1042
1042
|
"anyhow",
|
|
1043
1043
|
"clap",
|
|
@@ -1054,7 +1054,7 @@ dependencies = [
|
|
|
1054
1054
|
|
|
1055
1055
|
[[package]]
|
|
1056
1056
|
name = "owl-dl-cli"
|
|
1057
|
-
version = "0.3.
|
|
1057
|
+
version = "0.3.4"
|
|
1058
1058
|
dependencies = [
|
|
1059
1059
|
"anyhow",
|
|
1060
1060
|
"clap",
|
|
@@ -1066,7 +1066,7 @@ dependencies = [
|
|
|
1066
1066
|
|
|
1067
1067
|
[[package]]
|
|
1068
1068
|
name = "owl-dl-core"
|
|
1069
|
-
version = "0.3.
|
|
1069
|
+
version = "0.3.4"
|
|
1070
1070
|
dependencies = [
|
|
1071
1071
|
"bitvec",
|
|
1072
1072
|
"bumpalo",
|
|
@@ -1080,7 +1080,7 @@ dependencies = [
|
|
|
1080
1080
|
|
|
1081
1081
|
[[package]]
|
|
1082
1082
|
name = "owl-dl-datatypes"
|
|
1083
|
-
version = "0.3.
|
|
1083
|
+
version = "0.3.4"
|
|
1084
1084
|
dependencies = [
|
|
1085
1085
|
"owl-dl-core",
|
|
1086
1086
|
"proptest",
|
|
@@ -1090,7 +1090,7 @@ dependencies = [
|
|
|
1090
1090
|
|
|
1091
1091
|
[[package]]
|
|
1092
1092
|
name = "owl-dl-py"
|
|
1093
|
-
version = "0.3.
|
|
1093
|
+
version = "0.3.4"
|
|
1094
1094
|
dependencies = [
|
|
1095
1095
|
"horned-owl",
|
|
1096
1096
|
"owl-dl-core",
|
|
@@ -1101,7 +1101,7 @@ dependencies = [
|
|
|
1101
1101
|
|
|
1102
1102
|
[[package]]
|
|
1103
1103
|
name = "owl-dl-reasoner"
|
|
1104
|
-
version = "0.3.
|
|
1104
|
+
version = "0.3.4"
|
|
1105
1105
|
dependencies = [
|
|
1106
1106
|
"dashmap",
|
|
1107
1107
|
"horned-owl",
|
|
@@ -1117,7 +1117,7 @@ dependencies = [
|
|
|
1117
1117
|
|
|
1118
1118
|
[[package]]
|
|
1119
1119
|
name = "owl-dl-saturation"
|
|
1120
|
-
version = "0.3.
|
|
1120
|
+
version = "0.3.4"
|
|
1121
1121
|
dependencies = [
|
|
1122
1122
|
"dashmap",
|
|
1123
1123
|
"fixedbitset",
|
|
@@ -1133,7 +1133,7 @@ dependencies = [
|
|
|
1133
1133
|
|
|
1134
1134
|
[[package]]
|
|
1135
1135
|
name = "owl-dl-tableau"
|
|
1136
|
-
version = "0.3.
|
|
1136
|
+
version = "0.3.4"
|
|
1137
1137
|
dependencies = [
|
|
1138
1138
|
"bitvec",
|
|
1139
1139
|
"bumpalo",
|
|
@@ -2569,7 +2569,7 @@ dependencies = [
|
|
|
2569
2569
|
|
|
2570
2570
|
[[package]]
|
|
2571
2571
|
name = "xtask"
|
|
2572
|
-
version = "0.3.
|
|
2572
|
+
version = "0.3.4"
|
|
2573
2573
|
dependencies = [
|
|
2574
2574
|
"anyhow",
|
|
2575
2575
|
"clap",
|
|
@@ -3,7 +3,7 @@ resolver = "2"
|
|
|
3
3
|
members = ["crates/owl-dl-core", "crates/owl-dl-saturation", "crates/owl-dl-tableau", "crates/owl-dl-datatypes", "crates/owl-dl-reasoner", "crates/owl-dl-py"]
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
|
-
version = "0.3.
|
|
6
|
+
version = "0.3.4"
|
|
7
7
|
edition = "2024"
|
|
8
8
|
rust-version = "1.88"
|
|
9
9
|
license = "Apache-2.0 OR MIT"
|
|
@@ -15,11 +15,11 @@ keywords = ["owl", "ontology", "reasoner", "description-logic", "semantic-web"]
|
|
|
15
15
|
categories = ["science", "data-structures"]
|
|
16
16
|
|
|
17
17
|
[workspace.dependencies]
|
|
18
|
-
owl-dl-core = { path = "crates/owl-dl-core", version = "0.3.
|
|
19
|
-
owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.3.
|
|
20
|
-
owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.3.
|
|
21
|
-
owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.3.
|
|
22
|
-
owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.3.
|
|
18
|
+
owl-dl-core = { path = "crates/owl-dl-core", version = "0.3.4" }
|
|
19
|
+
owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.3.4" }
|
|
20
|
+
owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.3.4" }
|
|
21
|
+
owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.3.4" }
|
|
22
|
+
owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.3.4" }
|
|
23
23
|
|
|
24
24
|
horned-owl = { version = "1.4", default-features = false }
|
|
25
25
|
|
|
@@ -378,6 +378,46 @@ fn sio_closure_matches_konclude() {
|
|
|
378
378
|
assert_eq!(fp, 0, "sio has FPs — D1 sound-under-approximation broken");
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
+
#[test]
|
|
382
|
+
#[ignore = "needs ontologies/real/wine.ofn + konclude-input/wine-classified.owx \
|
|
383
|
+
(W3C wine+food merged, circular imports stripped; HermiT oracle). \
|
|
384
|
+
SHOIN(D): nominal- + disjointness-heavy expressivity stressor. \
|
|
385
|
+
Fetch via scripts/fetch-real-ontologies.sh."]
|
|
386
|
+
fn wine_closure_matches_konclude() {
|
|
387
|
+
let input = Path::new("../../ontologies/real/wine.ofn");
|
|
388
|
+
let truth = Path::new("../../ontologies/real/konclude-input/wine-classified.owx");
|
|
389
|
+
if !input.exists() || !truth.exists() {
|
|
390
|
+
eprintln!("SKIP: missing wine fixture");
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
let (_r, _k, fp, _m) = diff_corpus_ontology("wine", input, truth, 200);
|
|
394
|
+
assert_eq!(
|
|
395
|
+
fp, 0,
|
|
396
|
+
"wine has FPs — soundness regression on nominals/datatypes"
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
#[test]
|
|
401
|
+
#[ignore = "needs ontologies/real/bibtex.ofn + konclude-input/bibtex-classified.owx \
|
|
402
|
+
(ORE-2015 ore_ont_3341, a BibTeX ontology; HermiT oracle). \
|
|
403
|
+
Datatype-heavy + real class hierarchy: 41 DataMinCardinality + 40 \
|
|
404
|
+
DataPropertyDomain + 39 DataPropertyRange, 15 classes, 56 inferred \
|
|
405
|
+
edges — exercises Phase-D classification on real data. Fetch via \
|
|
406
|
+
scripts/fetch-real-ontologies.sh."]
|
|
407
|
+
fn bibtex_closure_matches_konclude() {
|
|
408
|
+
let input = Path::new("../../ontologies/real/bibtex.ofn");
|
|
409
|
+
let truth = Path::new("../../ontologies/real/konclude-input/bibtex-classified.owx");
|
|
410
|
+
if !input.exists() || !truth.exists() {
|
|
411
|
+
eprintln!("SKIP: missing bibtex fixture");
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
let (_r, _k, fp, _m) = diff_corpus_ontology("bibtex", input, truth, 200);
|
|
415
|
+
assert_eq!(
|
|
416
|
+
fp, 0,
|
|
417
|
+
"bibtex has FPs — Phase-D sound-under-approximation broken"
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
|
|
381
421
|
#[test]
|
|
382
422
|
#[ignore = "needs ontologies/real/ro.ofn + konclude-input/ro-classified.owx; Phase D1 fixture (was UnsupportedAxiom-erroring pre-D1; HermiT oracle generated 2026-06-03)"]
|
|
383
423
|
fn ro_closure_matches_konclude() {
|
|
@@ -53,8 +53,8 @@ use std::collections::{HashMap, HashSet, VecDeque};
|
|
|
53
53
|
|
|
54
54
|
use fixedbitset::FixedBitSet;
|
|
55
55
|
use owl_dl_core::{
|
|
56
|
-
Axiom, ClassId, ConceptExpr, ConceptId, ConceptPool, InternalOntology, Role,
|
|
57
|
-
SubRolePath,
|
|
56
|
+
Axiom, ClassId, ConceptExpr, ConceptId, ConceptPool, IndividualId, InternalOntology, Role,
|
|
57
|
+
RoleId, SubRolePath,
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
/// Compute the subsumer closure over the EL-fragment subset of
|
|
@@ -676,6 +676,22 @@ impl WorklistEngine {
|
|
|
676
676
|
#[allow(clippy::too_many_lines)]
|
|
677
677
|
fn process_fact(&mut self, idx: usize) {
|
|
678
678
|
let fact = self.facts[idx];
|
|
679
|
+
// Nominal/ABox transitive propagation: if `fact` is
|
|
680
|
+
// `X ⊑ ∃R.{a}` (target is a NomKey) and `R` is transitive with
|
|
681
|
+
// `a R⁺ b` in the ABox, derive `X ⊑ ∃R.{b}`. Sound: `X R a`,
|
|
682
|
+
// `a R⁺ b`, `R` transitive ⟹ `X R b`. See `build_abox_nominal_reach`.
|
|
683
|
+
if !self.rules.abox_nominal_reach.is_empty()
|
|
684
|
+
&& let Some(reach) = self.rules.abox_nominal_reach.get(&(fact.role, fact.target))
|
|
685
|
+
{
|
|
686
|
+
let derived: Vec<ClassId> = reach.clone();
|
|
687
|
+
for b_key in derived {
|
|
688
|
+
self.push_fact(ExistentialFact {
|
|
689
|
+
sub: fact.sub,
|
|
690
|
+
role: fact.role,
|
|
691
|
+
target: b_key,
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
679
695
|
let role_supers = supers_of(&self.role_super, fact.role);
|
|
680
696
|
// NOTE: range propagation deliberately omitted.
|
|
681
697
|
//
|
|
@@ -1034,6 +1050,16 @@ struct ElRules {
|
|
|
1034
1050
|
/// Pairwise disjoint atomic-class pairs, decomposed from n-ary
|
|
1035
1051
|
/// `DisjointClasses` axioms. Read as `A ⊓ B ⊑ ⊥`.
|
|
1036
1052
|
disjoint_pairs: Vec<(ClassId, ClassId)>,
|
|
1053
|
+
/// Nominal-reasoning support (wine region cluster). For a
|
|
1054
|
+
/// **transitive** role `R` and a nominal-key class `NomKey(a)`
|
|
1055
|
+
/// (synthetic stand-in for the singleton `{a}`),
|
|
1056
|
+
/// `abox_nominal_reach[(R, NomKey(a))]` lists `NomKey(b)` for every
|
|
1057
|
+
/// individual `b` reachable from `a` via the transitive closure of
|
|
1058
|
+
/// `R` over the named-individual `ABox`. Lets a fact
|
|
1059
|
+
/// `X ⊑ ∃R.{a}` derive `X ⊑ ∃R.{b}` (sound: `X R a`, `a R⁺ b`,
|
|
1060
|
+
/// `R` transitive ⟹ `X R b`). Empty unless the ontology has both
|
|
1061
|
+
/// nominal existential bodies and transitive-role `ABox` edges.
|
|
1062
|
+
abox_nominal_reach: std::collections::HashMap<(RoleId, ClassId), Vec<ClassId>>,
|
|
1037
1063
|
/// Atomic classes told directly to be unsatisfiable via
|
|
1038
1064
|
/// `SubClassOf(Atomic(C), Bot)`. Seeded into the unsat worklist
|
|
1039
1065
|
/// at `seed` time so the standard `process_unsat` propagation
|
|
@@ -1146,6 +1172,12 @@ struct TseitinAllocator {
|
|
|
1146
1172
|
/// by `(role, body_class_id)` so repeated occurrences of the same
|
|
1147
1173
|
/// `∃R.B` shape across different conjunctions share one marker.
|
|
1148
1174
|
by_existential: HashMap<(RoleId, ClassId), ClassId>,
|
|
1175
|
+
/// Stable synthetic atomic class per individual used as a nominal
|
|
1176
|
+
/// (`{a}`) in an existential body. Treated as an opaque atom
|
|
1177
|
+
/// (no subsumers, no triggers) — a 1:1 structural stand-in so the
|
|
1178
|
+
/// EL fold of `C ≡ D ⊓ ∃R.{a}` fires on the same key the fact
|
|
1179
|
+
/// `X ⊑ ∃R.{a}` produced. Injective, so no two individuals merge.
|
|
1180
|
+
nominal_by_ind: HashMap<IndividualId, ClassId>,
|
|
1149
1181
|
}
|
|
1150
1182
|
|
|
1151
1183
|
impl TseitinAllocator {
|
|
@@ -1154,9 +1186,23 @@ impl TseitinAllocator {
|
|
|
1154
1186
|
next_id: u32::try_from(num_original_classes).expect("class count fits in u32"),
|
|
1155
1187
|
by_body: HashMap::new(),
|
|
1156
1188
|
by_existential: HashMap::new(),
|
|
1189
|
+
nominal_by_ind: HashMap::new(),
|
|
1157
1190
|
}
|
|
1158
1191
|
}
|
|
1159
1192
|
|
|
1193
|
+
/// Get-or-allocate the opaque synthetic atomic class standing in for
|
|
1194
|
+
/// the nominal `{ind}`. Sound: matching is by individual identity
|
|
1195
|
+
/// (structural), so `∃R.{a}` folds only against the same `a`.
|
|
1196
|
+
fn introduce_nominal(&mut self, ind: IndividualId) -> ClassId {
|
|
1197
|
+
if let Some(&existing) = self.nominal_by_ind.get(&ind) {
|
|
1198
|
+
return existing;
|
|
1199
|
+
}
|
|
1200
|
+
let synthetic = ClassId::new(self.next_id);
|
|
1201
|
+
self.next_id = self.next_id.checked_add(1).expect("synthetic id overflow");
|
|
1202
|
+
self.nominal_by_ind.insert(ind, synthetic);
|
|
1203
|
+
synthetic
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1160
1206
|
fn introduce(&mut self, mut body: Vec<ClassId>, rules: &mut ElRules) -> ClassId {
|
|
1161
1207
|
body.sort();
|
|
1162
1208
|
body.dedup();
|
|
@@ -1362,6 +1408,12 @@ fn collect_el_rules(
|
|
|
1362
1408
|
_ => {}
|
|
1363
1409
|
}
|
|
1364
1410
|
}
|
|
1411
|
+
|
|
1412
|
+
// Nominal/ABox transitive propagation (wine region cluster).
|
|
1413
|
+
// Allocates NomKeys for ABox individuals, so it must run before
|
|
1414
|
+
// `total_classes` is captured.
|
|
1415
|
+
build_abox_nominal_reach(internal, &mut tseitin, &mut rules);
|
|
1416
|
+
|
|
1365
1417
|
let total_classes = tseitin.next_id as usize;
|
|
1366
1418
|
|
|
1367
1419
|
// Phase 2a: collect functional-role declarations and precompute
|
|
@@ -1638,6 +1690,15 @@ fn atomic_existential_rhs(
|
|
|
1638
1690
|
if role.is_inverse() {
|
|
1639
1691
|
return None;
|
|
1640
1692
|
}
|
|
1693
|
+
// Nominal body `∃R.{a}`: emit the bare per-individual NomKey, NOT a
|
|
1694
|
+
// range-wrapped synthetic. The wrap (`NomKey ⊓ Range(R)`) would make
|
|
1695
|
+
// the fact target a fresh synthetic, defeating the `abox_nominal_reach`
|
|
1696
|
+
// lookup in `process_fact` (keyed on the bare NomKey). Dropping the
|
|
1697
|
+
// range-typing of the witness is a sound under-approximation — the
|
|
1698
|
+
// nominal fold needs only the NomKey identity.
|
|
1699
|
+
if let ConceptExpr::Nominal(ind) = pool.get(*body) {
|
|
1700
|
+
return Some((role.role_id(), tseitin.introduce_nominal(*ind)));
|
|
1701
|
+
}
|
|
1641
1702
|
let extras = effective_ranges
|
|
1642
1703
|
.get(&role.role_id())
|
|
1643
1704
|
.map_or(&[][..], Vec::as_slice);
|
|
@@ -1658,6 +1719,90 @@ fn atomic_or_tseitin_body(
|
|
|
1658
1719
|
atomic_or_tseitin_body_with_extras(body, &[], pool, rules, tseitin)
|
|
1659
1720
|
}
|
|
1660
1721
|
|
|
1722
|
+
/// Populate [`ElRules::abox_nominal_reach`]: for each **transitive**
|
|
1723
|
+
/// named role `R`, compute the transitive closure of `R` over named
|
|
1724
|
+
/// individuals (`ObjectPropertyAssertion`s) and map each source's
|
|
1725
|
+
/// `NomKey` to the `NomKey`s of all reachable individuals. Enables the
|
|
1726
|
+
/// sound `X ⊑ ∃R.{a}`, `a R⁺ b` ⟹ `X ⊑ ∃R.{b}` propagation in
|
|
1727
|
+
/// `process_fact`. No-op unless the ontology has transitive roles with
|
|
1728
|
+
/// `ABox` edges.
|
|
1729
|
+
fn build_abox_nominal_reach(
|
|
1730
|
+
internal: &InternalOntology,
|
|
1731
|
+
tseitin: &mut TseitinAllocator,
|
|
1732
|
+
rules: &mut ElRules,
|
|
1733
|
+
) {
|
|
1734
|
+
use std::collections::BTreeSet;
|
|
1735
|
+
let mut transitive: HashSet<RoleId> = HashSet::new();
|
|
1736
|
+
for ax in &internal.axioms {
|
|
1737
|
+
if let Axiom::TransitiveRole(role) = ax
|
|
1738
|
+
&& !role.is_inverse()
|
|
1739
|
+
{
|
|
1740
|
+
transitive.insert(role.role_id());
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
if transitive.is_empty() {
|
|
1744
|
+
return;
|
|
1745
|
+
}
|
|
1746
|
+
// Direct R-successor graph over individuals (named, transitive R only).
|
|
1747
|
+
let mut direct: HashMap<RoleId, HashMap<IndividualId, BTreeSet<IndividualId>>> = HashMap::new();
|
|
1748
|
+
for ax in &internal.axioms {
|
|
1749
|
+
if let Axiom::ObjectPropertyAssertion {
|
|
1750
|
+
role,
|
|
1751
|
+
subject,
|
|
1752
|
+
object,
|
|
1753
|
+
} = ax
|
|
1754
|
+
&& !role.is_inverse()
|
|
1755
|
+
&& transitive.contains(&role.role_id())
|
|
1756
|
+
{
|
|
1757
|
+
direct
|
|
1758
|
+
.entry(role.role_id())
|
|
1759
|
+
.or_default()
|
|
1760
|
+
.entry(*subject)
|
|
1761
|
+
.or_default()
|
|
1762
|
+
.insert(*object);
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
for (role, graph) in &direct {
|
|
1766
|
+
// Naive transitive-closure fixpoint (ABoxes here are tiny).
|
|
1767
|
+
let mut closure = graph.clone();
|
|
1768
|
+
let mut changed = true;
|
|
1769
|
+
while changed {
|
|
1770
|
+
changed = false;
|
|
1771
|
+
let sources: Vec<IndividualId> = closure.keys().copied().collect();
|
|
1772
|
+
for a in sources {
|
|
1773
|
+
let mids: Vec<IndividualId> = closure
|
|
1774
|
+
.get(&a)
|
|
1775
|
+
.map(|s| s.iter().copied().collect())
|
|
1776
|
+
.unwrap_or_default();
|
|
1777
|
+
let mut additions: Vec<IndividualId> = Vec::new();
|
|
1778
|
+
for m in mids {
|
|
1779
|
+
if let Some(ms) = graph.get(&m) {
|
|
1780
|
+
additions.extend(ms.iter().copied());
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
if let Some(reach) = closure.get_mut(&a) {
|
|
1784
|
+
for t in additions {
|
|
1785
|
+
if t != a && reach.insert(t) {
|
|
1786
|
+
changed = true;
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
for (a, reach) in &closure {
|
|
1793
|
+
if reach.is_empty() {
|
|
1794
|
+
continue;
|
|
1795
|
+
}
|
|
1796
|
+
let a_key = tseitin.introduce_nominal(*a);
|
|
1797
|
+
let targets: Vec<ClassId> = reach
|
|
1798
|
+
.iter()
|
|
1799
|
+
.map(|&b| tseitin.introduce_nominal(b))
|
|
1800
|
+
.collect();
|
|
1801
|
+
rules.abox_nominal_reach.insert((*role, a_key), targets);
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1661
1806
|
/// Return the list of alternative body class ids for an existential
|
|
1662
1807
|
/// trigger's body. For `Atomic` / `And` returns one element. For
|
|
1663
1808
|
/// `Or(C1, ..., Cn)` returns one element per operand (each itself
|
|
@@ -1701,6 +1846,13 @@ fn atomic_or_tseitin_body_with_extras(
|
|
|
1701
1846
|
) -> Option<ClassId> {
|
|
1702
1847
|
let body_atomics: Vec<ClassId> = match pool.get(body) {
|
|
1703
1848
|
ConceptExpr::Atomic(id) => vec![*id],
|
|
1849
|
+
// Nominal `{a}` body (`∃R.{a}`, i.e. ObjectHasValue): use an
|
|
1850
|
+
// opaque per-individual synthetic class as a structural
|
|
1851
|
+
// stand-in so the EL fold of `C ≡ D ⊓ ∃R.{a}` matches the
|
|
1852
|
+
// `X ⊑ ∃R.{a}` fact. Sound (1:1 individual identity); the
|
|
1853
|
+
// singleton/cardinality semantics of `{a}` are deliberately
|
|
1854
|
+
// not modeled (under-approximation — the tableau handles those).
|
|
1855
|
+
ConceptExpr::Nominal(ind) => vec![tseitin.introduce_nominal(*ind)],
|
|
1704
1856
|
ConceptExpr::And(operands) => {
|
|
1705
1857
|
atomic_classes_with_existential_markers(operands, pool, rules, tseitin)?
|
|
1706
1858
|
}
|
|
@@ -2599,6 +2751,47 @@ Ontology(<http://rustdl.test/test>\n\
|
|
|
2599
2751
|
assert!(subs.contains(class(&internal, "X"), class(&internal, "W")));
|
|
2600
2752
|
}
|
|
2601
2753
|
|
|
2754
|
+
#[test]
|
|
2755
|
+
fn nominal_transitive_abox_fold_classifies() {
|
|
2756
|
+
// Wine region pattern: AlsatianWine ≡ Wine ⊓ ∃locatedIn.{Alsace};
|
|
2757
|
+
// FrenchWine ≡ Wine ⊓ ∃locatedIn.{French}; locatedIn transitive;
|
|
2758
|
+
// ABox Alsace locatedIn French. By transitivity AlsatianWine's
|
|
2759
|
+
// locatedIn-witness reaches French ⟹ AlsatianWine ⊑ FrenchWine.
|
|
2760
|
+
// Exercises the nominal NomKey fold (B) + transitive-ABox
|
|
2761
|
+
// propagation (A). EL alone drops nominal-filler existentials.
|
|
2762
|
+
let internal = parse_internal(&format!(
|
|
2763
|
+
"{HEADER}\
|
|
2764
|
+
Ontology(<http://rustdl.test/test>\n\
|
|
2765
|
+
Declaration(Class(:Wine))\n\
|
|
2766
|
+
Declaration(Class(:AlsatianWine))\n\
|
|
2767
|
+
Declaration(Class(:FrenchWine))\n\
|
|
2768
|
+
Declaration(NamedIndividual(:Alsace))\n\
|
|
2769
|
+
Declaration(NamedIndividual(:French))\n\
|
|
2770
|
+
Declaration(ObjectProperty(:locatedIn))\n\
|
|
2771
|
+
TransitiveObjectProperty(:locatedIn)\n\
|
|
2772
|
+
ObjectPropertyAssertion(:locatedIn :Alsace :French)\n\
|
|
2773
|
+
EquivalentClasses(:AlsatianWine ObjectIntersectionOf(:Wine ObjectHasValue(:locatedIn :Alsace)))\n\
|
|
2774
|
+
EquivalentClasses(:FrenchWine ObjectIntersectionOf(:Wine ObjectHasValue(:locatedIn :French)))\n\
|
|
2775
|
+
)\n"
|
|
2776
|
+
));
|
|
2777
|
+
let subs = saturate(&internal);
|
|
2778
|
+
assert!(
|
|
2779
|
+
subs.contains(
|
|
2780
|
+
class(&internal, "AlsatianWine"),
|
|
2781
|
+
class(&internal, "FrenchWine")
|
|
2782
|
+
),
|
|
2783
|
+
"nominal transitive-ABox fold failed: AlsatianWine ⊑ FrenchWine"
|
|
2784
|
+
);
|
|
2785
|
+
// Soundness: the reverse must NOT hold (French does not locate in Alsace).
|
|
2786
|
+
assert!(
|
|
2787
|
+
!subs.contains(
|
|
2788
|
+
class(&internal, "FrenchWine"),
|
|
2789
|
+
class(&internal, "AlsatianWine")
|
|
2790
|
+
),
|
|
2791
|
+
"unsound: FrenchWine ⊑ AlsatianWine should not hold"
|
|
2792
|
+
);
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2602
2795
|
#[test]
|
|
2603
2796
|
fn out_of_fragment_axioms_dont_panic() {
|
|
2604
2797
|
let internal = parse_internal(&format!(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt
RENAMED
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.3.3 → rustdl-0.3.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|