diff options
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.xtend | 102 |
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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.logic.model.builder | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration | ||
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition | ||
10 | import java.util.List | ||
11 | |||
12 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
13 | |||
14 | interface 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 | |||
65 | class 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 | ||