isSubsetOf :: (Ord sym, Ord sta) => Set sym -> Set sym -> Fa sym sta -> Fa sym sta -> Bool
isSubsetOf symbols1 symbols2 fa1 fa2 =
  isEmpty combinedSymbols (intersect combinedSymbols fa1 (complement symbols2 fa2))
    where
      combinedSymbols =
        symbols1 `Set.union` symbols2

-- |Checks whether a FA accepts all possible strings using the naive algorithm.
isSubsetOf :: (Ord sym, Ord sta) => Set sym -> Set sym -> Fa sym sta -> Fa sym sta -> Bool
isSubsetOf symbols1 symbols2 fa1 fa2 =
  isEmpty combinedSymbols (intersect combinedSymbols fa1 (complement symbols2 fa2))
    where
      combinedSymbols =
        symbols1 `Set.union` symbols2

-- |Checks whether a FA accepts all possible strings using the naive algorithm.
isSubsetOf symbols1 symbols2 fa1 fa2 =
  isEmpty combinedSymbols (intersect combinedSymbols fa1 (complement symbols2 fa2))
    where
      combinedSymbols =
        symbols1 `Set.union` symbols2

-- |Checks whether a FA accepts all possible strings using the naive algorithm.