apcollect.cc 1.82 KB
Newer Older
1
// -*- coding: utf-8 -*-
2
// Copyright (C) 2012, 2014, 2015 Laboratoire de Recherche et Développement
3
// de l'Epita (LRDE).
4
// Copyright (C) 2004, 2005  Laboratoire d'Informatique de Paris 6 (LIP6),
5
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
6
7
8
9
10
11
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
//
// Spot is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
12
// the Free Software Foundation; either version 3 of the License, or
13
14
15
16
17
18
19
20
// (at your option) any later version.
//
// Spot is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
21
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
23

#include "apcollect.hh"
24
25
#include "twa/twa.hh"
#include "twa/bdddict.hh"
26
27
28
29
30

namespace spot
{
  namespace ltl
  {
31
32
33
34
35
36
37
    atomic_prop_set create_atomic_prop_set(unsigned n)
    {
      atomic_prop_set res;
      for (unsigned i = 0; i < n; ++i)
	{
	  std::ostringstream p;
	  p << 'p' << i;
38
	  res.insert(formula::ap(p.str()));
39
40
41
42
	}
      return res;
    }

43
    atomic_prop_set*
44
    atomic_prop_collect(formula f, atomic_prop_set* s)
45
46
47
    {
      if (!s)
	s = new atomic_prop_set;
48
49
      f.traverse([&](const formula& f)
		 {
50
		   if (f.is(op::ap))
51
52
53
		     s->insert(f);
		   return false;
		 });
54
55
56
      return s;
    }

57
    bdd
58
    atomic_prop_collect_as_bdd(formula f, const twa_ptr& a)
59
60
61
62
    {
      spot::ltl::atomic_prop_set aps;
      atomic_prop_collect(f, &aps);
      bdd res = bddtrue;
63
64
      for (auto f: aps)
	res &= bdd_ithvar(a->register_ap(f));
65
66
      return res;
    }
67
68
  }
}