Commit 5a9b0aa1 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz

python: add bindings for ltsmin

* python/spot/ltsmin.i: New file.
* python/Makefile.am: Add it.
* python/spot/impl.i: Add bindings for kripke and fair_kripke.
* tests/python/ltsmin.ipynb: New file.
* tests/Makefile.am, doc/org/tut.org: Add it.
* tests/python/ipnbdoctest.py: Make it possible for notebook
to exit(77).
* debian/control: Make the Python package dependent
on libspotltsmin0.
* python/spot/__init__.py: Typo.
parent 215fcb79
......@@ -30,7 +30,7 @@ Package: libspot-dev
Architecture: any
Section: libdevel
Suggests: spot-doc
Depends: libspot0 (>= ${source:Version}), libspot0 (<< ${source:Version}.1~), libspotltsmin0 (>= ${source:Version}) , libspotltsmin0 (<< ${source:Version}.1~), ${misc:Depends}, libbddx-dev
Depends: libspot0 (>= ${source:Version}), libspot0 (<< ${source:Version}.1~), libspotltsmin0 (>= ${source:Version}), libspotltsmin0 (<< ${source:Version}.1~), ${misc:Depends}, libbddx-dev
Description: headers for the Spot model checking library
C++ headers for the Spot library.
......@@ -70,7 +70,7 @@ Description: documentation for Spot
Package: python3-spot
Architecture: any
Section: python
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}, libspot0 (>= ${source:Version}), libspot0 (<< ${source:Version}.1~)
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}, libspot0 (>= ${source:Version}), libspot0 (<< ${source:Version}.1~), libspotltsmin0 (>= ${source:Version}), libspotltsmin0 (<< ${source:Version}.1~)
Suggests: ipython3
Description: python3 binding for spot
Spot allows manipulation of omega-automata as well
......
......@@ -59,5 +59,7 @@ real notebooks instead.
in Python
- [[https://spot.lrde.epita.fr/ipynb/randltl.html][=randltl.ipynb=]] demonstrates a Python-version of [[file:randltl.org][=randltl=]]
- [[https://spot.lrde.epita.fr/ipynb/decompose.html][=decompose.ipynb=]] illustrates the =decompose_strength()= function
- [[https://spot.lrde.epita.fr/ipynb/testingaut.html][=testingaut.ipynb=]] shows the step necessary to build a testing
- [[https://spot.lrde.epita.fr/ipynb/testingaut.html][=testingaut.ipynb=]] shows the steps necessary to build a testing
automaton
- [[https://spot.lrde.epita.fr/ipynb/ltsmin.html][=ltsmin.ipynb=]] minimal test for loading a DiVinE model using
the LTSmin interface.
......@@ -32,15 +32,17 @@ AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_builddir) -I$(top_srcdir) \
# this.
SWIGFLAGS = -c++ -python -py3 -O -nofastproxy
EXTRA_DIST = spot/impl.i buddy.i
EXTRA_DIST = buddy.i spot/impl.i spot/ltsmin.i
python_PYTHON = \
$(srcdir)/spot/__init__.py \
$(srcdir)/spot/impl.py \
$(srcdir)/spot/ltsmin.py \
$(srcdir)/buddy.py
pyexec_LTLIBRARIES = spot/_impl.la _buddy.la
pyexec_LTLIBRARIES = _buddy.la spot/_impl.la spot/_ltsmin.la
MAINTAINERCLEANFILES = \
$(srcdir)/spot/impl_wrap.cxx $(srcdir)/spot/impl.py \
$(srcdir)/spot/ltsmin_wrap.cxx $(srcdir)/spot/ltsmin.py \
$(srcdir)/buddy_wrap.cxx $(srcdir)/buddy.py
## spot
......@@ -56,6 +58,20 @@ $(srcdir)/spot/impl.py: $(srcdir)/spot/impl.i
$(MAKE) $(AM_MAKEFLAGS) spot/impl_wrap.cxx
## spot-ltsmin
spot__ltsmin_la_SOURCES = $(srcdir)/spot/ltsmin_wrap.cxx
spot__ltsmin_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS)
spot__ltsmin_la_LIBADD = $(top_builddir)/spot/libspot.la \
$(top_builddir)/spot/ltsmin/libspotltsmin.la
$(srcdir)/spot/ltsmin_wrap.cxx: $(srcdir)/spot/ltsmin.i
$(SWIG) $(SWIGFLAGS) -I$(srcdir) -I$(top_srcdir) $(srcdir)/spot/ltsmin.i
$(srcdir)/spot/ltsmin.py: $(srcdir)/spot/ltsmin.i
$(MAKE) $(AM_MAKEFLAGS) spot/ltsmin_wrap.cxx
## buddy
_buddy_la_SOURCES = $(srcdir)/buddy_wrap.cxx
......
......@@ -872,5 +872,5 @@ def sat_minimize(aut, acc=None, colored=False,
args += ',max-states=' + str(max_states)
if dichotomy:
args += ',dichotomy';
from spot_impl import sat_minimize as sm
from spot.impl import sat_minimize as sm
return sm(aut, args, state_based)
......@@ -143,6 +143,9 @@
#include <spot/parseaut/public.hh>
#include <spot/kripke/kripke.hh>
#include <spot/kripke/fairkripke.hh>
#include <spot/ta/ta.hh>
#include <spot/ta/tgta.hh>
#include <spot/ta/taexplicit.hh>
......@@ -434,6 +437,9 @@ namespace std {
%include <spot/parseaut/public.hh>
%include <spot/kripke/fairkripke.hh>
%include <spot/kripke/kripke.hh>
%include <spot/ta/ta.hh>
%include <spot/ta/tgta.hh>
%include <spot/ta/taexplicit.hh>
......
// -*- coding: utf-8 -*-
// Copyright (C) 2016 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
//
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// along with this program. If not, see <http://www.gnu.org/licenses/>.
%{
// Workaround for SWIG 2.0.2 using ptrdiff_t but not including cstddef.
// It matters with g++ 4.6.
#include <cstddef>
%}
%module(package="spot", director="1") ltsmin
%include "std_string.i"
%include "std_set.i"
%include "std_shared_ptr.i"
%shared_ptr(spot::bdd_dict)
%shared_ptr(spot::twa)
%shared_ptr(spot::kripke)
%shared_ptr(spot::fair_kripke)
%{
#include <spot/ltsmin/ltsmin.hh>
using namespace spot;
%}
%import(module="spot.impl") <spot/misc/common.hh>
%import(module="spot.impl") <spot/twa/bdddict.hh>
%import(module="spot.impl") <spot/twa/twa.hh>
%import(module="spot.impl") <spot/tl/formula.hh>
%import(module="spot.impl") <spot/tl/apcollect.hh>
%import(module="spot.impl") <spot/kripke/fairkripke.hh>
%import(module="spot.impl") <spot/kripke/kripke.hh>
namespace std {
%template(atomic_prop_set) set<spot::formula>;
}
%include <spot/ltsmin/ltsmin.hh>
%pythoncode %{
import spot
def load(filename, ap_set, dict=spot._bdd_dict,
dead=spot.formula_ap('dead'),
compress=2, debug=False):
s = spot.atomic_prop_set()
for ap in ap_set:
s.insert(spot.formula_ap(ap))
return load_ltsmin(filename, dict, s, dead, compress, debug)
%}
......@@ -298,6 +298,7 @@ TESTS_python = \
python/ltl2tgba.test \
python/ltlparse.py \
python/ltlsimple.py \
python/ltsmin.ipynb \
python/minato.py \
python/optionmap.py \
python/parsetgba.py \
......@@ -315,6 +316,8 @@ TESTS_python = \
python/trival.py
endif
CLEANFILES = python/finite.dve2C python/finite.dve.cpp
SUFFIXES = .ipynb .html
.ipynb.html:
$(IPYTHON) nbconvert $< --to html --stdout >$@
......
......@@ -185,6 +185,10 @@ def run_cell(kc, cell):
out.ename = content['ename']
out.evalue = content['evalue']
out.traceback = content['traceback']
# sys.exit(77) is used to Skip the test.
if out.ename == 'SystemExit' and out.evalue == '77':
sys.exit(77)
else:
print("unhandled iopub msg:", msg_type)
......
{
"metadata": {
"name": "",
"signature": "sha256:d5994cc04991eaf218539c16319f17128cf42be5d813785fd977ee3d991a5c00"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This first chunk just makes sure the version of divine instaled accepts the `--LTSmin` option. If that is not the case, this notebook should be skipped by the test suite: `sys.exit(77)` does that."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import os, sys\n",
"srcdir = os.environ.get('srcdir', '.')\n",
"# Make sure we have divine and that it is patched to accept the --LTSmin option.\n",
"import shutil\n",
"if shutil.which(\"divine\") == None:\n",
" sys.exit(77)\n",
"import subprocess\n",
"out = subprocess.check_output(['divine', 'compile', '--help'], stderr=subprocess.STDOUT)\n",
"if b'LTSmin' not in out:\n",
" sys.exit(77)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The real test case starts here."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import spot\n",
"import spot.ltsmin\n",
"spot.setup()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"m = spot.ltsmin.load(srcdir + '/../ltsmin/finite.dve', ['P.a<1', 'P.b>2'])\n",
"m"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"734pt\" height=\"114pt\"\n",
" viewBox=\"0.00 0.00 734.00 114.05\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.410264 0.410264) rotate(0) translate(4 274)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-274 1785.09,-274 1785.09,4 -4,4\"/>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"97.1448\" cy=\"-126\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"97.1448\" y=\"-122.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.06896,-126C2.11771,-126 15.0011,-126 30.9641,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9685,-126 30.9685,-129.15 34.4685,-126 30.9685,-126 30.9685,-126 30.9685,-126 34.4685,-126 30.9684,-122.85 37.9685,-126 37.9685,-126\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"414.434\" cy=\"-151\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"414.434\" y=\"-147.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M154.512,-130.469C209.377,-134.82 292.624,-141.421 349.831,-145.957\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"357.024,-146.527 349.797,-149.114 353.535,-146.25 350.046,-145.974 350.046,-145.974 350.046,-145.974 353.535,-146.25 350.295,-142.834 357.024,-146.527 357.024,-146.527\"/>\n",
"<text text-anchor=\"start\" x=\"174.29\" y=\"-148.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node4\" class=\"node\"><title>12</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"414.434\" cy=\"-97\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"414.434\" y=\"-93.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;12 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M149.262,-117.331C157.61,-116.092 166.179,-114.926 174.29,-114 233.096,-107.288 300.359,-102.788 348.54,-100.113\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"355.805,-99.715 348.988,-103.243 352.31,-99.9063 348.816,-100.098 348.816,-100.098 348.816,-100.098 352.31,-99.9063 348.643,-96.9523 355.805,-99.715 355.805,-99.715\"/>\n",
"<text text-anchor=\"start\" x=\"174.29\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"735.724\" cy=\"-181\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"735.724\" y=\"-177.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=2, P.b=0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M470.738,-156.905C477.751,-157.626 484.832,-158.34 491.579,-159 552.693,-164.975 622.506,-171.233 671.6,-175.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"678.69,-176.161 671.441,-178.688 675.203,-175.856 671.716,-175.55 671.716,-175.55 671.716,-175.55 675.203,-175.856 671.991,-172.412 678.69,-176.161 678.69,-176.161\"/>\n",
"<text text-anchor=\"start\" x=\"491.579\" y=\"-176.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node6\" class=\"node\"><title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"735.724\" cy=\"-124\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"735.724\" y=\"-120.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;9 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M471.154,-145.816C478.032,-145.194 484.966,-144.576 491.579,-144 552.509,-138.694 622.062,-133.01 671.124,-129.063\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"678.211,-128.494 671.486,-132.195 674.722,-128.774 671.234,-129.055 671.234,-129.055 671.234,-129.055 674.722,-128.774 670.981,-125.915 678.211,-128.494 678.211,-128.494\"/>\n",
"<text text-anchor=\"start\" x=\"491.579\" y=\"-147.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;9 -->\n",
"<g id=\"edge21\" class=\"edge\"><title>12&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M473.536,-99.0371C522.878,-101.137 595.516,-105.101 658.579,-112 664.412,-112.638 670.48,-113.41 676.532,-114.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"683.614,-115.265 676.238,-117.39 680.149,-114.768 676.685,-114.272 676.685,-114.272 676.685,-114.272 680.149,-114.768 677.132,-111.154 683.614,-115.265 683.614,-115.265\"/>\n",
"<text text-anchor=\"start\" x=\"493.579\" y=\"-115.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\"><title>13</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"735.724\" cy=\"-67\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"735.724\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=2</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;13 -->\n",
"<g id=\"edge22\" class=\"edge\"><title>12&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M463.206,-86.5822C472.576,-84.8242 482.358,-83.1873 491.579,-82 551.55,-74.278 620.371,-70.5027 669.453,-68.6743\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"676.548,-68.4184 669.666,-71.8187 673.05,-68.5446 669.553,-68.6708 669.553,-68.6708 669.553,-68.6708 673.05,-68.5446 669.439,-65.5228 676.548,-68.4184 676.548,-68.4184\"/>\n",
"<text text-anchor=\"start\" x=\"493.579\" y=\"-85.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node7\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1057.01\" cy=\"-219\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1057.01\" y=\"-215.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=3, P.b=0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M785.779,-190.641C794.768,-192.231 804.084,-193.761 812.869,-195 873.519,-203.554 943.108,-210.094 992.255,-214.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"999.354,-214.754 992.12,-217.32 995.866,-214.467 992.378,-214.18 992.378,-214.18 992.378,-214.18 995.866,-214.467 992.636,-211.041 999.354,-214.754 999.354,-214.754\"/>\n",
"<text text-anchor=\"start\" x=\"812.869\" y=\"-216.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node8\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1057.01\" cy=\"-162\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1057.01\" y=\"-158.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=2, P.b=1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M793.806,-177.603C849.367,-174.297 933.671,-169.28 991.603,-165.833\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"998.888,-165.399 992.087,-168.96 995.394,-165.607 991.9,-165.815 991.9,-165.815 991.9,-165.815 995.394,-165.607 991.713,-162.671 998.888,-165.399 998.888,-165.399\"/>\n",
"<text text-anchor=\"start\" x=\"812.869\" y=\"-179.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\"><title>9&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M793.383,-128.246C842.763,-132.268 916.235,-139.026 979.869,-148 986.319,-148.91 993.057,-149.977 999.742,-151.109\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1006.96,-152.359 999.524,-154.268 1003.51,-151.762 1000.06,-151.164 1000.06,-151.164 1000.06,-151.164 1003.51,-151.762 1000.6,-148.061 1006.96,-152.359 1006.96,-152.359\"/>\n",
"<text text-anchor=\"start\" x=\"812.869\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node13\" class=\"node\"><title>10</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1057.01\" cy=\"-105\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1057.01\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=2</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge17\" class=\"edge\"><title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M779.906,-111.991C790.594,-109.519 802.077,-107.281 812.869,-106 873.199,-98.8403 942.543,-99.4149 991.699,-101.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"998.801,-101.576 991.68,-104.442 995.304,-101.435 991.807,-101.294 991.807,-101.294 991.807,-101.294 995.304,-101.435 991.933,-98.147 998.801,-101.576 998.801,-101.576\"/>\n",
"<text text-anchor=\"start\" x=\"812.869\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1029.39,-234.916C1022.18,-245.15 1031.39,-255 1057.01,-255 1076.63,-255 1086.63,-249.226 1087,-241.927\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1084.64,-234.916 1089.86,-240.544 1085.76,-238.233 1086.88,-241.55 1086.88,-241.55 1086.88,-241.55 1085.76,-238.233 1083.89,-242.555 1084.64,-234.916 1084.64,-234.916\"/>\n",
"<text text-anchor=\"start\" x=\"975.513\" y=\"-258.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node9\" class=\"node\"><title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1378.3\" cy=\"-208\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1378.3\" y=\"-204.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=3, P.b=1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1102.93,-173.541C1113.15,-175.909 1123.99,-178.219 1134.16,-180 1194.79,-190.621 1264.67,-198.188 1313.91,-202.756\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1321.02,-203.408 1313.76,-205.906 1317.54,-203.089 1314.05,-202.769 1314.05,-202.769 1314.05,-202.769 1317.54,-203.089 1314.34,-199.632 1321.02,-203.408 1321.02,-203.408\"/>\n",
"<text text-anchor=\"start\" x=\"1134.16\" y=\"-204.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node10\" class=\"node\"><title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1378.3\" cy=\"-154\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1378.3\" y=\"-150.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=2, P.b=2</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>4&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1116.2,-160.542C1171.49,-159.157 1254.49,-157.077 1312.01,-155.636\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1319.24,-155.455 1312.32,-158.779 1315.74,-155.542 1312.24,-155.63 1312.24,-155.63 1312.24,-155.63 1315.74,-155.542 1312.17,-152.481 1319.24,-155.455 1319.24,-155.455\"/>\n",
"<text text-anchor=\"start\" x=\"1134.16\" y=\"-164.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1350.68,-223.916C1343.47,-234.15 1352.68,-244 1378.3,-244 1397.92,-244 1407.92,-238.226 1408.29,-230.927\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1405.93,-223.916 1411.15,-229.544 1407.05,-227.233 1408.16,-230.55 1408.16,-230.55 1408.16,-230.55 1407.05,-227.233 1405.18,-231.555 1405.93,-223.916 1405.93,-223.916\"/>\n",
"<text text-anchor=\"start\" x=\"1296.8\" y=\"-247.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node11\" class=\"node\"><title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1699.59\" cy=\"-186\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1699.59\" y=\"-182.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=3, P.b=2</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>6&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1434.92,-159.574C1491.06,-165.201 1577.61,-173.874 1636.09,-179.736\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1643.08,-180.436 1635.8,-182.872 1639.6,-180.087 1636.11,-179.738 1636.11,-179.738 1636.11,-179.738 1639.6,-180.087 1636.43,-176.604 1643.08,-180.436 1643.08,-180.436\"/>\n",
"<text text-anchor=\"start\" x=\"1455.45\" y=\"-181.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node12\" class=\"node\"><title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1699.59\" cy=\"-99\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1699.59\" y=\"-95.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=2, P.b=3</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;8 -->\n",
"<g id=\"edge13\" class=\"edge\"><title>6&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1430.25,-145.224C1487.6,-135.345 1580.6,-119.325 1640.67,-108.977\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1647.83,-107.744 1641.46,-112.037 1644.38,-108.339 1640.93,-108.933 1640.93,-108.933 1640.93,-108.933 1644.38,-108.339 1640.4,-105.829 1647.83,-107.744 1647.83,-107.744\"/>\n",
"<text text-anchor=\"start\" x=\"1455.45\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge14\" class=\"edge\"><title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1671.97,-201.916C1664.76,-212.15 1673.97,-222 1699.59,-222 1719.21,-222 1729.21,-216.226 1729.58,-208.927\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1727.22,-201.916 1732.44,-207.544 1728.34,-205.233 1729.45,-208.55 1729.45,-208.55 1729.45,-208.55 1728.34,-205.233 1726.47,-209.555 1727.22,-201.916 1727.22,-201.916\"/>\n",
"<text text-anchor=\"start\" x=\"1618.09\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;8 -->\n",
"<g id=\"edge15\" class=\"edge\"><title>8&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1671.97,-114.916C1664.76,-125.15 1673.97,-135 1699.59,-135 1719.21,-135 1729.21,-129.226 1729.58,-121.927\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1727.22,-114.916 1732.44,-120.544 1728.34,-118.233 1729.45,-121.55 1729.45,-121.55 1729.45,-121.55 1728.34,-118.233 1726.47,-122.555 1727.22,-114.916 1727.22,-114.916\"/>\n",
"<text text-anchor=\"start\" x=\"1619.59\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; &quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;6 -->\n",
"<g id=\"edge18\" class=\"edge\"><title>10&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1113.27,-110.856C1162.69,-116.43 1237.01,-125.642 1301.16,-137 1308.61,-138.32 1316.44,-139.874 1324.13,-141.497\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1331.13,-143.002 1323.62,-144.61 1327.71,-142.266 1324.28,-141.531 1324.28,-141.531 1324.28,-141.531 1327.71,-142.266 1324.95,-138.451 1331.13,-143.002 1331.13,-143.002\"/>\n",
"<text text-anchor=\"start\" x=\"1134.16\" y=\"-140.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node14\" class=\"node\"><title>11</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1378.3\" cy=\"-67\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1378.3\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=3</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;11 -->\n",
"<g id=\"edge19\" class=\"edge\"><title>10&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1090.3,-90.0264C1103.59,-84.5744 1119.32,-79.0137 1134.16,-76 1193.74,-63.8954 1263.17,-62.5565 1312.56,-63.7043\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1319.69,-63.8907 1312.61,-66.8568 1316.19,-63.7993 1312.69,-63.7078 1312.69,-63.7078 1312.69,-63.7078 1316.19,-63.7993 1312.78,-60.5589 1319.69,-63.8907 1319.69,-63.8907\"/>\n",
"<text text-anchor=\"start\" x=\"1134.16\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;11 -->\n",
"<g id=\"edge20\" class=\"edge\"><title>11&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1350.68,-82.916C1343.47,-93.1504 1352.68,-103 1378.3,-103 1397.92,-103 1407.92,-97.2263 1408.29,-89.9268\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1405.93,-82.916 1411.15,-88.5438 1407.05,-86.2328 1408.16,-89.5496 1408.16,-89.5496 1408.16,-89.5496 1407.05,-86.2328 1405.18,-90.5554 1405.93,-82.916 1405.93,-82.916\"/>\n",
"<text text-anchor=\"start\" x=\"1298.3\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P.a&lt;1&quot; &amp; &quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;10 -->\n",
"<g id=\"edge23\" class=\"edge\"><title>13&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M795.145,-66.8248C844.681,-67.5751 917.426,-70.7999 979.869,-82 990.029,-83.8224 1000.75,-86.5416 1010.83,-89.4783\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1017.7,-91.5379 1010.09,-92.5438 1014.35,-90.5323 1010.99,-89.5266 1010.99,-89.5266 1010.99,-89.5266 1014.35,-90.5323 1011.9,-86.5094 1017.7,-91.5379 1017.7,-91.5379\"/>\n",
"<text text-anchor=\"start\" x=\"814.869\" y=\"-85.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\"><title>14</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1057.01\" cy=\"-18\" rx=\"59.2899\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1057.01\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=3</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;14 -->\n",
"<g id=\"edge24\" class=\"edge\"><title>13&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M781.654,-55.5506C791.873,-53.178 802.711,-50.8429 812.869,-49 873.728,-37.9586 943.862,-29.4618 993.118,-24.1795\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1000.23,-23.4235 993.603,-27.2958 996.75,-23.7935 993.27,-24.1635 993.27,-24.1635 993.27,-24.1635 996.75,-23.7935 992.937,-21.0311 1000.23,-23.4235 1000.23,-23.4235\"/>\n",
"<text text-anchor=\"start\" x=\"814.869\" y=\"-52.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\"><title>14&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1029.39,-33.916C1022.18,-44.1504 1031.39,-54 1057.01,-54 1076.63,-54 1086.63,-48.2263 1087,-40.9268\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1084.64,-33.916 1089.86,-39.5438 1085.76,-37.2328 1086.88,-40.5496 1086.88,-40.5496 1086.88,-40.5496 1085.76,-37.2328 1083.89,-41.5554 1084.64,-33.916 1084.64,-33.916\"/>\n",
"<text text-anchor=\"start\" x=\"979.013\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; &quot;P.b&gt;2&quot; &amp; dead</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.kripke; proxy of <Swig Object of type 'std::shared_ptr< spot::kripke > *' at 0x7f40740974e0> >"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = spot.translate('\"P.a<1\" U \"P.b>2\"'); a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"208pt\" height=\"85pt\"\n",
" viewBox=\"0.00 0.00 208.00 85.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 81)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-81 204,-81 204,4 -4,4\"/>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;1 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-22C2.79388,-22 17.1543,-22 30.6317,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-22 30.9419,-25.1501 34.4419,-22 30.9419,-22.0001 30.9419,-22.0001 30.9419,-22.0001 34.4419,-22 30.9418,-18.8501 37.9419,-22 37.9419,-22\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-39.0373C48.3189,-48.8579 50.4453,-58 56,-58 60.166,-58 62.4036,-52.8576 62.7128,-46.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-39.0373 65.8541,-45.8818 62.5434,-42.5335 62.7076,-46.0296 62.7076,-46.0296 62.7076,-46.0296 62.5434,-42.5335 59.561,-46.1774 62.3792,-39.0373 62.3792,-39.0373\"/>\n",
"<text text-anchor=\"start\" x=\"0.5\" y=\"-61.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot;</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"178\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"178\" cy=\"-22\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"178\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.1931,-22C93.6078,-22 125.5,-22 148.621,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"155.792,-22 148.793,-25.1501 152.292,-22 148.792,-22.0001 148.792,-22.0001 148.792,-22.0001 152.292,-22 148.792,-18.8501 155.792,-22 155.792,-22\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.b&gt;2&quot;</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.931,-41.3443C164.865,-52.0977 168.555,-62 178,-62 185.232,-62 189.089,-56.1954 189.573,-48.6485\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"189.069,-41.3443 192.693,-48.1107 189.31,-44.836 189.551,-48.3277 189.551,-48.3277 189.551,-48.3277 189.31,-44.836 186.408,-48.5447 189.069,-41.3443 189.069,-41.3443\"/>\n",
"<text text-anchor=\"middle\" x=\"178\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f40740977e0> >"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.otf_product(m, a)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"734pt\" height=\"75pt\"\n",
" viewBox=\"0.00 0.00 734.00 74.61\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.46633 0.46633) rotate(0) translate(4 156)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-156 1569.99,-156 1569.99,4 -4,4\"/>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"111.443\" cy=\"-111\" rx=\"73.387\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"111.443\" y=\"-107.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=0 * 1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.07932,-111C2.17808,-111 14.5697,-111 30.6452,-111\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.738,-111 30.7381,-114.15 34.238,-111 30.738,-111 30.738,-111 30.738,-111 34.238,-111 30.738,-107.85 37.738,-111 37.738,-111\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"457.33\" cy=\"-134\" rx=\"73.387\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"457.33\" y=\"-130.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=0 * 1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M182.449,-115.682C239.534,-119.5 320.08,-124.887 379.048,-128.831\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"386.129,-129.305 378.934,-131.98 382.636,-129.071 379.144,-128.838 379.144,-128.838 379.144,-128.838 382.636,-129.071 379.355,-125.695 386.129,-129.305 386.129,-129.305\"/>\n",
"<text text-anchor=\"start\" x=\"202.887\" y=\"-130.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"457.33\" cy=\"-80\" rx=\"73.387\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"457.33\" y=\"-76.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=1 * 1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M174.157,-101.526C183.76,-100.226 193.581,-98.998 202.887,-98 261.413,-91.7238 327.785,-87.1 377.923,-84.1111\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"385.2,-83.682 378.397,-87.2387 381.706,-83.8881 378.212,-84.0942 378.212,-84.0942 378.212,-84.0942 381.706,-83.8881 378.026,-80.9496 385.2,-83.682 385.2,-83.682\"/>\n",
"<text text-anchor=\"start\" x=\"202.887\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"803.217\" cy=\"-103\" rx=\"73.387\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"803.217\" y=\"-99.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=1, P.b=1 * 1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M528.336,-84.6821C585.421,-88.5001 665.967,-93.8872 724.934,-97.8311\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"732.016,-98.3047 724.821,-100.98 728.523,-98.0711 725.031,-97.8375 725.031,-97.8375 725.031,-97.8375 728.523,-98.0711 725.242,-94.6945 732.016,-98.3047 732.016,-98.3047\"/>\n",
"<text text-anchor=\"start\" x=\"548.774\" y=\"-99.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P.a&lt;1&quot; &amp; !&quot;P.b&gt;2&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"803.217\" cy=\"-49\" rx=\"73.387\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"803.217\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">P.a=0, P.b=2 * 1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",