relabel_bse: rework to simplify more patterns

Rework the way we compute and use cut-points to catch more patterns we
can rewrite.  Also Use BDDs to check if a Boolean sub-expression is
false or true.   Fixes issue #540.

* spot/tl/relabel.hh: Update documentation
* spot/tl/relabel.cc (relabel_bse): Rework.
* tests/core/ltlfilt.test: Add more test cases.
* tests/python/_mealy.ipynb: Update.
* NEWS: Mention the change.
This commit is contained in:
Alexandre Duret-Lutz 2023-09-13 11:31:49 +02:00
parent cbb981ffd5
commit 7149521f48
5 changed files with 305 additions and 159 deletions

View file

@ -129,7 +129,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f86481a2690> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877796550> >"
]
},
"execution_count": 4,
@ -209,7 +209,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f85f45cbb70> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877796820> >"
]
},
"execution_count": 6,
@ -283,7 +283,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f85f45cbb70> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877796820> >"
]
},
"execution_count": 8,
@ -387,7 +387,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f861bfc8ae0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877797b40> >"
]
},
"execution_count": 9,
@ -532,7 +532,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f85f45efde0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f88777970f0> >"
]
},
"execution_count": 10,
@ -600,15 +600,15 @@
" <tr>\n",
" <th>0</th>\n",
" <td>presat</td>\n",
" <td>3868.95</td>\n",
" <td>3.282e-06</td>\n",
" <td>1.4388e-05</td>\n",
" <td>0.000129765</td>\n",
" <td>1.3759e-05</td>\n",
" <td>9.499e-06</td>\n",
" <td>8.73e-06</td>\n",
" <td>9.01e-06</td>\n",
" <td>6.6209e-05</td>\n",
" <td>7.7176e-05</td>\n",
" <td>2.863e-06</td>\n",
" <td>1.6553e-05</td>\n",
" <td>0.000186061</td>\n",
" <td>7.753e-06</td>\n",
" <td>1.0616e-05</td>\n",
" <td>1.1804e-05</td>\n",
" <td>8.101e-06</td>\n",
" <td>6.7328e-05</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
@ -634,7 +634,7 @@
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>0.000743251</td>\n",
" <td>0.000496302</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
@ -652,16 +652,16 @@
],
"text/plain": [
" task premin_time reorg_time partsol_time player_incomp_time incomp_time \\\n",
"0 presat 3868.95 3.282e-06 1.4388e-05 0.000129765 1.3759e-05 \n",
"0 presat 7.7176e-05 2.863e-06 1.6553e-05 0.000186061 7.753e-06 \n",
"1 sat NaN NaN NaN NaN NaN \n",
"\n",
" split_all_let_time split_min_let_time split_cstr_time prob_init_build_time \\\n",
"0 9.499e-06 8.73e-06 9.01e-06 6.6209e-05 \n",
"0 1.0616e-05 1.1804e-05 8.101e-06 6.7328e-05 \n",
"1 NaN NaN NaN NaN \n",
"\n",
" ... total_time n_classes n_refinement n_lit n_clauses n_iteration \\\n",
"0 ... NaN NaN NaN NaN NaN NaN \n",
"1 ... 0.000743251 2 0 7 12 0 \n",
"1 ... 0.000496302 2 0 7 12 0 \n",
"\n",
" n_letters_part n_bisim_let n_min_states done \n",
"0 3 2 NaN NaN \n",
@ -758,7 +758,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f861bfc8630> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877796eb0> >"
]
},
"execution_count": 11,
@ -855,13 +855,13 @@
"<text text-anchor=\"start\" x=\"225\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"240\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">/</text>\n",
"<polygon fill=\"#ffe5f1\" stroke=\"transparent\" points=\"251,-55.5 251,-74.5 389,-74.5 389,-55.5 251,-55.5\"/>\n",
"<text text-anchor=\"start\" x=\"253\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">(!o0 &amp; o1) | (o0 &amp; !o1)</text>\n",
"<text text-anchor=\"start\" x=\"253\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">(o0 &amp; !o1) | (!o0 &amp; o1)</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f861bf9fb40> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877797120> >"
]
},
"execution_count": 12,
@ -994,13 +994,13 @@
"<title>5&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M631.82,-21.3C623.43,-17.09 612.43,-12.34 602,-10.18 543.68,1.87 525.72,4.48 468,-10.18 463.14,-11.41 458.22,-13.48 453.67,-15.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"447.31,-19.31 451.91,-13.17 450.37,-17.62 453.44,-15.92 453.44,-15.92 453.44,-15.92 450.37,-17.62 454.96,-18.68 447.31,-19.31 447.31,-19.31\"/>\n",
"<text text-anchor=\"start\" x=\"468\" y=\"-13.98\" font-family=\"Lato\" font-size=\"14.00\">(!o0 &amp; o1) | (o0 &amp; !o1)</text>\n",
"<text text-anchor=\"start\" x=\"468\" y=\"-13.98\" font-family=\"Lato\" font-size=\"14.00\">(o0 &amp; !o1) | (!o0 &amp; o1)</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f861bf9f210> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877797990> >"
]
},
"execution_count": 13,
@ -1067,15 +1067,15 @@
" <tr>\n",
" <th>0</th>\n",
" <td>presat</td>\n",
" <td>3869.08</td>\n",
" <td>3.213e-06</td>\n",
" <td>9.079e-06</td>\n",
" <td>9.5752e-05</td>\n",
" <td>5.168e-06</td>\n",
" <td>5.727e-06</td>\n",
" <td>7.543e-06</td>\n",
" <td>1.5784e-05</td>\n",
" <td>4.0507e-05</td>\n",
" <td>3.282e-06</td>\n",
" <td>3.702e-06</td>\n",
" <td>1.4248e-05</td>\n",
" <td>0.000109094</td>\n",
" <td>6.705e-06</td>\n",
" <td>9.219e-06</td>\n",
" <td>8.52e-06</td>\n",
" <td>1.0407e-05</td>\n",
" <td>3.2896e-05</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
@ -1149,7 +1149,7 @@
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>0.000399073</td>\n",
" <td>0.00041242</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>17</td>\n",
@ -1167,22 +1167,22 @@
],
"text/plain": [
" task premin_time reorg_time partsol_time player_incomp_time \\\n",
"0 presat 3869.08 3.213e-06 9.079e-06 9.5752e-05 \n",
"0 presat 3.282e-06 3.702e-06 1.4248e-05 0.000109094 \n",
"1 sat NaN NaN NaN NaN \n",
"2 refinement NaN NaN NaN NaN \n",
"3 sat NaN NaN NaN NaN \n",
"\n",
" incomp_time split_all_let_time split_min_let_time split_cstr_time \\\n",
"0 5.168e-06 5.727e-06 7.543e-06 1.5784e-05 \n",
"0 6.705e-06 9.219e-06 8.52e-06 1.0407e-05 \n",
"1 NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN \n",
"\n",
" prob_init_build_time ... total_time n_classes n_refinement n_lit \\\n",
"0 4.0507e-05 ... NaN NaN NaN NaN \n",
"1 NaN ... NaN 1 0 3 \n",
"2 NaN ... NaN 1 1 10 \n",
"3 NaN ... 0.000399073 2 0 17 \n",
" prob_init_build_time ... total_time n_classes n_refinement n_lit \\\n",
"0 3.2896e-05 ... NaN NaN NaN NaN \n",
"1 NaN ... NaN 1 0 3 \n",
"2 NaN ... NaN 1 1 10 \n",
"3 NaN ... 0.00041242 2 0 17 \n",
"\n",
" n_clauses n_iteration n_letters_part n_bisim_let n_min_states done \n",
"0 NaN NaN 1 1 NaN NaN \n",
@ -1286,7 +1286,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f861bfcdc00> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f8877797cc0> >"
]
},
"execution_count": 14,
@ -1365,15 +1365,15 @@
" <tr>\n",
" <th>0</th>\n",
" <td>presat</td>\n",
" <td>3869.14</td>\n",
" <td>2.863e-06</td>\n",
" <td>9.08e-06</td>\n",
" <td>6.0622e-05</td>\n",
" <td>4.679e-06</td>\n",
" <td>5.308e-06</td>\n",
" <td>8.59e-06</td>\n",
" <td>7.962e-06</td>\n",
" <td>4.0159e-05</td>\n",
" <td>1.956e-06</td>\n",
" <td>2.445e-06</td>\n",
" <td>8.171e-06</td>\n",
" <td>5.0007e-05</td>\n",
" <td>4.819e-06</td>\n",
" <td>6.077e-06</td>\n",
" <td>5.797e-06</td>\n",
" <td>4.33e-06</td>\n",
" <td>2.242e-05</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
@ -1447,7 +1447,7 @@
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>0.000416464</td>\n",
" <td>0.000252132</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>17</td>\n",
@ -1465,22 +1465,22 @@
],
"text/plain": [
" task premin_time reorg_time partsol_time player_incomp_time \\\n",
"0 presat 3869.14 2.863e-06 9.08e-06 6.0622e-05 \n",
"0 presat 1.956e-06 2.445e-06 8.171e-06 5.0007e-05 \n",
"1 sat NaN NaN NaN NaN \n",
"2 refinement NaN NaN NaN NaN \n",
"3 sat NaN NaN NaN NaN \n",
"\n",
" incomp_time split_all_let_time split_min_let_time split_cstr_time \\\n",
"0 4.679e-06 5.308e-06 8.59e-06 7.962e-06 \n",
"0 4.819e-06 6.077e-06 5.797e-06 4.33e-06 \n",
"1 NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN \n",
"\n",
" prob_init_build_time ... total_time n_classes n_refinement n_lit \\\n",
"0 4.0159e-05 ... NaN NaN NaN NaN \n",
"0 2.242e-05 ... NaN NaN NaN NaN \n",
"1 NaN ... NaN 1 0 3 \n",
"2 NaN ... NaN 1 1 10 \n",
"3 NaN ... 0.000416464 2 0 17 \n",
"3 NaN ... 0.000252132 2 0 17 \n",
"\n",
" n_clauses n_iteration n_letters_part n_bisim_let n_min_states done \n",
"0 NaN NaN 1 1 NaN NaN \n",
@ -1705,7 +1705,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
"version": "3.11.5"
},
"vscode": {
"interpreter": {