/** * Operation processing is identical in extension except for context generation. So, a quick trick here. * * @param node * @param question * @param precond * @throws AnalysisException */ protected void collectOpCtxt(AExplicitOperationDefinition node, IPOContextStack question, Boolean precond) throws AnalysisException { question.push(new POOperationDefinitionContext(node, precond, node.getState())); }
@Override public IProofObligationList caseAExists1Exp(AExists1Exp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); question.push(new POForAllContext(aF, node)); obligations.addAll(node.getPredicate().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseAPerSyncDefinition(APerSyncDefinition node, IPOContextStack question) throws AnalysisException { try { question.push(new PONameContext(new LexNameList(node.getOpname()))); IProofObligationList list = node.getGuard().apply(rootVisitor, question); question.pop(); return list; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseABlockSimpleBlockStm( ABlockSimpleBlockStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = aF.createPDefinitionAssistant().getProofObligations(node.getAssignmentDefs(), rootVisitor, question); question.push(new POScopeContext()); obligations.addAll(defaultSSimpleBlockStm(node, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
public IProofObligationList getProofObligations( LinkedList<? extends PDefinition> defs, QuestionAnswerAdaptor<IPOContextStack, ? extends IProofObligationList> pogVisitor, IPOContextStack ctxt) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (PDefinition d : defs) { ctxt.push(new PONameContext(getVariableNames(d))); obligations.addAll(d.apply(pogVisitor, ctxt)); ctxt.pop(); } return obligations; }
@Override public IProofObligationList caseAElseIfExp(AElseIfExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); question.push(new POImpliesContext(node.getElseIf())); obligations.addAll(node.getThen().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseACaseAlternative(ACaseAlternative node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = new ProofObligationList(); question.push(new POCaseContext(node.getPattern(), node.getType(), node.getCexp(), assistantFactory)); obligations.addAll(node.getResult().apply(this.pogExpVisitor, question)); question.pop(); question.push(new PONotCaseContext(node.getPattern(), node.getType(), node.getCexp(), assistantFactory)); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseALetStm(ALetStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = new ProofObligationList(); for (PDefinition localDef : node.getLocalDefs()) { // PDefinitionAssistantTC.get question.push(new PONameContext(aF.createPDefinitionAssistant().getVariableNames(localDef))); obligations.addAll(localDef.apply(rootVisitor, question)); question.pop(); } question.push(new POScopeContext()); obligations.addAll(node.getStatement().apply(mainVisitor, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseADefExp(ADefExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = aF.createPDefinitionAssistant().getProofObligations(node.getLocalDefs(), rootVisitor, question); question.push(new PODefContext(node)); obligations.addAll(node.getExpression().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override // RWL see [1] pg. public IProofObligationList caseALetDefExp(ALetDefExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (PDefinition def : node.getLocalDefs()) { question.push(new PONameContext(aF.createPDefinitionAssistant().getVariableNames(def))); obligations.addAll(def.apply(rootVisitor, question)); question.pop(); } question.push(new POLetDefContext(node)); obligations.addAll(node.getExpression().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseAIfExp(AIfExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = node.getTest().apply(mainVisitor, question); question.push(new POImpliesContext(node.getTest())); obligations.addAll(node.getThen().apply(mainVisitor, question)); question.pop(); question.push(new PONotImpliesContext(node.getTest())); for (AElseIfExp e : node.getElseList()) { obligations.addAll(e.apply(mainVisitor, question)); question.push(new PONotImpliesContext(e.getElseIf())); } int sizeBefore = question.size(); obligations.addAll(node.getElse().apply(mainVisitor, question)); assert sizeBefore <= question.size(); for (int i = 0; i < node.getElseList().size(); i++) { question.pop(); } question.pop(); return obligations; }
@Override public IProofObligationList caseAIotaExp(AIotaExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = node.getBind().apply(rootVisitor, question); obligations.add(new UniqueExistenceObligation(node, question, aF)); question.push(new POForAllContext(aF, node)); obligations.addAll(node.getPredicate().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseAForAllExp(AForAllExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (PMultipleBind mb : node.getBindList()) { obligations.addAll(mb.apply(rootVisitor, question)); } question.push(new POForAllContext(node)); obligations.addAll(node.getPredicate().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseAExistsExp(AExistsExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (PMultipleBind mb : node.getBindList()) { obligations.addAll(mb.apply(rootVisitor, question)); } question.push(new POForAllContext(node)); obligations.addAll(node.getPredicate().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override // RWL See [1] pg.95 public IProofObligationList caseALetBeStExp(ALetBeStExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); obligations.add(new LetBeExistsObligation(node, question, aF)); obligations.addAll(node.getBind().apply(rootVisitor, question)); PExp suchThat = node.getSuchThat(); if (suchThat != null) { question.push(new POForAllContext(node, aF)); obligations.addAll(suchThat.apply(mainVisitor, question)); question.pop(); } question.push(new POForAllPredicateContext(node, aF)); obligations.addAll(node.getValue().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override // See [1] pg. 167 for the definition public IProofObligationList caseAModuleModules(AModuleModules node, IPOContextStack question) throws AnalysisException { IProofObligationList ipol = new ProofObligationList(); for (PDefinition p : node.getDefs()) { question.push(new PONameContext(assistantFactory.createPDefinitionAssistant().getVariableNames(p))); ipol.addAll(p.apply(this, question)); question.pop(); question.clearStateContexts(); } return ipol; }
@Override // RWL See [1] pg. 62 public IProofObligationList caseALambdaExp(ALambdaExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (ATypeBind tb : node.getBindList()) { obligations.addAll(tb.apply(rootVisitor, question)); } question.push(new POForAllContext(node)); obligations.addAll(node.getExpression().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseAClassClassDefinition( AClassClassDefinition node, IPOContextStack question) throws AnalysisException { try { IProofObligationList proofObligationList = new ProofObligationList(); question.setGenerator(new UniqueNameGenerator(node)); for (PDefinition def : node.getDefinitions()) { question.push(new PONameContext(assistantFactory.createPDefinitionAssistant().getVariableNames(def))); proofObligationList.addAll(def.apply(mainVisitor, question)); question.pop(); question.clearStateContexts(); } return proofObligationList; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseAForIndexStm(AForIndexStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = node.getFrom().apply(rootVisitor, question); obligations.addAll(node.getTo().apply(rootVisitor, question)); if (node.getBy() != null) { obligations.addAll(node.getBy().apply(rootVisitor, question)); } question.push(new POScopeContext()); obligations.addAll(node.getStatement().apply(mainVisitor, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseALetBeStStm(ALetBeStStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = new ProofObligationList(); obligations.add(new LetBeExistsObligation(node, question, aF)); obligations.addAll(node.getBind().apply(rootVisitor, question)); if (node.getSuchThat() != null) { obligations.addAll(node.getSuchThat().apply(rootVisitor, question)); } question.push(new POScopeContext()); obligations.addAll(node.getStatement().apply(mainVisitor, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }