use of de.prob.model.eventb.EventBGuard in project prob2 by bendisposto.
the class EventBMachineTranslator method processEvents.
private AEventsModelClause processEvents() {
List<PEvent> events = new ArrayList<>();
for (Event e : machine.getEvents()) {
AEvent event = new AEvent();
event.setEventName(new TIdentifierLiteral(e.getName()));
event.setStatus(extractEventStatus(e));
nodeInfos.put(event, new Tuple2<>(machine.getName(), e.getName()));
List<TIdentifierLiteral> refined = new ArrayList<>();
for (Event ref : e.getRefines()) {
refined.add(new TIdentifierLiteral(ref.getName()));
}
event.setRefines(refined);
List<PExpression> params = new ArrayList<>();
for (EventParameter eventParameter : e.getParameters()) {
PExpression pExpression = (PExpression) eventParameter.getExpression().getAst();
nodeInfos.put(pExpression, new Tuple2<>(machine.getName(), eventParameter.getName()));
params.add(pExpression);
}
event.setVariables(params);
List<PPredicate> guards = new ArrayList<>();
List<PPredicate> thms = new ArrayList<>();
for (EventBGuard eventBGuard : e.getGuards()) {
PPredicate ppred = (PPredicate) ((EventB) eventBGuard.getPredicate()).getAst();
nodeInfos.put(ppred, new Tuple2<>(machine.getName(), eventBGuard.getName()));
if (eventBGuard.isTheorem()) {
thms.add(ppred);
} else {
guards.add(ppred);
}
}
event.setGuards(guards);
event.setTheorems(thms);
List<PWitness> witnesses = new ArrayList<>();
for (Witness witness : e.getWitnesses()) {
PPredicate ppred = (PPredicate) witness.getPredicate().getAst();
nodeInfos.put(ppred, new Tuple2<>(machine.getName(), witness.getName()));
witnesses.add(new AWitness(new TIdentifierLiteral(witness.getName()), ppred));
}
event.setWitness(witnesses);
List<PSubstitution> actions = new ArrayList<>();
for (EventBAction eventBAction : e.getActions()) {
PSubstitution psub = (PSubstitution) ((EventB) eventBAction.getCode()).getAst();
nodeInfos.put(psub, new Tuple2<>(machine.getName(), eventBAction.getName()));
actions.add(psub);
}
event.setAssignments(actions);
events.add(event);
}
return new AEventsModelClause(events);
}
use of de.prob.model.eventb.EventBGuard in project prob2 by bendisposto.
the class MachineXmlHandler method addGuard.
private void addGuard(final Attributes attributes) {
String name = attributes.getValue("org.eventb.core.label");
String predicate = attributes.getValue("org.eventb.core.predicate");
boolean theorem = "true".equals(attributes.getValue("org.eventb.core.theorem"));
guards.add(new EventBGuard(name, predicate, theorem, typeEnv));
}
use of de.prob.model.eventb.EventBGuard in project prob2 by bendisposto.
the class ProofExtractor method addProofs.
private void addProofs(final EventBMachine m) {
for (Map.Entry<String, String> entry : descriptions.entrySet()) {
String name = entry.getKey();
String desc = entry.getValue();
boolean isDischarged = discharged.contains(name);
String[] split = name.split("/");
String type;
if (split.length == 1) {
type = split[0];
} else if (split.length == 2) {
type = split[1];
} else {
type = split[2];
}
String source = m.getName();
List<Tuple2<String, String>> elements = new ArrayList<>();
if ("GRD".equals(type)) {
Event concreteEvent = m.getEvent(split[0]);
for (Event event : concreteEvent.getRefines()) {
if (event.getGuards().getElement(split[1]) != null) {
EventBGuard guard = event.getGuards().getElement(split[1]);
elements.add(new Tuple2<>("event", event.getName()));
elements.add(new Tuple2<>("guard", guard.getName()));
}
}
elements.add(new Tuple2<>("event", concreteEvent.getName()));
proofs.add(new ProofObligation(source, name, isDischarged, desc, elements));
} else if ("INV".equals(type)) {
elements.add(new Tuple2<>("event", "invariant"));
proofs.add(new ProofObligation(source, name, isDischarged, desc, elements));
} else if ("THM".equals(type)) {
if (split.length == 2) {
elements.add(new Tuple2<>("invariant", split[0]));
} else {
elements.add(new Tuple2<>("guard", split[1]));
elements.add(new Tuple2<>("event", split[0]));
}
proofs.add(new ProofObligation(source, name, isDischarged, desc, elements));
} else if ("WD".equals(type)) {
if (split.length == 2) {
elements.add(new Tuple2<>("invariant", split[0]));
} else {
Event event = m.getEvent(split[0]);
if (event.getActions().getElement(split[1]) != null) {
elements.add(new Tuple2<>("event", event.getName()));
elements.add(new Tuple2<>("action", split[1]));
} else {
elements.add(new Tuple2<>("event", event.getName()));
elements.add(new Tuple2<>("guard", split[1]));
}
proofs.add(new ProofObligation(source, name, isDischarged, desc, elements));
}
} else {
proofs.add(new ProofObligation(source, name, isDischarged, desc, elements));
}
}
}
Aggregations