diff options
| author | Federico Igne <git@federicoigne.com> | 2021-10-04 18:51:19 +0100 |
|---|---|---|
| committer | Federico Igne <git@federicoigne.com> | 2021-10-04 18:51:19 +0100 |
| commit | 2a3b5153955208dd4a9393fbaff57b3858efe271 (patch) | |
| tree | f21b066a238f79d70e5cbae3f71b7b21b37b7513 /src/main/scala | |
| parent | 0af96f42fc0d272257df83a43b4c6e48e52c1dff (diff) | |
| download | RSAComb-2a3b5153955208dd4a9393fbaff57b3858efe271.tar.gz RSAComb-2a3b5153955208dd4a9393fbaff57b3858efe271.zip | |
Add substitution rules in equality axiomatisation
Diffstat (limited to 'src/main/scala')
| -rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala index 1ff466b..5ae0227 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala | |||
| @@ -407,13 +407,14 @@ class RSAOntology( | |||
| 407 | * behaviour is incompatible with other needed features like | 407 | * behaviour is incompatible with other needed features like |
| 408 | * negation-as-failure and aggregates. | 408 | * negation-as-failure and aggregates. |
| 409 | * | 409 | * |
| 410 | * @todo to complete the equality axiomatization we need to introduce | 410 | * @todo naïve substitution rules might not be very efficient. We |
| 411 | * substitution rules to explicate a complete "equality" semantics. | 411 | * should look into other ways of implementing this. |
| 412 | */ | 412 | */ |
| 413 | private val equalityAxioms: List[Rule] = { | 413 | private val equalityAxioms: List[Rule] = { |
| 414 | val varX = Variable.create("X") | 414 | val varX = Variable.create("X") |
| 415 | val varY = Variable.create("Y") | 415 | val varY = Variable.create("Y") |
| 416 | val varZ = Variable.create("Z") | 416 | val varZ = Variable.create("Z") |
| 417 | val varW = Variable.create("W") | ||
| 417 | val graph = TupleTableName.create(RSAOntology.CanonGraph.getIRI) | 418 | val graph = TupleTableName.create(RSAOntology.CanonGraph.getIRI) |
| 418 | // Equality properties | 419 | // Equality properties |
| 419 | val properties = List( | 420 | val properties = List( |
| @@ -434,6 +435,32 @@ class RSAOntology( | |||
| 434 | TupleTableAtom.create(graph, varY, RSA.CONGRUENT, varZ) | 435 | TupleTableAtom.create(graph, varY, RSA.CONGRUENT, varZ) |
| 435 | ) | 436 | ) |
| 436 | ) | 437 | ) |
| 438 | /* Equality substitution rules */ | ||
| 439 | val substitutions = | ||
| 440 | Rule.create( | ||
| 441 | TupleTableAtom.create(graph, varY, IRI.RDF_TYPE, varZ), | ||
| 442 | TupleTableAtom.create(graph, varX, RSA.CONGRUENT, varY), | ||
| 443 | TupleTableAtom.create(graph, varX, IRI.RDF_TYPE, varZ) | ||
| 444 | ) :: objroles.flatMap(r => { | ||
| 445 | val name = r match { | ||
| 446 | case x: OWLObjectProperty => x.getIRI.getIRIString | ||
| 447 | case x: OWLObjectInverseOf => | ||
| 448 | x.getInverse.getNamedProperty.getIRI.getIRIString :: Inverse | ||
| 449 | } | ||
| 450 | List( | ||
| 451 | Rule.create( | ||
| 452 | TupleTableAtom.create(graph, varZ, name, varY), | ||
| 453 | TupleTableAtom.create(graph, varX, RSA.CONGRUENT, varZ), | ||
| 454 | TupleTableAtom.create(graph, varX, name, varY) | ||
| 455 | ), | ||
| 456 | Rule.create( | ||
| 457 | TupleTableAtom.create(graph, varY, name, varZ), | ||
| 458 | TupleTableAtom.create(graph, varX, RSA.CONGRUENT, varZ), | ||
| 459 | TupleTableAtom.create(graph, varY, name, varX) | ||
| 460 | ) | ||
| 461 | ) | ||
| 462 | }) | ||
| 463 | properties ++ substitutions | ||
| 437 | } | 464 | } |
| 438 | 465 | ||
| 439 | /** Canonical model of the ontology */ | 466 | /** Canonical model of the ontology */ |
