public void TestDFAProduct() { //DFA 1 HashSet <State <int> > Q1 = new HashSet <State <int> >(); State <int> q_01 = new State <int>(0, 0); State <int> q_11 = new State <int>(1, 1); State <int> q_21 = new State <int>(2, 2); Q1.Add(q_01); Q1.Add(q_11); Q1.Add(q_21); HashSet <char> Sigma = new HashSet <char>(); Sigma.Add('a'); Sigma.Add('b'); Dictionary <TwoTuple <State <int>, char>, State <int> > delta1 = new Dictionary <TwoTuple <State <int>, char>, State <int> >(); delta1.Add(new TwoTuple <State <int>, char>(q_01, 'a'), q_11); delta1.Add(new TwoTuple <State <int>, char>(q_11, 'a'), q_21); delta1.Add(new TwoTuple <State <int>, char>(q_21, 'a'), q_01); delta1.Add(new TwoTuple <State <int>, char>(q_01, 'b'), q_01); delta1.Add(new TwoTuple <State <int>, char>(q_11, 'b'), q_11); delta1.Add(new TwoTuple <State <int>, char>(q_21, 'b'), q_21); HashSet <State <int> > F1 = new HashSet <State <int> >(); F1.Add(q_01); DFA <char, int> D1 = new DFA <char, int>(Q1, Sigma, delta1, q_01, F1); //DFA 2 HashSet <State <int> > Q2 = new HashSet <State <int> >(); State <int> q_02 = new State <int>(0, 0); State <int> q_12 = new State <int>(1, 1); State <int> q_22 = new State <int>(2, 2); State <int> q_32 = new State <int>(3, 3); Q2.Add(q_02); Q2.Add(q_12); Q2.Add(q_22); Q2.Add(q_32); Dictionary <TwoTuple <State <int>, char>, State <int> > delta2 = new Dictionary <TwoTuple <State <int>, char>, State <int> >(); delta2.Add(new TwoTuple <State <int>, char>(q_02, 'a'), q_12); delta2.Add(new TwoTuple <State <int>, char>(q_02, 'b'), q_22); delta2.Add(new TwoTuple <State <int>, char>(q_12, 'a'), q_32); delta2.Add(new TwoTuple <State <int>, char>(q_12, 'b'), q_32); delta2.Add(new TwoTuple <State <int>, char>(q_22, 'a'), q_32); delta2.Add(new TwoTuple <State <int>, char>(q_22, 'b'), q_32); delta2.Add(new TwoTuple <State <int>, char>(q_32, 'a'), q_32); delta2.Add(new TwoTuple <State <int>, char>(q_32, 'b'), q_32); HashSet <State <int> > F2 = new HashSet <State <int> >(); F2.Add(q_32); DFA <char, int> D2 = new DFA <char, int>(Q2, Sigma, delta2, q_02, F2); var automataList = new List <DFA <char, int> >(); automataList.Add(D1); automataList.Add(D2); automataList.Add(D2); BooleanOperation boolOp = BooleanOperation.parseBooleanOperationFromString("0&1&2"); var D = AutomataUtilities.ExecuteSetOperation <char, int>(automataList, boolOp); }