use std::hash::Hash;
use crate::labeled::arbitrary::DeterministicLabeledAutomaton;
use crate::labeled::finite::NonDeterministicFiniteLabeledAutomaton;
use crate::labeled::finite::automaton::FiniteLabeledAutomaton;
pub trait DeterministicFiniteLabeledAutomaton<Label: Hash + Eq + Clone>:
DeterministicLabeledAutomaton<Label> + FiniteLabeledAutomaton<Label>
{
type CorrespondingNFA: NonDeterministicFiniteLabeledAutomaton<
Label,
State = Self::State,
Input = Self::Input,
CorrespondingDFA = Self,
>;
fn to_nfa(&self) -> Self::CorrespondingNFA;
fn complete(&self) -> Self;
fn minimize(&self) -> Self;
}