aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.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/LogicModelInterpretation.xtend')
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend102
1 files changed, 102 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend
new file mode 100644
index 00000000..a2d30b1b
--- /dev/null
+++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicModelInterpretation.xtend
@@ -0,0 +1,102 @@
1package hu.bme.mit.inf.dslreasoner.logic.model.builder
2
3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
10import java.util.List
11
12import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
13
14interface LogicModelInterpretation{
15
16 /**
17 * Returns the elements of a type.
18 */
19 def List<DefinedElement> getElements(Type type)
20 /**
21 * Returns the interpretation of a function. The parameters and the return values are encoded to primitive java objects defined by the following table:
22 * <p><table>
23 * <tr><th>Term type</th><th>Java object type</th></tr>
24 * <tr><td>Element of a type </td><td>DefinedElement </td></tr>
25 * <tr><td>Boolean literal </td><td>Boolean </td></tr>
26 * <tr><td>Integer literal </td><td>Integer </td></tr>
27 * <tr><td>Real literal </td><td>BigDecimal </td></tr>
28 * </table></p>
29 * @param function The target function to be interpreted.
30 * @param parameterSubstitution The array of the substituted parameters encoded as defined in the table.
31 * @return The result of the function call encoded as defined in the table.
32 */
33 def Object getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution)
34 /**
35 * Returns the interpretation of a relation. The parameters are encoded to primitive java objects defined by the following table:
36 * <p><table>
37 * <tr><th>Term type</th><th>Java object type</th></tr>
38 * <tr><td>Element of a type </td><td>DefinedElement </td></tr>
39 * <tr><td>Boolean literal </td><td>Boolean </td></tr>
40 * <tr><td>Integer literal </td><td>Integer </td></tr>
41 * <tr><td>Real literal </td><td>BigDecimal </td></tr>
42 * </table></p>
43 * @param relation The target relation to be interpreted.
44 * @param parameterSubstitution The array of the substituted parameters encoded as defined in the table.
45 * @return If the parameter tuple is in the relation.
46 */
47 def boolean getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution)
48 /**
49 * Returns the interpretation of a constant. The value is encoded to primitive java objects defined by the following table:
50 * <p><table>
51 * <tr><th>Term type</th><th>Java object type</th></tr>
52 * <tr><td>Element of a type </td><td>DefinedElement </td></tr>
53 * <tr><td>Boolean literal </td><td>Boolean </td></tr>
54 * <tr><td>Integer literal </td><td>Integer </td></tr>
55 * <tr><td>Real literal </td><td>BigDecimal </td></tr>
56 * </table></p>
57 * @param constant The target constant to be interpreted.
58 * @return The value of the constant encoded as specified in the table.
59 */
60 def Object getInterpretation(ConstantDeclaration constant)
61 def int getMinimalInteger()
62 def int getMaximalInteger()
63}
64
65class Uninterpreted implements LogicModelInterpretation {
66 /*private val static unknownBecauseUninterpreted = LogiclanguageFactory.eINSTANCE.createUnknownBecauseUninterpreted
67 public def static getUnknownBecauseUninterpreted() {return Uninterpreted.unknownBecauseUninterpreted}*/
68
69 override getElements(Type type) {
70 throw new UnsupportedOperationException("The interpteration is unknown.")
71 }
72
73 def getKnownElements(Type type) {
74 val allSubtypes = type.transitiveClosureStar[it.subtypes]
75 return allSubtypes.filter(TypeDefinition).map[elements].flatten.toList
76 }
77
78 def allElementsAreInterpreted(Type type) {
79 val allSubtypes = type.transitiveClosureStar[it.subtypes]
80 return allSubtypes.exists[it instanceof TypeDeclaration]
81 }
82
83 override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) {
84 throw new UnsupportedOperationException("The interpteration is unknown.")
85 }
86
87 override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) {
88 throw new UnsupportedOperationException("The interpteration is unknown.")
89 }
90
91 override getInterpretation(ConstantDeclaration constant) {
92 throw new UnsupportedOperationException("The interpteration is unknown.")
93 }
94
95 override getMinimalInteger() {
96 throw new UnsupportedOperationException("The interpteration is unknown.")
97 }
98
99 override getMaximalInteger() {
100 throw new UnsupportedOperationException("The interpteration is unknown.")
101 }
102} \ No newline at end of file