From 5a286dab2c1d23e16aad6e96e3ad93d0e15cb931 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Wed, 27 Sep 2017 21:10:32 +0200 Subject: PS with outgoing references to excluded objects are supported now --- .../InstanceModel2PartialInterpretation.xtend | 8 ++++--- .../PartialInterpretation2Logic.xtend | 25 ++++++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend index 1bda1f49..d9c1b8f6 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/InstanceModel2PartialInterpretation.xtend @@ -82,8 +82,10 @@ class InstanceModel2PartialInterpretation { if(reference.isMany) { val listOfTargets = source.eGet(reference) as List for(target : listOfTargets) { - val targetElement = target.lookup(object2DefinedElement) - translateLink(interpretation,sourceElement,targetElement) + if(target !== null && object2DefinedElement.containsKey(target)) { + val targetElement = target.lookup(object2DefinedElement) + translateLink(interpretation,sourceElement,targetElement) + } } } else { val target = source.eGet(reference) as EObject @@ -95,7 +97,7 @@ class InstanceModel2PartialInterpretation { } // Transforming the attributes - for(attribute : source.eClass.EAllAttributes.filter[referencesUsed.contains(it)]) { + for(attribute : source.eClass.EAllAttributes.filter[attributesUsed.contains(it)]) { val type = ecore2Logic.relationOfAttribute(ecore2LogicTrace,attribute) val interpretation = type.lookup(partialInterpretationTrace.relation2Interpretation) val sourceElement = source.lookup(object2DefinedElement) diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend index c5fe1d74..09a7fa60 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend @@ -20,8 +20,12 @@ import java.util.Set import org.eclipse.xtend.lib.annotations.Data import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.SymbolicValue @Data class PartialInterpretation2Logic_Trace { + Map new2Old = new HashMap + Map definedPart = new HashMap Map undefinedPart = new HashMap Set originalTypes = new HashSet @@ -38,7 +42,7 @@ class PartialInterpretation2Logic { if(! i.newElements.empty) { // Elements adding - addExistingElementToProblem(p,i) + addExistingElementToProblem(p,i,trace) // Types for(partialTypeDeclaration : i.partialtypeinterpratation) { @@ -48,12 +52,13 @@ class PartialInterpretation2Logic { // Relations for(partialRelationInterpretation : i.partialrelationinterpretation) { + //println(partialRelationInterpretation.interpretationOf.name) relationLinksToAssertion(p,partialRelationInterpretation,trace) } } } - private def addExistingElementToProblem(LogicProblem p, PartialInterpretation i) { + private def addExistingElementToProblem(LogicProblem p, PartialInterpretation i,PartialInterpretation2Logic_Trace trace) { val newElements = new ArrayList(i.newElements) var newElementIndex = 1 for(newElement : newElements) { @@ -136,6 +141,8 @@ class PartialInterpretation2Logic { links.map[link|createLink(link,relation)].And } val assertion = Assertion('''PartialInterpretation «r.interpretationOf.name»''',term) + //val error= assertion.eAllContents.toIterable.filter(SymbolicValue).filter[it.symbolicReference === null] + //error.forEach[println("error")] p.add(assertion) } @@ -143,11 +150,15 @@ class PartialInterpretation2Logic { def private createLink(RelationLink link, SymbolicDeclaration relationDeclaration) { if(link instanceof BinaryElementRelationLink) { - return createSymbolicValue=>[ - it.symbolicReference=relationDeclaration - it.parameterSubstitutions += createSymbolicValue => [link.param1] - it.parameterSubstitutions += createSymbolicValue => [link.param2] - ] + if((link.param1 !== null) && (link.param2 !== null)) { + return createSymbolicValue=>[ + it.symbolicReference=relationDeclaration + it.parameterSubstitutions += createSymbolicValue => [it.symbolicReference = link.param1] + it.parameterSubstitutions += createSymbolicValue => [it.symbolicReference = link.param2] + ] + } else { + throw new IllegalArgumentException + } } else throw new UnsupportedOperationException } } \ No newline at end of file -- cgit v1.2.3-54-g00ecf