aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Igne <git@federicoigne.com>2021-07-22 10:29:49 +0100
committerFederico Igne <git@federicoigne.com>2021-07-22 10:29:49 +0100
commitb8b8a69ec1d1c93d5cfcfba4dbd002d5c90dd4c6 (patch)
tree62c66038b679b3065c6fdbe4f7e861959b56debe
parentcb8572606f8951213bcfe9e6667caa208ad3d189 (diff)
downloadRSAComb-b8b8a69ec1d1c93d5cfcfba4dbd002d5c90dd4c6.tar.gz
RSAComb-b8b8a69ec1d1c93d5cfcfba4dbd002d5c90dd4c6.zip
Remove normalization step from lowerbound computation
-rw-r--r--src/main/scala/uk/ac/ox/cs/rsacomb/approximation/lowerbound.scala27
-rw-r--r--src/main/scala/uk/ac/ox/cs/rsacomb/ontologies/Ontology.scala6
2 files changed, 15 insertions, 18 deletions
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/lowerbound.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/lowerbound.scala
index 07f10a4..766ea0e 100644
--- a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/lowerbound.scala
+++ b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/lowerbound.scala
@@ -14,7 +14,6 @@ import scalax.collection.GraphTraversal._
14 14
15import uk.ac.ox.cs.rsacomb.RSAOntology 15import uk.ac.ox.cs.rsacomb.RSAOntology
16import uk.ac.ox.cs.rsacomb.RSAUtil 16import uk.ac.ox.cs.rsacomb.RSAUtil
17import uk.ac.ox.cs.rsacomb.converter.Normalizer
18import uk.ac.ox.cs.rsacomb.ontology.Ontology 17import uk.ac.ox.cs.rsacomb.ontology.Ontology
19 18
20object LowerBound { 19object LowerBound {
@@ -47,23 +46,14 @@ class LowerBound extends Approximation[RSAOntology] {
47 /** Simplify conversion between OWLAPI and RDFox concepts */ 46 /** Simplify conversion between OWLAPI and RDFox concepts */
48 import uk.ac.ox.cs.rsacomb.implicits.RDFox._ 47 import uk.ac.ox.cs.rsacomb.implicits.RDFox._
49 48
50 private val normalizer = new Normalizer()
51
52 /** Main entry point for the approximation algorithm */ 49 /** Main entry point for the approximation algorithm */
53 def approximate(ontology: Ontology): RSAOntology = { 50 def approximate(ontology: Ontology): RSAOntology =
54 /* Normalize axioms */ 51 toRSA(
55 val axioms1 = ontology.axioms flatMap normalizer.normalize 52 new Ontology(
56 /* Delete any axiom outside of ALCHOIQ */ 53 ontology.axioms filterNot inALCHOIQ flatMap shift,
57 val axioms2 = axioms1 filterNot inALCHOIQ 54 ontology.datafiles
58 /* Shift any axiom with disjunction on the rhs */ 55 )
59 val axioms3 = for { 56 )
60 a1 <- axioms1
61 a2 <- shift(a1)
62 a3 <- normalizer.normalize(a2)
63 } yield a3
64 /* Approximate to RSA */
65 toRSA(new Ontology(axioms3, ontology.datafiles))
66 }
67 57
68 /** Discards all axioms outside ALCHOIQ */ 58 /** Discards all axioms outside ALCHOIQ */
69 private def inALCHOIQ(axiom: OWLLogicalAxiom): Boolean = 59 private def inALCHOIQ(axiom: OWLLogicalAxiom): Boolean =
@@ -114,6 +104,7 @@ class LowerBound extends Approximation[RSAOntology] {
114 * 104 *
115 * becomes 105 * becomes
116 * 106 *
107 * A n nB1 n nB2 n nB3 -> bot .
117 * A n nB1 n nB2 -> B3 . 108 * A n nB1 n nB2 -> B3 .
118 * A n nB1 n nB3 -> B2 . 109 * A n nB1 n nB3 -> B2 .
119 * A n nB2 n nB3 -> B1 . 110 * A n nB2 n nB3 -> B1 .
@@ -121,6 +112,8 @@ class LowerBound extends Approximation[RSAOntology] {
121 * 112 *
122 * where nA, nB1, nB2, nB3 are fresh predicates "corresponding" to 113 * where nA, nB1, nB2, nB3 are fresh predicates "corresponding" to
123 * the negation of A, B1, B2, B3 respectively. 114 * the negation of A, B1, B2, B3 respectively.
115 *
116 * @note this method maintains the normal form of the input axiom.
124 */ 117 */
125 private def shift(axiom: OWLLogicalAxiom): List[OWLLogicalAxiom] = 118 private def shift(axiom: OWLLogicalAxiom): List[OWLLogicalAxiom] =
126 axiom match { 119 axiom match {
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/ontologies/Ontology.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/ontologies/Ontology.scala
index 723bcaa..d73704f 100644
--- a/src/main/scala/uk/ac/ox/cs/rsacomb/ontologies/Ontology.scala
+++ b/src/main/scala/uk/ac/ox/cs/rsacomb/ontologies/Ontology.scala
@@ -282,7 +282,11 @@ class Ontology(val axioms: List[OWLLogicalAxiom], val datafiles: List[File]) {
282 * @param normalizer the normalization technique to be used. 282 * @param normalizer the normalization technique to be used.
283 * @return a new normalized [[Ontology]]. 283 * @return a new normalized [[Ontology]].
284 */ 284 */
285 def normalize(normalizer: Normalizer): Ontology = ??? 285 def normalize(normalizer: Normalizer): Ontology =
286 new Ontology(
287 axioms flatMap normalizer.normalize,
288 datafiles
289 )
286 290
287 /** Approximate the ontology according to the given approximation 291 /** Approximate the ontology according to the given approximation
288 * technique. 292 * technique.