Commit 9799a645 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

autfilt: complement of non-deterministic automata as well

* bin/autfilt.cc: Determinize automata before complementation
if needed.
* tests/core/complement.test: Adjust.
* NEWS: Mention the new feature.
parent 6a662a6d
......@@ -32,6 +32,11 @@ New in spot 1.99.7a (not yet released)
fail to find a deterministic automaton (even if one exists) and
return a nondeterministic automaton.
* "autfilt --complement" now also works for non-deterministic
automata but will output a deterministic automaton.
"autfilt --complement --tgba" will likely output a
nondeterministic TGBA.
Library:
* Building products with different dictionaries now raise an
......
......@@ -562,17 +562,6 @@ namespace
if (opt_complement_acc)
aut->set_acceptance(aut->acc().num_sets(),
aut->get_acceptance().complement());
if (opt_complement)
{
if (!spot::is_deterministic(aut))
{
std::cerr << filename << ':'
<< haut->loc << (": --complement currently supports "
"only deterministic automata\n");
exit(2);
}
aut = spot::dtwa_complement(aut);
}
if (opt_rem_fin)
aut = remove_fin(aut);
if (opt_dnf_acc)
......@@ -658,6 +647,20 @@ namespace
return 0;
}
if (opt_complement)
{
if (!spot::is_deterministic(aut))
{
// let's determinize that automaton
spot::postprocessor p;
p.set_type(spot::postprocessor::Generic);
p.set_pref(spot::postprocessor::Deterministic);
p.set_level(level);
aut = p.run(aut);
}
aut = spot::dtwa_complement(aut);
}
aut = post.run(aut, nullptr);
if (randomize_st || randomize_tr)
......
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2015 Laboratoire de Recherche et Développement de
# Copyright (C) 2015, 2016 Laboratoire de Recherche et Développement de
# l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
......@@ -93,6 +93,25 @@ State: 3
EOF
diff out expected
$ltl2tgba -H 'FGa' | $autfilt --complement 2>out && exit 1
grep 'deterministic' out
# The complement of a nondeterministic automaton is currently done via
# a determinization.
$ltl2tgba -H 'FGa' | $autfilt --complement >out
cat >expected <<EOF
HOA: v1
States: 2
Start: 0
AP: 1 "a"
acc-name: parity min even 2
Acceptance: 2 Inf(0) | Fin(1)
properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant
--BODY--
State: 0
[0] 1 {1}
[!0] 0
State: 1
[0] 1 {1}
[!0] 0 {0}
--END--
EOF
diff out expected
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment