public static void NonMinimalDfa() { // // Non-minimal DFA (Exercise 4.4.1 in the book) // var nonMinDfa = new Dfa <string>('A', new [] { 'D' }); nonMinDfa.AddTrans('A', "0", 'B'); nonMinDfa.AddTrans('A', "1", 'A'); nonMinDfa.AddTrans('B', "0", 'A'); nonMinDfa.AddTrans('B', "1", 'C'); nonMinDfa.AddTrans('C', "0", 'D'); nonMinDfa.AddTrans('C', "1", 'B'); nonMinDfa.AddTrans('D', "0", 'D'); nonMinDfa.AddTrans('D', "1", 'A'); nonMinDfa.AddTrans('E', "0", 'D'); nonMinDfa.AddTrans('E', "1", 'F'); nonMinDfa.AddTrans('F', "0", 'G'); nonMinDfa.AddTrans('F', "1", 'E'); nonMinDfa.AddTrans('G', "0", 'F'); nonMinDfa.AddTrans('G', "1", 'G'); nonMinDfa.AddTrans('H', "0", 'G'); nonMinDfa.AddTrans('H', "1", 'D'); SaveFile("dfaNonMin.dot", DotLanguagePrinter.ToDotLanguage(nonMinDfa)); Console.WriteLine($"Eq state pairs: {nonMinDfa.DisplayEquivalentPairs()}"); Console.WriteLine($"Eq state sets: {nonMinDfa.DisplayMergedEqSets()}"); var minDfa = nonMinDfa.ToMinimumDfa(); SaveFile("dfaMin.dot", DotLanguagePrinter.ToDotLanguage(minDfa)); }
// // Regular languages, NFA, DFA // public static void CourseExercise() { var dfa = new Dfa <string>('A', new [] { 'B', 'E' }); dfa.AddTrans('A', "0", 'E'); dfa.AddTrans('A', "1", 'D'); dfa.AddTrans('B', "0", 'A'); dfa.AddTrans('B', "1", 'C'); dfa.AddTrans('C', "0", 'G'); dfa.AddTrans('C', "1", 'B'); dfa.AddTrans('D', "0", 'E'); dfa.AddTrans('D', "1", 'A'); dfa.AddTrans('E', "0", 'H'); dfa.AddTrans('E', "1", 'C'); dfa.AddTrans('F', "0", 'C'); dfa.AddTrans('F', "1", 'B'); dfa.AddTrans('G', "0", 'F'); dfa.AddTrans('G', "1", 'E'); dfa.AddTrans('H', "0", 'B'); dfa.AddTrans('H', "1", 'H'); var minDfa = dfa.ToMinimumDfa(); SaveFile("exercise.dot", DotLanguagePrinter.ToDotLanguage(minDfa)); }