use crate::finite::automaton::FiniteAutomaton;
use crate::finite::nondeterministic::NonDeterministicFiniteAutomaton;
use crate::general::DeterministicAutomaton;
pub trait DeterministicFiniteAutomaton: DeterministicAutomaton + FiniteAutomaton {
type CorrespondingNFA: NonDeterministicFiniteAutomaton<State = Self::State, Input = Self::Input, CorrespondingDFA = Self>;
fn to_nfa(&self) -> Self::CorrespondingNFA;
fn complete(&self) -> Self;
fn minimize(&self) -> Self
where Self: Sized
{
self.to_nfa().to_minimized_dfa()
}
}