//  Product Construction

        public static Tuple <int, List <string> > FeedbackForProductConstruction <C>(List <DFA <C, string> > automataList, BooleanOperation boolOp, DFA <C, string> attemptDFA)
        {
            var correctDFA = AutomataUtilities.RelabelStatesFromNTuplesToStrings <C>(AutomataUtilities.ExecuteSetOperation(automataList, boolOp));

            return(FeedbackForArbitraryConstructions <C, string>(correctDFA, attemptDFA));
        }
        //  Powerset Construction

        public static Tuple <int, List <string> > FeedbackForPowersetConstruction <C>(NFA <C, string> N, DFA <C, string> attemptDFA)
        {
            var correctDFA = AutomataUtilities.RelabelStatesFromSetsToStrings <C>(N.NFAtoDFA());

            return(FeedbackForArbitraryConstructions <C, string>(correctDFA, attemptDFA));
        }