use crate::general::automaton::Automaton;
use crate::general::deterministic::DeterministicAutomaton;
pub trait NonDeterministicAutomaton: Automaton {
fn initial_states<'a>(&'a self) -> impl Iterator<Item = Self::State> + 'a;
fn successors<'a>(&'a self, state: Self::State, input: &Self::Input) -> impl Iterator<Item = Self::State> + 'a;
}
impl<T: DeterministicAutomaton> NonDeterministicAutomaton for T {
fn initial_states<'a>(&'a self) -> impl Iterator<Item = Self::State> + 'a {
core::iter::once(self.initial_state())
}
fn successors<'a>(&'a self, state: Self::State, input: &Self::Input) -> impl Iterator<Item = Self::State> + 'a {
self.transition(state, input).into_iter()
}
}