From adce403870ea34f79cf2c59b88cdb5b2dcb438a8 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Wed, 5 Jul 2017 16:31:32 +0200 Subject: Support for generationg multiple difference models by VIATRA-Solver --- .../dse/PartialModelAsLogicInterpretation.xtend | 73 ++++++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend index b2a7e3f5..56c3c852 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend @@ -1,16 +1,68 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation -import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration -import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation +import java.util.HashMap +import java.util.List +import java.util.Map +import org.eclipse.emf.ecore.EObject + +import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink class PartialModelAsLogicInterpretation implements LogicModelInterpretation{ + val PartialInterpretation partialInterpretation + val Map trace; + val Map type2Interpretation + val Map relation2Interpretation + val Map elementBackwardTrace + new(PartialInterpretation partialInterpretation, Map forwardMap) { + this.partialInterpretation = partialInterpretation + this.trace = forwardMap + this.type2Interpretation = initTypes(partialInterpretation.partialtypeinterpratation) + this.relation2Interpretation = initRelations(partialInterpretation.partialrelationinterpretation) + this.elementBackwardTrace = initElementBackwardTrace(trace) + } + + def initTypes(List types) { + types.toMap[it.interpretationOf] + } + def initRelations(List relations) { + relations.toMap[it.interpretationOf] + } + def initElementBackwardTrace(Map trace) { + val entryBackwardMap = new HashMap + for(entry: trace.entrySet) { + if(entry.key instanceof DefinedElement) { + entryBackwardMap.put(entry.value as DefinedElement, entry.key as DefinedElement) + } + } + return entryBackwardMap + } override getElements(Type type) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + val t1 = type.lookup(trace) as TypeDeclaration + val t2 = t1.lookup(this.type2Interpretation) + return t2.elements.map[it.elementLookupBackward] + } + + def elementLookupForward(DefinedElement e) { + if(this.trace.containsKey(e)) return e.lookup(trace) as DefinedElement + else return e; + } + def elementLookupBackward(DefinedElement e) { + if(this.elementBackwardTrace.containsKey(e)) return e.lookup(this.elementBackwardTrace) + else return e; } override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) { @@ -18,13 +70,22 @@ class PartialModelAsLogicInterpretation implements LogicModelInterpretation{ } override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + if(parameterSubstitution.size == 2) { + val param1 = (parameterSubstitution.get(0) as DefinedElement).elementLookupForward + val param2 = (parameterSubstitution.get(1) as DefinedElement).elementLookupForward + val r1 = relation.lookup(trace) as RelationDeclaration + val r2 = r1.lookup(this.relation2Interpretation) + val links = r2.relationlinks.filter(BinaryElementRelationLink) + val existLink = links.exists[it.param1 == param1 && it.param2 == param2] + //println(existLink) + return existLink + } else throw new UnsupportedOperationException } override getInterpretation(ConstantDeclaration constant) { throw new UnsupportedOperationException("TODO: auto-generated method stub") } - override getMinimalInteger() { 0 } - override getMaximalInteger() {0 } + override getMinimalInteger() {0} + override getMaximalInteger() {0} } \ No newline at end of file -- cgit v1.2.3-54-g00ecf