(* Finite Automaton accepting binary words with two ones *) datatype B = Epsilon | One of B | Zero of B fun D Epsilon = false | D (Zero R) = D R | D (One R) = D R fun A Epsilon = false | A (Zero R) = A R | A (One R) = B R and B Epsilon = false | B (Zero R) = B R | B (One R) = C R and C Epsilon = true | C (Zero R) = C R | C (One R) = D R (* Examples *) val resultat1 = A (One (One (Zero (Zero (Zero Epsilon))))) val resultat1 = A (One (One (Zero (Zero (One Epsilon)))))