spot/tests/python/gen.ipynb
Alexandre Duret-Lutz 3034e8fcc3 python: render <svg> via _repr_html_
Work around a recent decision in Jupyter Lab and Notebook to render
<svg> is inline <img>, breaking tooltips or text selection.

(Rerendering all notebooks was painful.)

* NEWS: Mention the change.
* python/spot/__init__.py: Add a _repr_html_ method to all
classes that had a _repr_svg_.  It seems Jupyter will use
_repr_html_ by default.
* python/spot/jupyter.py: SVG replace the _repr_svg_ method
by a _repr_html.
* tests/python/_altscc.ipynb, tests/python/_autparserr.ipynb,
tests/python/_aux.ipynb, tests/python/_mealy.ipynb,
tests/python/_partitioned_relabel.ipynb,
tests/python/_product_susp.ipynb, tests/python/_product_weak.ipynb,
tests/python/_synthesis.ipynb, tests/python/aliases.ipynb,
tests/python/alternation.ipynb, tests/python/atva16-fig2a.ipynb,
tests/python/atva16-fig2b.ipynb, tests/python/automata-io.ipynb,
tests/python/automata.ipynb, tests/python/cav22-figs.ipynb,
tests/python/contains.ipynb, tests/python/decompose.ipynb,
tests/python/formulas.ipynb, tests/python/games.ipynb,
tests/python/gen.ipynb, tests/python/highlighting.ipynb,
tests/python/ltsmin-dve.ipynb, tests/python/ltsmin-pml.ipynb,
tests/python/parity.ipynb, tests/python/product.ipynb,
tests/python/randaut.ipynb, tests/python/satmin.ipynb,
tests/python/stutter-inv.ipynb, tests/python/synthesis.ipynb,
tests/python/testingaut.ipynb, tests/python/twagraph-internals.ipynb,
tests/python/word.ipynb, tests/python/zlktree.ipynb: Update all
notebooks.
2024-02-09 15:06:07 +01:00

