code: private static CompactDFA<Character> constructSUL() {
          // input alphabet contains characters 'a'..'b'
          Alphabet<Character> sigma = Alphabets.characters('a', 'b');
  
          // @formatter:off
          // create automaton
          return AutomatonBuilders.newDFA(sigma)
                  .withInitial("q0")
                  .from("q0")
                      .on('a').to("q1")
                      .on('b').to("q2")
                  .from("q1")
                      .on('a').to("q0")
                      .on('b').to("q3")
                  .from("q2")
                      .on('a').to("q3")
                      .on('b').to("q0")
                  .from("q3")
                      .on('a').to("q2")
                      .on('b').to("q1")
                  .withAccepting("q0")
                  .create();
          // @formatter:on
      }
docs: creates example from Angluin's seminal paper.
  
  @return example dfa