~tapaal-ltl/verifypn/scc-optimise

« back to all changes in this revision

Viewing changes to src/PetriEngine/PQL/PQL.cpp

  • Committer: srba.jiri at gmail
  • Date: 2020-09-11 14:23:39 UTC
  • mfrom: (213.1.151 interval_tar)
  • Revision ID: srba.jiri@gmail.com-20200911142339-bq9328s1gppw24uj
merged in lp:~verifypn-maintainers/verifypn/interval_tar doing 
- Implements TAR w/o z3, but using a simple integer inference engine for Hoare logic.
 - Replaces LP-Solve with GLPK, reduces computation-time and memory overhead
 - Implements new global properties, translated into CTL formulae.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* PeTe - Petri Engine exTremE
 
2
 * Copyright (C) 2011  Jonas Finnemann Jensen <jopsen@gmail.com>,
 
3
 *                     Thomas Søndersø Nielsen <primogens@gmail.com>,
 
4
 *                     Lars Kærlund Østergaard <larsko@gmail.com>,
 
5
 * 
 
6
 * This program is free software: you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation, either version 3 of the License, or
 
9
 * (at your option) any later version.
 
10
 * 
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 * 
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
 */
 
19
#include "PetriEngine/PQL/PQL.h"
 
20
#include "PetriEngine/PQL/Contexts.h"
 
21
#include "PetriEngine/PQL/Expressions.h"
 
22
 
 
23
namespace PetriEngine {
 
24
    namespace PQL {
 
25
 
 
26
        Expr::~Expr()= default;
 
27
        
 
28
        bool Condition::isTriviallyTrue() {
 
29
            if (trivial == 1) {
 
30
                return true;
 
31
            }
 
32
            
 
33
            return false;
 
34
        }
 
35
        
 
36
        bool Condition::isTriviallyFalse() {
 
37
            if (trivial == 2) {
 
38
                return true;
 
39
            }
 
40
            
 
41
            return false;
 
42
        }
 
43
        
 
44
        Condition::~Condition() = default;
 
45
 
 
46
        Condition_ptr Condition::initialMarkingRW(const std::function<Condition_ptr()>& func, negstat_t& stats, const EvaluationContext& context, bool nested, bool negated, bool initrw)
 
47
        {
 
48
            auto res = func();
 
49
            if(!nested && initrw)
 
50
            {
 
51
                auto e = res->evaluate(context);
 
52
                if(e != Condition::RUNKNOWN) 
 
53
                {
 
54
                    if(res->getQuantifier() == E && res->getPath() == F)
 
55
                    {
 
56
                        auto ef = static_cast<EFCondition*>(res.get());
 
57
                        if(dynamic_cast<UnfoldedUpperBoundsCondition*>((*ef)[0].get()))
 
58
                        {
 
59
                            return res;
 
60
                        }
 
61
                    }
 
62
                    return BooleanCondition::getShared(e);
 
63
                }
 
64
            }
 
65
            return res;            
 
66
        }
 
67
 
 
68
 
 
69
    } // PQL
 
70
} // PetriEngine