1261 lines
67 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Formulas & Automata generators\n",
"\n",
"The `spot.gen` package contains the functions used to generate the patterns produced by [`genltl`](https://spot.lrde.epita.fr/genltl.html) and [`genaut`](https://spot.lrde.epita.fr/genaut.html)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import spot\n",
"import spot.gen as sg\n",
"spot.setup()\n",
"from IPython.display import display"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LTL patterns\n",
"\n",
"Generation of LTL formulas is done via the `ltl_pattern()` function. This takes two arguments: a pattern id, and a pattern size (or index if the id refers to a list)."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} p_{1} \\land \\mathsf{G} \\mathsf{F} p_{2} \\land \\mathsf{G} \\mathsf{F} p_{3}$"
],
"text/plain": [
"spot.formula(\"GFp1 & GFp2 & GFp3\")"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sg.ltl_pattern(sg.LTL_AND_GF, 3)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\mathsf{F} (p \\land \\mathsf{X} p \\land \\mathsf{X} \\mathsf{X} p \\land \\mathsf{X} \\mathsf{X} \\mathsf{X} p) \\land \\mathsf{F} (q \\land \\mathsf{X} q \\land \\mathsf{X} \\mathsf{X} q \\land \\mathsf{X} \\mathsf{X} \\mathsf{X} q)$"
],
"text/plain": [
"spot.formula(\"F(p & Xp & XXp & XXXp) & F(q & Xq & XXq & XXXq)\")"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sg.ltl_pattern(sg.LTL_CCJ_BETA_PRIME, 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To see the list of supported patterns, the easiest way is to look at the `--help` output of `genltl`. The above pattern for instance is attached to option `--ccj-beta-prime`. The name of the pattern identifier is the same using capital letters, underscores, and an `LTL_` prefix. If a pattern has multiple aliased options in `genltl`, the first one used for the identifier (e.g., `genltl` accept both `--dac-patterns` and `--spec-patterns` as synonyms to denote the patterns of `spot.gen.LTL_DAC_PATTERNS`).\n",
"\n",
"Multiple patterns can be generated using the `ltl_patterns()` function. It's arguments should be either can be:\n",
" - pairs of the form `(id, n)`: in this case the pattern `id` with size/index `n` is returned,\n",
" - triplets of the form `(id, min, max)`: in this case the patterns are output for all `n` between `min` and `max` included,\n",
" - an integer `id`: then this is equivalent to `(id, 1, 10)` if the pattern has now upper bound, or `(id, 1, upper)` if the patter `id` has an upper bound `upper`. This is mostly used when the pattern id correspond to a hard-coded list of formulas.\n",
"\n",
"Here is an example showing these three types of arguments:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/latex": [
"$(\\mathsf{G} \\mathsf{F} p_{1} \\lor \\mathsf{F} \\mathsf{G} p_{2}) \\land (\\mathsf{G} \\mathsf{F} p_{2} \\lor \\mathsf{F} \\mathsf{G} p_{3}) \\land (\\mathsf{G} \\mathsf{F} p_{3} \\lor \\mathsf{F} \\mathsf{G} p_{4})$"
],
"text/plain": [
"spot.formula(\"(GFp1 | FGp2) & (GFp2 | FGp3) & (GFp3 | FGp4)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} \\mathsf{G} p_{1}$"
],
"text/plain": [
"spot.formula(\"FGp1\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} \\mathsf{G} p_{1} \\land \\mathsf{F} \\mathsf{G} p_{2}$"
],
"text/plain": [
"spot.formula(\"FGp1 & FGp2\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} \\mathsf{G} p_{1} \\land \\mathsf{F} \\mathsf{G} p_{2} \\land \\mathsf{F} \\mathsf{G} p_{3}$"
],
"text/plain": [
"spot.formula(\"FGp1 & FGp2 & FGp3\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$p_{0} \\mathbin{\\mathsf{U}} (p_{1} \\land \\mathsf{G} p_{2})$"
],
"text/plain": [
"spot.formula(\"p0 U (p1 & Gp2)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$p_{0} \\mathbin{\\mathsf{U}} (p_{1} \\land \\mathsf{X} (p_{2} \\mathbin{\\mathsf{U}} p_{3}))$"
],
"text/plain": [
"spot.formula(\"p0 U (p1 & X(p2 U p3))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$p_{0} \\mathbin{\\mathsf{U}} (p_{1} \\land \\mathsf{X} (p_{2} \\land \\mathsf{F} (p_{3} \\land \\mathsf{X} \\mathsf{F} (p_{4} \\land \\mathsf{X} \\mathsf{F} (p_{5} \\land \\mathsf{X} \\mathsf{F} p_{6})))))$"
],
"text/plain": [
"spot.formula(\"p0 U (p1 & X(p2 & F(p3 & XF(p4 & XF(p5 & XFp6)))))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} (p_{0} \\land \\mathsf{X} \\mathsf{G} p_{1})$"
],
"text/plain": [
"spot.formula(\"F(p0 & XGp1)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} (p_{0} \\land \\mathsf{X} (p_{1} \\land \\mathsf{X} \\mathsf{F} p_{2}))$"
],
"text/plain": [
"spot.formula(\"F(p0 & X(p1 & XFp2))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{F} (p_{0} \\land \\mathsf{X} (p_{1} \\mathbin{\\mathsf{U}} p_{2}))$"
],
"text/plain": [
"spot.formula(\"F(p0 & X(p1 U p2))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} p_{0} \\lor \\mathsf{F} \\mathsf{G} p_{1}$"
],
"text/plain": [
"spot.formula(\"GFp0 | FGp1\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} (p_{0} \\rightarrow (p_{1} \\mathbin{\\mathsf{U}} p_{2}))$"
],
"text/plain": [
"spot.formula(\"G(p0 -> (p1 U p2))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} (p_{0} \\land \\mathsf{X} \\mathsf{F} (p_{1} \\land \\mathsf{X} \\mathsf{F} (p_{2} \\land \\mathsf{X} \\mathsf{F} p_{3})))$"
],
"text/plain": [
"spot.formula(\"G(p0 & XF(p1 & XF(p2 & XFp3)))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} p_{1} \\land \\mathsf{G} \\mathsf{F} p_{2} \\land \\mathsf{G} \\mathsf{F} p_{3} \\land \\mathsf{G} \\mathsf{F} p_{0} \\land \\mathsf{G} \\mathsf{F} p_{4}$"
],
"text/plain": [
"spot.formula(\"GFp1 & GFp2 & GFp3 & GFp0 & GFp4\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$(p_{0} \\mathbin{\\mathsf{U}} (p_{1} \\mathbin{\\mathsf{U}} p_{2})) \\lor (p_{1} \\mathbin{\\mathsf{U}} (p_{2} \\mathbin{\\mathsf{U}} p_{0})) \\lor (p_{2} \\mathbin{\\mathsf{U}} (p_{0} \\mathbin{\\mathsf{U}} p_{1}))$"
],
"text/plain": [
"spot.formula(\"(p0 U (p1 U p2)) | (p1 U (p2 U p0)) | (p2 U (p0 U p1))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} (p_{0} \\rightarrow (p_{1} \\mathbin{\\mathsf{U}} (\\mathsf{G} p_{2} \\lor \\mathsf{G} p_{3})))$"
],
"text/plain": [
"spot.formula(\"G(p0 -> (p1 U (Gp2 | Gp3)))\")"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for f in sg.ltl_patterns((sg.LTL_GH_R, 3), (sg.LTL_AND_FG, 1, 3), sg.LTL_EH_PATTERNS):\n",
" display(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some LTL patterns take two arguments. In this case, the arguments passed to `ltl_pattern()` should be one of:\n",
"- `(id, n, m)` giving the value of both arguments,\n",
"- `(id, min1, max1, min2, max2)` specifying a range for both arguments,\n",
"- `(id, n)` equivalent to `(id, n, n)`,\n",
"- `id` equivalent to `(id, 1, 3, 1, 3)`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} b)$"
],
"text/plain": [
"spot.formula(\"GFa1 U G(GFa0 U Xb)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b)$"
],
"text/plain": [
"spot.formula(\"GFa1 U G(GFa0 U XXb)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} \\mathsf{X} b)$"
],
"text/plain": [
"spot.formula(\"GFa1 U G(GFa0 U XXXb)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U Xb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U XXb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U XXXb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{3} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} b)))$"
],
"text/plain": [
"spot.formula(\"GFa3 U G(GFa2 U G(GFa1 U G(GFa0 U Xb)))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{3} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b)))$"
],
"text/plain": [
"spot.formula(\"GFa3 U G(GFa2 U G(GFa1 U G(GFa0 U XXb)))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{3} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} \\mathsf{X} b)))$"
],
"text/plain": [
"spot.formula(\"GFa3 U G(GFa2 U G(GFa1 U G(GFa0 U XXXb)))\")"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for f in sg.ltl_patterns(sg.LTL_SEJK_F):\n",
" display(f)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U XXXb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U XXb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} b)$"
],
"text/plain": [
"spot.formula(\"GFa1 U G(GFa0 U Xb)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b)$"
],
"text/plain": [
"spot.formula(\"GFa1 U G(GFa0 U XXb)\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U Xb))\")"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\mathsf{G} \\mathsf{F} a_{2} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{1} \\mathbin{\\mathsf{U}} \\mathsf{G} (\\mathsf{G} \\mathsf{F} a_{0} \\mathbin{\\mathsf{U}} \\mathsf{X} \\mathsf{X} b))$"
],
"text/plain": [
"spot.formula(\"GFa2 U G(GFa1 U G(GFa0 U XXb))\")"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for f in sg.ltl_patterns((sg.LTL_SEJK_F, 2, 3), (sg.LTL_SEJK_F, 2), (sg.LTL_SEJK_F, 1, 2, 1, 2)):\n",
" display(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Automata patterns\n",
"\n",
"We currently have only a couple of generators of automata:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<?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.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"729pt\" height=\"296pt\"\n",
" viewBox=\"0.00 0.00 729.00 295.96\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.9090909090909091 0.9090909090909091) rotate(0) translate(4 322)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-322 799,-322 799,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"366\" y=\"-302.8\" font-family=\"Lato\" font-size=\"14.00\">[co&#45;Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"60\" cy=\"-127\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"60\" cy=\"-127\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"60\" y=\"-123.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.17,-127C2.84,-127 16.88,-127 30.71,-127\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.86,-127 30.86,-130.15 34.36,-127 30.86,-127 30.86,-127 30.86,-127 34.36,-127 30.86,-123.85 37.86,-127 37.86,-127\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"176\" cy=\"-244\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"176\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.32,-148.6C68.75,-170.17 78.67,-202.79 100,-222 113.9,-234.52 134.58,-239.94 150.71,-242.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"157.76,-243.14 150.43,-245.41 154.29,-242.71 150.81,-242.28 150.81,-242.28 150.81,-242.28 154.29,-242.71 151.2,-239.16 157.76,-243.14 157.76,-243.14\"/>\n",
"<text text-anchor=\"middle\" x=\"120\" y=\"-243.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"345\" cy=\"-188\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"345\" y=\"-184.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M80.65,-134.72C86.78,-136.95 93.62,-139.25 100,-141 179.25,-162.72 275.65,-178.14 319.81,-184.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.93,-185.64 319.55,-187.75 323.47,-185.14 320,-184.64 320,-184.64 320,-184.64 323.47,-185.14 320.46,-181.52 326.93,-185.64 326.93,-185.64\"/>\n",
"<text text-anchor=\"middle\" x=\"176\" y=\"-165.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"453\" cy=\"-135\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"453\" y=\"-131.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M82.02,-127.43C148.9,-128.8 356.54,-133.05 427.74,-134.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"434.97,-134.65 427.91,-137.66 431.47,-134.58 427.97,-134.51 427.97,-134.51 427.97,-134.51 431.47,-134.58 428.04,-131.36 434.97,-134.65 434.97,-134.65\"/>\n",
"<text text-anchor=\"middle\" x=\"260.5\" y=\"-135.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"561\" cy=\"-89\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"561\" y=\"-85.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M79.73,-116.62C101.81,-105.37 139.95,-89 175,-89 175,-89 175,-89 454,-89 481.99,-89 514.13,-89 535.61,-89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"542.74,-89 535.74,-92.15 539.24,-89 535.74,-89 535.74,-89 535.74,-89 539.24,-89 535.74,-85.85 542.74,-89 542.74,-89\"/>\n",
"<text text-anchor=\"middle\" x=\"345\" y=\"-92.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"669\" cy=\"-67\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"669\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.48,-109.19C92.37,-84.53 130.75,-43 175,-43 175,-43 175,-43 562,-43 591.16,-43 623.74,-51.75 644.98,-58.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"651.73,-60.94 644.1,-61.7 648.42,-59.83 645.1,-58.72 645.1,-58.72 645.1,-58.72 648.42,-59.83 646.1,-55.73 651.73,-60.94 651.73,-60.94\"/>\n",
"<text text-anchor=\"middle\" x=\"399\" y=\"-46.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"777\" cy=\"-67\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"777\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;6 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>0&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M68.37,-106.6C82.8,-70.7 118.41,0 175,0 175,0 175,0 670,0 706.42,0 740.5,-28.61 759.75,-48.43\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"764.78,-53.76 757.68,-50.83 762.38,-51.22 759.97,-48.67 759.97,-48.67 759.97,-48.67 762.38,-51.22 762.27,-46.51 764.78,-53.76 764.78,-53.76\"/>\n",
"<text text-anchor=\"middle\" x=\"453\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M164.93,-229.36C158.53,-220.86 149.66,-210.4 140,-203 124.38,-191.03 114.96,-196.79 100,-184 89.79,-175.27 81.05,-163.27 74.44,-152.53\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"70.81,-146.39 77.08,-150.81 72.59,-149.4 74.37,-152.41 74.37,-152.41 74.37,-152.41 72.59,-149.4 71.66,-154.01 70.81,-146.39 70.81,-146.39\"/>\n",
"<text text-anchor=\"start\" x=\"100\" y=\"-206.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.43,-259.54C163.73,-269.91 166.92,-280 176,-280 182.95,-280 186.45,-274.08 186.5,-266.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"185.57,-259.54 189.6,-266.08 186.03,-263.01 186.48,-266.48 186.48,-266.48 186.48,-266.48 186.03,-263.01 183.35,-266.89 185.57,-259.54 185.57,-259.54\"/>\n",
"<text text-anchor=\"start\" x=\"160\" y=\"-283.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M186.96,-229.41C193.2,-221.46 201.95,-212.21 212,-207 246.2,-189.28 291.69,-186.57 319.36,-186.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.67,-186.99 319.6,-189.99 323.17,-186.92 319.67,-186.85 319.67,-186.85 319.67,-186.85 323.17,-186.92 319.73,-183.7 326.67,-186.99 326.67,-186.99\"/>\n",
"<text text-anchor=\"start\" x=\"212\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\">(!a &amp; b) | (a &amp; !b)</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M333.16,-202.02C326.88,-209.14 318.37,-217.26 309,-222 274.51,-239.44 229.1,-243.5 201.53,-244.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"194.25,-244.33 201.2,-241.07 197.75,-244.27 201.25,-244.21 201.25,-244.21 201.25,-244.21 197.75,-244.27 201.3,-247.36 194.25,-244.33 194.25,-244.33\"/>\n",
"<text text-anchor=\"start\" x=\"242.5\" y=\"-246.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M335.77,-203.54C333.17,-213.91 336.25,-224 345,-224 351.7,-224 355.08,-218.08 355.12,-210.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"354.23,-203.54 358.23,-210.1 354.67,-207.01 355.1,-210.49 355.1,-210.49 355.1,-210.49 354.67,-207.01 351.98,-210.88 354.23,-203.54 354.23,-203.54\"/>\n",
"<text text-anchor=\"start\" x=\"296.5\" y=\"-227.8\" font-family=\"Lato\" font-size=\"14.00\">(!a &amp; !b) | (a &amp; b)</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M361.64,-180.18C379.83,-171.09 409.96,-156.02 430.38,-145.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"436.64,-142.68 431.79,-148.63 433.51,-144.25 430.38,-145.81 430.38,-145.81 430.38,-145.81 433.51,-144.25 428.97,-142.99 436.64,-142.68 436.64,-142.68\"/>\n",
"<text text-anchor=\"start\" x=\"381\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M443.77,-150.54C441.17,-160.91 444.25,-171 453,-171 459.7,-171 463.08,-165.08 463.12,-157.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"462.23,-150.54 466.23,-157.1 462.67,-154.01 463.1,-157.49 463.1,-157.49 463.1,-157.49 462.67,-154.01 459.98,-157.88 462.23,-150.54 462.23,-150.54\"/>\n",
"<text text-anchor=\"start\" x=\"438\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M470.1,-128.01C488.1,-120.2 517.38,-107.49 537.61,-98.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"544.1,-95.9 538.93,-101.58 540.89,-97.29 537.68,-98.69 537.68,-98.69 537.68,-98.69 540.89,-97.29 536.42,-95.8 544.1,-95.9 544.1,-95.9\"/>\n",
"<text text-anchor=\"start\" x=\"489\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M551.77,-104.54C549.17,-114.91 552.25,-125 561,-125 567.7,-125 571.08,-119.08 571.12,-111.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"570.23,-104.54 574.23,-111.1 570.67,-108.01 571.1,-111.49 571.1,-111.49 571.1,-111.49 570.67,-108.01 567.98,-111.88 570.23,-104.54 570.23,-104.54\"/>\n",
"<text text-anchor=\"start\" x=\"546\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M579.03,-85.47C596.65,-81.81 624.3,-76.07 644.11,-71.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"651.01,-70.53 644.8,-75.03 647.58,-71.24 644.16,-71.95 644.16,-71.95 644.16,-71.95 647.58,-71.24 643.52,-68.86 651.01,-70.53 651.01,-70.53\"/>\n",
"<text text-anchor=\"start\" x=\"597\" y=\"-84.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M659.77,-82.54C657.17,-92.91 660.25,-103 669,-103 675.7,-103 679.08,-97.08 679.12,-89.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"678.23,-82.54 682.23,-89.1 678.67,-86.01 679.1,-89.49 679.1,-89.49 679.1,-89.49 678.67,-86.01 675.98,-89.88 678.23,-82.54 678.23,-82.54\"/>\n",
"<text text-anchor=\"start\" x=\"654\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M687.03,-67C704.47,-67 731.74,-67 751.49,-67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"758.66,-67 751.66,-70.15 755.16,-67 751.66,-67 751.66,-67 751.66,-67 755.16,-67 751.66,-63.85 758.66,-67 758.66,-67\"/>\n",
"<text text-anchor=\"start\" x=\"705\" y=\"-70.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;1 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>6&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M775.15,-85.01C771.72,-135.37 754.59,-274 670,-274 344,-274 344,-274 344,-274 285,-274 268.9,-275.58 212,-260 207.6,-258.8 203.06,-257.1 198.77,-255.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"192.28,-252.28 199.95,-252.33 195.46,-253.74 198.64,-255.19 198.64,-255.19 198.64,-255.19 195.46,-253.74 197.33,-258.06 192.28,-252.28 192.28,-252.28\"/>\n",
"<text text-anchor=\"start\" x=\"489\" y=\"-277.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M767.77,-82.54C765.17,-92.91 768.25,-103 777,-103 783.7,-103 787.08,-97.08 787.12,-89.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"786.23,-82.54 790.23,-89.1 786.67,-86.01 787.1,-89.49 787.1,-89.49 787.1,-89.49 786.67,-86.01 783.98,-89.88 786.23,-82.54 786.23,-82.54\"/>\n",
"<text text-anchor=\"start\" x=\"762\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<?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.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"729pt\" height=\"286pt\"\n",
" viewBox=\"0.00 0.00 729.00 286.39\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.9259259259259258 0.9259259259259258) rotate(0) translate(4 304)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-304 780,-304 780,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"216.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">(Fin(</text>\n",
"<text text-anchor=\"start\" x=\"243.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"259.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">) | Inf(</text>\n",
"<text text-anchor=\"start\" x=\"295.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"311.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">)) &amp; (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"363.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"379.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">) | Inf(</text>\n",
"<text text-anchor=\"start\" x=\"415.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"431.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">)) &amp; (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"483.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"499.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">) | Inf(</text>\n",
"<text text-anchor=\"start\" x=\"535.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"<text text-anchor=\"start\" x=\"551.5\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
"<text text-anchor=\"start\" x=\"356\" y=\"-271.8\" font-family=\"Lato\" font-size=\"14.00\">[Streett 3]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M62,-207C62,-207 50,-207 50,-207 44,-207 38,-201 38,-195 38,-195 38,-181 38,-181 38,-175 44,-169 50,-169 50,-169 62,-169 62,-169 68,-169 74,-175 74,-181 74,-181 74,-195 74,-195 74,-201 68,-207 62,-207\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-191.8\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<text text-anchor=\"start\" x=\"48\" y=\"-176.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-188C2.79,-188 17.15,-188 30.63,-188\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-188 30.94,-191.15 34.44,-188 30.94,-188 30.94,-188 30.94,-188 34.44,-188 30.94,-184.85 37.94,-188 37.94,-188\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>2</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M141,-123C141,-123 129,-123 129,-123 123,-123 117,-117 117,-111 117,-111 117,-99 117,-99 117,-93 123,-87 129,-87 129,-87 141,-87 141,-87 147,-87 153,-93 153,-99 153,-99 153,-111 153,-111 153,-117 147,-123 141,-123\"/>\n",
"<text text-anchor=\"middle\" x=\"135\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.09,-169.58C85.33,-157.46 100.15,-141.49 112.23,-128.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"117.22,-123.08 114.77,-130.36 114.84,-125.65 112.46,-128.22 112.46,-128.22 112.46,-128.22 114.84,-125.65 110.15,-126.07 117.22,-123.08 117.22,-123.08\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M278,-58C278,-58 266,-58 266,-58 260,-58 254,-52 254,-46 254,-46 254,-32 254,-32 254,-26 260,-20 266,-20 266,-20 278,-20 278,-20 284,-20 290,-26 290,-32 290,-32 290,-46 290,-46 290,-52 284,-58 278,-58\"/>\n",
"<text text-anchor=\"start\" x=\"267.5\" y=\"-42.8\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"<text text-anchor=\"start\" x=\"264\" y=\"-27.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M153.34,-95.33C158.94,-92.27 165.2,-88.93 171,-86 196.84,-72.93 226.97,-58.93 247.35,-49.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.87,-46.69 248.8,-52.45 250.68,-48.13 247.5,-49.58 247.5,-49.58 247.5,-49.58 250.68,-48.13 246.19,-46.71 253.87,-46.69 253.87,-46.69\"/>\n",
"<text text-anchor=\"start\" x=\"171\" y=\"-89.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>6</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M224,-123C224,-123 212,-123 212,-123 206,-123 200,-117 200,-111 200,-111 200,-99 200,-99 200,-93 206,-87 212,-87 212,-87 224,-87 224,-87 230,-87 236,-93 236,-99 236,-99 236,-111 236,-111 236,-117 230,-123 224,-123\"/>\n",
"<text text-anchor=\"middle\" x=\"218\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;6 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M153.18,-105C164.67,-105 179.96,-105 192.69,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"199.85,-105 192.85,-108.15 196.35,-105 192.85,-105 192.85,-105 192.85,-105 196.35,-105 192.85,-101.85 199.85,-105 199.85,-105\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M519,-136C519,-136 507,-136 507,-136 501,-136 495,-130 495,-124 495,-124 495,-112 495,-112 495,-106 501,-100 507,-100 507,-100 519,-100 519,-100 525,-100 531,-106 531,-112 531,-112 531,-124 531,-124 531,-130 525,-136 519,-136\"/>\n",
"<text text-anchor=\"middle\" x=\"513\" y=\"-114.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M509.81,-136.21C504.37,-172.21 486.71,-249 435,-249 134,-249 134,-249 134,-249 109.48,-249 88.22,-229.77 74.29,-212.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"69.85,-207.3 76.67,-210.83 72.03,-210.04 74.2,-212.79 74.2,-212.79 74.2,-212.79 72.03,-210.04 71.73,-214.74 69.85,-207.3 69.85,-207.3\"/>\n",
"<text text-anchor=\"start\" x=\"266.5\" y=\"-252.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>5</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M598,-136C598,-136 586,-136 586,-136 580,-136 574,-130 574,-124 574,-124 574,-112 574,-112 574,-106 580,-100 586,-100 586,-100 598,-100 598,-100 604,-100 610,-106 610,-112 610,-112 610,-124 610,-124 610,-130 604,-136 598,-136\"/>\n",
"<text text-anchor=\"middle\" x=\"592\" y=\"-114.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;5 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M531.09,-118C541.56,-118 555.12,-118 566.69,-118\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"573.96,-118 566.96,-121.15 570.46,-118 566.96,-118 566.96,-118 566.96,-118 570.46,-118 566.96,-114.85 573.96,-118 573.96,-118\"/>\n",
"<text text-anchor=\"start\" x=\"549\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>4</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M681,-215C681,-215 669,-215 669,-215 663,-215 657,-209 657,-203 657,-203 657,-189 657,-189 657,-183 663,-177 669,-177 669,-177 681,-177 681,-177 687,-177 693,-183 693,-189 693,-189 693,-203 693,-203 693,-209 687,-215 681,-215\"/>\n",
"<text text-anchor=\"start\" x=\"670.5\" y=\"-199.8\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"<text text-anchor=\"start\" x=\"667\" y=\"-184.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;4 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M610.18,-134.54C622.21,-146.12 638.4,-161.72 651.46,-174.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"656.85,-179.48 649.62,-176.9 654.33,-177.05 651.8,-174.63 651.8,-174.63 651.8,-174.63 654.33,-177.05 653.99,-172.36 656.85,-179.48 656.85,-179.48\"/>\n",
"<text text-anchor=\"start\" x=\"628\" y=\"-164.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>9</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M681,-106C681,-106 669,-106 669,-106 663,-106 657,-100 657,-94 657,-94 657,-82 657,-82 657,-76 663,-70 669,-70 669,-70 681,-70 681,-70 687,-70 693,-76 693,-82 693,-82 693,-94 693,-94 693,-100 687,-106 681,-106\"/>\n",
"<text text-anchor=\"middle\" x=\"675\" y=\"-84.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;9 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M610.18,-111.64C621.78,-107.34 637.25,-101.61 650.05,-96.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"656.85,-94.35 651.38,-99.74 653.56,-95.57 650.28,-96.78 650.28,-96.78 650.28,-96.78 653.56,-95.57 649.19,-93.83 656.85,-94.35 656.85,-94.35\"/>\n",
"<text text-anchor=\"start\" x=\"630\" y=\"-107.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M290.07,-36.27C314.59,-33 360.94,-29.33 398,-41 433.34,-52.13 467.71,-78.05 489.31,-96.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"494.79,-101.57 487.45,-99.3 492.16,-99.25 489.54,-96.94 489.54,-96.94 489.54,-96.94 492.16,-99.25 491.62,-94.57 494.79,-101.57 494.79,-101.57\"/>\n",
"<text text-anchor=\"start\" x=\"376.5\" y=\"-44.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>7</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M386,-103C386,-103 374,-103 374,-103 368,-103 362,-97 362,-91 362,-91 362,-77 362,-77 362,-71 368,-65 374,-65 374,-65 386,-65 386,-65 392,-65 398,-71 398,-77 398,-77 398,-91 398,-91 398,-97 392,-103 386,-103\"/>\n",
"<text text-anchor=\"start\" x=\"375.5\" y=\"-87.8\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;7 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>6&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M236.2,-98.11C241.79,-96.14 248.08,-94.21 254,-93 288.54,-85.96 329.42,-84.23 354.79,-83.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"361.83,-83.84 354.85,-87.05 358.33,-83.87 354.83,-83.9 354.83,-83.9 354.83,-83.9 358.33,-83.87 354.8,-80.75 361.83,-83.84 361.83,-83.84\"/>\n",
"<text text-anchor=\"start\" x=\"266.5\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>10</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M332,-145C332,-145 320,-145 320,-145 314,-145 308,-139 308,-133 308,-133 308,-121 308,-121 308,-115 314,-109 320,-109 320,-109 332,-109 332,-109 338,-109 344,-115 344,-121 344,-121 344,-133 344,-133 344,-139 338,-145 332,-145\"/>\n",
"<text text-anchor=\"middle\" x=\"326\" y=\"-123.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;10 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>6&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M236.03,-108.53C253.54,-112.17 280.98,-117.86 300.75,-121.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"307.66,-123.4 300.17,-125.06 304.23,-122.69 300.81,-121.98 300.81,-121.98 300.81,-121.98 304.23,-122.69 301.45,-118.89 307.66,-123.4 307.66,-123.4\"/>\n",
"<text text-anchor=\"start\" x=\"268.5\" y=\"-122.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>4&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M656.7,-199.39C640.35,-202.29 615.1,-206 593,-206 217,-206 217,-206 217,-206 178.09,-206 154.76,-159.81 143.74,-129.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"141.32,-123.06 146.62,-128.61 142.49,-126.36 143.65,-129.66 143.65,-129.66 143.65,-129.66 142.49,-126.36 140.68,-130.71 141.32,-123.06 141.32,-123.06\"/>\n",
"<text text-anchor=\"start\" x=\"430.5\" y=\"-209.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M667.76,-106.15C666.65,-115.54 669.06,-124 675,-124 679.36,-124 681.82,-119.44 682.38,-113.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"682.24,-106.15 685.52,-113.09 682.31,-109.65 682.37,-113.15 682.37,-113.15 682.37,-113.15 682.31,-109.65 679.23,-113.21 682.24,-106.15 682.24,-106.15\"/>\n",
"<text text-anchor=\"start\" x=\"671.5\" y=\"-127.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>8</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M764,-38C764,-38 752,-38 752,-38 746,-38 740,-32 740,-26 740,-26 740,-12 740,-12 740,-6 746,0 752,0 752,0 764,0 764,0 770,0 776,-6 776,-12 776,-12 776,-26 776,-26 776,-32 770,-38 764,-38\"/>\n",
"<text text-anchor=\"start\" x=\"753.5\" y=\"-22.8\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"<text text-anchor=\"start\" x=\"750\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;8 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>9&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M693.18,-73.37C705.21,-63.12 721.4,-49.33 734.46,-38.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"739.85,-33.61 736.56,-40.55 737.18,-35.88 734.52,-38.15 734.52,-38.15 734.52,-38.15 737.18,-35.88 732.48,-35.75 739.85,-33.61 739.85,-33.61\"/>\n",
"<text text-anchor=\"start\" x=\"711\" y=\"-60.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;1 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>7&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M398.12,-85.99C412.61,-87.9 433.88,-91.19 452,-96 464.14,-99.22 477.28,-103.9 488.15,-108.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"494.94,-110.79 487.27,-111.15 491.69,-109.5 488.43,-108.22 488.43,-108.22 488.43,-108.22 491.69,-109.5 489.59,-105.29 494.94,-110.79 494.94,-110.79\"/>\n",
"<text text-anchor=\"start\" x=\"430.5\" y=\"-99.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;10 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>10&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M316.23,-145.15C314.73,-154.54 317.98,-163 326,-163 331.89,-163 335.21,-158.44 335.96,-152.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"335.77,-145.15 339.1,-152.07 335.86,-148.65 335.96,-152.15 335.96,-152.15 335.96,-152.15 335.86,-148.65 332.81,-152.23 335.77,-145.15 335.77,-145.15\"/>\n",
"<text text-anchor=\"start\" x=\"322.5\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M440,-158C440,-158 428,-158 428,-158 422,-158 416,-152 416,-146 416,-146 416,-132 416,-132 416,-126 422,-120 428,-120 428,-120 440,-120 440,-120 446,-120 452,-126 452,-132 452,-132 452,-146 452,-146 452,-152 446,-158 440,-158\"/>\n",
"<text text-anchor=\"start\" x=\"425.5\" y=\"-142.8\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"<text text-anchor=\"start\" x=\"426\" y=\"-127.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>10&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M344.03,-128.93C361.47,-130.9 388.74,-133.99 408.49,-136.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"415.66,-137.04 408.35,-139.38 412.18,-136.64 408.7,-136.25 408.7,-136.25 408.7,-136.25 412.18,-136.64 409.06,-133.12 415.66,-137.04 415.66,-137.04\"/>\n",
"<text text-anchor=\"start\" x=\"374.5\" y=\"-137.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;2 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>8&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M739.81,-13.58C723.55,-8.94 698.36,-3 676,-3 217,-3 217,-3 217,-3 177.85,-3 154.61,-49.65 143.66,-79.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"141.27,-86.76 140.58,-79.12 142.41,-83.46 143.56,-80.15 143.56,-80.15 143.56,-80.15 142.41,-83.46 146.53,-81.18 141.27,-86.76 141.27,-86.76\"/>\n",
"<text text-anchor=\"start\" x=\"470\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;1 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>11&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M452.09,-134.34C462.66,-131.46 476.38,-127.72 488.02,-124.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"494.96,-122.65 489.03,-127.53 491.58,-123.57 488.21,-124.49 488.21,-124.49 488.21,-124.49 491.58,-123.57 487.38,-121.45 494.96,-122.65 494.96,-122.65\"/>\n",
"<text text-anchor=\"start\" x=\"470\" y=\"-132.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<?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.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"729pt\" height=\"160pt\"\n",
" viewBox=\"0.00 0.00 729.00 159.71\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.7633587786259541 0.7633587786259541) rotate(0) translate(4 205)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-205 950,-205 950,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"451.5\" y=\"-185.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-79\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-75.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;1 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-79C2.79,-79 17.15,-79 30.63,-79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-79 30.94,-82.15 34.44,-79 30.94,-79 30.94,-79 30.94,-79 34.44,-79 30.94,-75.85 37.94,-79 37.94,-79\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-96.04C48.32,-105.86 50.45,-115 56,-115 60.17,-115 62.4,-109.86 62.71,-103.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-96.04 65.85,-102.88 62.54,-99.53 62.71,-103.03 62.71,-103.03 62.71,-103.03 62.54,-99.53 59.56,-103.18 62.38,-96.04 62.38,-96.04\"/>\n",
"<text text-anchor=\"start\" x=\"43\" y=\"-118.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"164\" cy=\"-113\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"164\" y=\"-109.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;7 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.56,-84.31C91.38,-90.03 119.83,-99.15 139.86,-105.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.55,-107.72 138.93,-108.59 143.22,-106.66 139.89,-105.59 139.89,-105.59 139.89,-105.59 143.22,-106.66 140.85,-102.59 146.55,-107.72 146.55,-107.72\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-104.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"276\" cy=\"-113\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"276\" cy=\"-113\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"276\" y=\"-109.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"388\" cy=\"-80\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"388\" y=\"-76.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M297.18,-106.95C315.96,-101.31 343.94,-92.92 363.68,-87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"370.54,-84.94 364.74,-89.97 367.19,-85.94 363.83,-86.95 363.83,-86.95 363.83,-86.95 367.19,-85.94 362.93,-83.93 370.54,-84.94 370.54,-84.94\"/>\n",
"<text text-anchor=\"start\" x=\"316\" y=\"-103.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M369.89,-79.95C315.34,-79.78 145.32,-79.27 81.52,-79.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"74.28,-79.05 81.29,-75.92 77.78,-79.06 81.28,-79.07 81.28,-79.07 81.28,-79.07 77.78,-79.06 81.27,-82.22 74.28,-79.05 74.28,-79.05\"/>\n",
"<text text-anchor=\"start\" x=\"200\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"496\" cy=\"-80\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"496\" y=\"-76.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M406.03,-80C423.47,-80 450.74,-80 470.49,-80\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"477.66,-80 470.66,-83.15 474.16,-80 470.66,-80 470.66,-80 470.66,-80 474.16,-80 470.66,-76.85 477.66,-80 477.66,-80\"/>\n",
"<text text-anchor=\"start\" x=\"424\" y=\"-83.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;0 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>7&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M182.19,-113C199.41,-113 226.22,-113 246.6,-113\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.79,-113 246.79,-116.15 250.29,-113 246.79,-113 246.79,-113 246.79,-113 250.29,-113 246.79,-109.85 253.79,-113 253.79,-113\"/>\n",
"<text text-anchor=\"start\" x=\"200\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"658\" cy=\"-97\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"658\" y=\"-93.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M648.77,-112.54C646.17,-122.91 649.25,-133 658,-133 664.7,-133 668.08,-127.08 668.12,-119.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"667.23,-112.54 671.23,-119.1 667.67,-116.01 668.1,-119.49 668.1,-119.49 668.1,-119.49 667.67,-116.01 664.98,-119.88 667.23,-112.54 667.23,-112.54\"/>\n",
"<text text-anchor=\"start\" x=\"645\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"928\" cy=\"-97\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"928\" y=\"-93.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;8 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M676.17,-97C722.4,-97 849.6,-97 902.95,-97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"909.97,-97 902.97,-100.15 906.47,-97 902.97,-97 902.97,-97 902.97,-97 906.47,-97 902.97,-93.85 909.97,-97 909.97,-97\"/>\n",
"<text text-anchor=\"start\" x=\"748\" y=\"-100.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;7 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>8&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M915.44,-110.36C897.39,-129.64 860.45,-163 821,-163 275,-163 275,-163 275,-163 240.82,-163 205.6,-142.75 184.5,-128.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"178.68,-123.85 186.2,-125.37 181.52,-125.89 184.37,-127.93 184.37,-127.93 184.37,-127.93 181.52,-125.89 182.53,-130.49 178.68,-123.85 178.68,-123.85\"/>\n",
"<text text-anchor=\"start\" x=\"532\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"712\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"712\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M702.77,-33.54C700.17,-43.91 703.25,-54 712,-54 718.7,-54 722.08,-48.08 722.12,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"721.23,-33.54 725.23,-40.1 721.67,-37.01 722.1,-40.49 722.1,-40.49 722.1,-40.49 721.67,-37.01 718.98,-40.88 721.23,-33.54 721.23,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"699\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"820\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"820\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;9 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M730.03,-18C747.47,-18 774.74,-18 794.49,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"801.66,-18 794.66,-21.15 798.16,-18 794.66,-18 794.66,-18 794.66,-18 798.16,-18 794.66,-14.85 801.66,-18 801.66,-18\"/>\n",
"<text text-anchor=\"start\" x=\"748\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;8 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>9&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M835.38,-27.64C849.89,-37.48 872.84,-53.35 892,-68 897.43,-72.15 903.2,-76.82 908.45,-81.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"913.9,-85.73 906.51,-83.66 911.22,-83.49 908.53,-81.24 908.53,-81.24 908.53,-81.24 911.22,-83.49 910.55,-78.83 913.9,-85.73 913.9,-85.73\"/>\n",
"<text text-anchor=\"start\" x=\"856\" y=\"-71.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M810.77,-33.54C808.17,-43.91 811.25,-54 820,-54 826.7,-54 830.08,-48.08 830.12,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"829.23,-33.54 833.23,-40.1 829.67,-37.01 830.1,-40.49 830.1,-40.49 830.1,-40.49 829.67,-37.01 826.98,-40.88 829.23,-33.54 829.23,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"802\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;2 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M514.12,-81.82C542.63,-84.85 599.92,-90.94 632.63,-94.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"640,-95.19 632.71,-97.59 636.52,-94.82 633.04,-94.45 633.04,-94.45 633.04,-94.45 636.52,-94.82 633.37,-91.32 640,-95.19 640,-95.19\"/>\n",
"<text text-anchor=\"start\" x=\"532\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"604\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"604\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M512.19,-71.12C530.47,-60.42 561.29,-42.4 581.88,-30.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"588.18,-26.67 583.73,-32.92 585.16,-28.43 582.14,-30.2 582.14,-30.2 582.14,-30.2 585.16,-28.43 580.55,-27.48 588.18,-26.67 588.18,-26.67\"/>\n",
"<text text-anchor=\"start\" x=\"532\" y=\"-62.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M622.03,-18C639.47,-18 666.74,-18 686.49,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"693.66,-18 686.66,-21.15 690.16,-18 686.66,-18 686.66,-18 686.66,-18 690.16,-18 686.66,-14.85 693.66,-18 693.66,-18\"/>\n",
"<text text-anchor=\"start\" x=\"640\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M594.77,-33.54C592.17,-43.91 595.25,-54 604,-54 610.7,-54 614.08,-48.08 614.12,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"613.23,-33.54 617.23,-40.1 613.67,-37.01 614.1,-40.49 614.1,-40.49 614.1,-40.49 613.67,-37.01 610.98,-40.88 613.23,-33.54 613.23,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"586\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(sg.aut_pattern(sg.AUT_KS_NCA, 3).show('.a'),\n",
" sg.aut_pattern(sg.AUT_L_DSA, 3).show('.a'),\n",
" sg.aut_pattern(sg.AUT_L_NBA, 3).show('.a'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Multiple automata can be generated using the `aut_patterns()` function, which works similarly to `ltl_patterns()`."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"5\n",
"7\n",
"9\n",
"11\n",
"13\n",
"15\n",
"17\n",
"19\n",
"21\n"
]
}
],
"source": [
"for aut in sg.aut_patterns(sg.AUT_KS_NCA):\n",
" print(aut.num_states())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}