aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend75
1 files changed, 37 insertions, 38 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend
index 760aa8b8..42f85a2d 100644
--- a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicStructureBuilder.xtend
@@ -55,6 +55,10 @@ import org.eclipse.xtend.lib.annotations.Data
55 55
56import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 56import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
57import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.InstanceOf 57import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.InstanceOf
58import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeReference
59import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.BoolTypeReference
60import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RealTypeReference
61import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.StringTypeReference
58 62
59@Data class InterpretationValidationResult { 63@Data class InterpretationValidationResult {
60 val List<String> problems; 64 val List<String> problems;
@@ -381,14 +385,28 @@ class LogicStructureBuilder{
381 return (left as Number).asInteger == (right as Number).asInteger 385 return (left as Number).asInteger == (right as Number).asInteger
382 } 386 }
383 } else return left.equals(right) 387 } else return left.equals(right)
384 } 388 }
385 389
386 def allIntegers(LogicModelInterpretation interpretation) { 390 private dispatch def allObjects(LogicModelInterpretation interpretation, ComplexTypeReference type) {
387 if(interpretation.minimalInteger <= interpretation.maximalInteger) { 391 return interpretation.getElements(type.referred)
388 (interpretation.minimalInteger .. interpretation.maximalInteger).map[asInteger] 392 }
389 } else return emptySet 393 private dispatch def allObjects(LogicModelInterpretation interpretation, BoolTypeReference type) {
394 return #[true,false]
395 }
396 private dispatch def allObjects(LogicModelInterpretation interpretation, IntTypeReference type) {
397 return interpretation.allIntegersInStructure
398 }
399 private dispatch def allObjects(LogicModelInterpretation interpretation, RealTypeReference type) {
400 return interpretation.allRealsInStructure
401 }
402 private dispatch def allObjects(LogicModelInterpretation interpretation, StringTypeReference type) {
403 return interpretation.allStringsInStructure
404 }
405 private dispatch def allObjects(LogicModelInterpretation interpretation, TypeReference type) {
406 throw new UnsupportedOperationException('''Unknown type :«type.class.simpleName»!''')
390 } 407 }
391 408
409
392 def private boolean executeExists( 410 def private boolean executeExists(
393 Term expression, 411 Term expression,
394 LogicModelInterpretation interpretation, 412 LogicModelInterpretation interpretation,
@@ -401,23 +419,13 @@ class LogicStructureBuilder{
401 } 419 }
402 else { 420 else {
403 val unfoldedVariable = variablesToBind.head 421 val unfoldedVariable = variablesToBind.head
404 val possibleValuesType = unfoldedVariable.range 422 val possibleValues = interpretation.allObjects(unfoldedVariable.range)
405 if(possibleValuesType instanceof ComplexTypeReference) { 423 return possibleValues.exists[newBinding |
406 return this.getElements(interpretation,possibleValuesType.referred).exists[newBinding | 424 executeExists(
407 executeExists( 425 expression,
408 expression, 426 interpretation,
409 interpretation, 427 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)],
410 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)], 428 variablesToBind.subList(1,variablesToBind.size))]
411 variablesToBind.subList(1,variablesToBind.size))]
412 } else if(possibleValuesType instanceof IntTypeReference) {
413 return interpretation.allIntegers.exists[newBinding |
414 executeExists(
415 expression,
416 interpretation,
417 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)],
418 variablesToBind.subList(1,variablesToBind.size))]
419 }
420 else throw new UnsupportedOperationException('''Quantifying over type "«possibleValuesType»" is unsupported.''')
421 } 429 }
422 } 430 }
423 431
@@ -432,22 +440,13 @@ class LogicStructureBuilder{
432 } 440 }
433 else { 441 else {
434 val unfoldedVariable = variablesToBind.head 442 val unfoldedVariable = variablesToBind.head
435 val possibleValuesType = unfoldedVariable.range 443 val possibleValues = interpretation.allObjects(unfoldedVariable.range)
436 if(possibleValuesType instanceof ComplexTypeReference) { 444 return possibleValues.forall[newBinding |
437 return this.getElements(interpretation,possibleValuesType.referred).forall[newBinding | 445 executeForall(
438 executeForall( 446 expression,
439 expression, 447 interpretation,
440 interpretation, 448 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)],
441 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)], 449 variablesToBind.subList(1,variablesToBind.size))]
442 variablesToBind.subList(1,variablesToBind.size))]
443 } else if(possibleValuesType instanceof IntTypeReference) {
444 return interpretation.allIntegers.forall[newBinding |
445 executeForall(
446 expression,
447 interpretation,
448 new HashMap(variableBinding) => [put(unfoldedVariable,newBinding)],
449 variablesToBind.subList(1,variablesToBind.size))]
450 } else throw new UnsupportedOperationException('''Quantifying over type "«possibleValuesType»" is unsupported.''')
451 } 450 }
452 } 451 }
453} \ No newline at end of file 452} \ No newline at end of file