diff options
author | OszkarSemerath <oszka@152.66.252.189> | 2017-06-10 19:05:05 +0200 |
---|---|---|
committer | OszkarSemerath <oszka@152.66.252.189> | 2017-06-10 19:05:05 +0200 |
commit | 60f01f46ba232ed6416054f0a6115cb2a9b70b4e (patch) | |
tree | 5edf8aeb07abc51f3fec63bbd15c926e1de09552 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend | |
parent | Initial commit, migrating from SVN (diff) | |
download | VIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.tar.gz VIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.tar.zst VIATRA-Generator-60f01f46ba232ed6416054f0a6115cb2a9b70b4e.zip |
Migrating Additional projects
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend')
1 files changed, 112 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend new file mode 100644 index 00000000..eeccbf76 --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend | |||
@@ -0,0 +1,112 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory | ||
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition | ||
11 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
12 | import hu.bme.mit.inf.dslreasoner.logic.model.patterns.SupertypeStarMatcher | ||
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialConstantInterpretation | ||
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialFunctionInterpretation | ||
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation | ||
17 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation | ||
18 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationFactory | ||
19 | import java.util.HashMap | ||
20 | import java.util.Map | ||
21 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine | ||
22 | import org.eclipse.viatra.query.runtime.emf.EMFScope | ||
23 | import org.eclipse.xtend.lib.annotations.Data | ||
24 | |||
25 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
26 | |||
27 | @Data class Problem2PartialInterpretationTrace { | ||
28 | Map<TypeDeclaration, PartialTypeInterpratation> type2Interpretation = new HashMap | ||
29 | Map<RelationDeclaration, PartialRelationInterpretation> relation2Interpretation = new HashMap | ||
30 | } | ||
31 | |||
32 | class PartialInterpretationInitialiser { | ||
33 | val extension PartialinterpretationFactory factory = PartialinterpretationFactory.eINSTANCE | ||
34 | val extension LogiclanguageFactory factory2 = LogiclanguageFactory.eINSTANCE | ||
35 | |||
36 | /** | ||
37 | * Initialises an empty partial interpretation from a logic problem | ||
38 | */ | ||
39 | def TracedOutput<PartialInterpretation,Problem2PartialInterpretationTrace> initialisePartialInterpretation( | ||
40 | LogicProblem problem, | ||
41 | int minNewElement, int maxNewElement) | ||
42 | { | ||
43 | val engine = ViatraQueryEngine.on(new EMFScope(problem)) | ||
44 | val trace = new Problem2PartialInterpretationTrace | ||
45 | |||
46 | val res = createPartialInterpretation => [ | ||
47 | it.problem = problem | ||
48 | it.openWorldElementPrototype = createDefinedElement => [it.name = "Symbolic New Element"] | ||
49 | it.minNewElements = minNewElement | ||
50 | it.maxNewElements = maxNewElement | ||
51 | |||
52 | for(typeDeclaration : problem.types.filter(TypeDeclaration)) { | ||
53 | it.partialtypeinterpratation += typeDeclaration.initialisePartialTypeInterpretation(engine,trace) | ||
54 | } | ||
55 | problem.connectSuperypes(trace) | ||
56 | |||
57 | it.partialrelationinterpretation += problem.relations.filter(RelationDeclaration) | ||
58 | .map[initialisePartialRelationInterpretation(trace)] | ||
59 | it.partialfunctioninterpretation += problem.functions.filter(FunctionDeclaration) | ||
60 | .map[initialisePartialFunctionInterpretation(trace)] | ||
61 | it.partialconstantinterpretation += problem.constants.filter(ConstantDeclaration) | ||
62 | .map[initialisePartialConstantDeclaration(trace)] | ||
63 | ] | ||
64 | |||
65 | return new TracedOutput(res,trace) | ||
66 | } | ||
67 | |||
68 | /** | ||
69 | * Initialize type with existing elements | ||
70 | */ | ||
71 | def private initialisePartialTypeInterpretation(TypeDeclaration t, ViatraQueryEngine engine, Problem2PartialInterpretationTrace trace) { | ||
72 | val supertypeMatcher = SupertypeStarMatcher.on(engine) | ||
73 | val res = createPartialTypeInterpratation => [ | ||
74 | it.interpretationOf = t | ||
75 | it.elements += supertypeMatcher.getAllValuesOfsubtype(t) | ||
76 | .filter(TypeDefinition) | ||
77 | .map[elements].flatten | ||
78 | ] | ||
79 | trace.type2Interpretation.put(t,res) | ||
80 | return res | ||
81 | } | ||
82 | |||
83 | def private connectSuperypes(LogicProblem problem, Problem2PartialInterpretationTrace trace) { | ||
84 | for(typeDeclaration : problem.types.filter(TypeDeclaration)) { | ||
85 | val supertypes = typeDeclaration.<Type>transitiveClosurePlus[it.supertypes] | ||
86 | for(supertype : supertypes.filter(TypeDeclaration)) { | ||
87 | typeDeclaration.lookup(trace.type2Interpretation).supertypeInterpretation += supertype.lookup(trace.type2Interpretation) | ||
88 | //println('''«typeDeclaration.name» --> «supertype.name»''') | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | |||
93 | def private initialisePartialRelationInterpretation(RelationDeclaration r, Problem2PartialInterpretationTrace trace) { | ||
94 | val res = createPartialRelationInterpretation => [ | ||
95 | it.interpretationOf = r | ||
96 | if(r.parameters.size==2) { | ||
97 | it.param1 = r.parameters.get(0) | ||
98 | it.param2 = r.parameters.get(1) | ||
99 | } else throw new UnsupportedOperationException | ||
100 | ] | ||
101 | trace.relation2Interpretation.put(r,res) | ||
102 | return res | ||
103 | } | ||
104 | |||
105 | def private PartialConstantInterpretation initialisePartialConstantDeclaration(ConstantDeclaration c, Problem2PartialInterpretationTrace trace) { | ||
106 | throw new UnsupportedOperationException | ||
107 | } | ||
108 | |||
109 | def private PartialFunctionInterpretation initialisePartialFunctionInterpretation(FunctionDeclaration f, Problem2PartialInterpretationTrace trace) { | ||
110 | throw new UnsupportedOperationException | ||
111 | } | ||
112 | } \ No newline at end of file | ||