Skip to content

Commit 14f167c

Browse files
committed
add direction option to reduce_simulation()
1 parent 2ec94ea commit 14f167c

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

include/mata/nfa/algorithms.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ Nfa concatenate_eps(const Nfa& lhs, const Nfa& rhs, const Symbol& epsilon, bool
137137
* @param[in] nfa NFA to reduce
138138
* @param[out] state_renaming Map mapping original states to the reduced states.
139139
*/
140-
Nfa reduce_simulation(const Nfa& nfa, StateRenaming &state_renaming);
140+
Nfa reduce_simulation(const Nfa& nfa, StateRenaming &state_renaming, ReductionDirection direction = ReductionDirection::FORWARD);
141141

142142
/**
143143
* @brief Reduce NFA using residual construction.

src/nfa/operations.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ Nfa mata::nfa::reduce(const Nfa &aut, StateRenaming *state_renaming, ReductionAl
10791079

10801080
switch(reduction_algorithm) {
10811081
case ReductionAlgorithm::SIMULATION:
1082-
result = algorithms::reduce_simulation(aut, reduced_state_map);
1082+
result = algorithms::reduce_simulation(aut, reduced_state_map, direction);
10831083
break;
10841084
case ReductionAlgorithm::RESIDUAL_AFTER:
10851085
result = algorithms::reduce_residual(aut, reduced_state_map, "after", direction);
@@ -1528,10 +1528,13 @@ std::optional<mata::Word> mata::nfa::get_word_from_lang_difference(const Nfa & n
15281528
}).get_word();
15291529
}
15301530

1531-
Nfa mata::nfa::algorithms::reduce_simulation(const Nfa& aut, StateRenaming &state_renaming) {
1531+
Nfa mata::nfa::algorithms::reduce_simulation(const Nfa& aut, StateRenaming &state_renaming, ReductionDirection direction) {
15321532
Nfa result;
1533-
const auto sim_relation = algorithms::compute_relation(
1534-
aut, ParameterMap{{ "relation", "simulation"}, { "direction", "forward"}});
1533+
if (direction != ReductionDirection::FORWARD) {
1534+
throw std::runtime_error(std::to_string(__func__) +
1535+
" can only reduce simulation by forward direction (for now)");
1536+
}
1537+
const auto sim_relation = algorithms::compute_relation(aut, ParameterMap{{ "relation", "simulation"}, { "direction", "forward"}});
15351538

15361539
auto sim_relation_symmetric = sim_relation;
15371540
sim_relation_symmetric.restrict_to_symmetric();

0 commit comments

Comments
 (0)