@Test
  public void mixing_static_and_dynamic_operators_produce_redundance() {
    CCSProcess process = makeProcessWithMixtureOfOperators();

    Assert.assertThat(process.toString(), is("(recX:(a!.tau.X))\\{b}"));

    Assert.assertThat(process.getNextStates().size(), is(1));

    CCSProcessState firststate = process.getNextStates().get(0);
    Assert.assertThat(firststate.getAction().toString(), is("a!"));
    Assert.assertThat(firststate.getProcess().toString(), is("(recX:(a!.tau.X))\\{b}"));

    // first recursion...
    Assert.assertThat(firststate.getNextStates().size(), is(1));
    firststate = process.getNextStates().get(0);
    Assert.assertThat(firststate.getAction().toString(), is("a!"));
    Assert.assertThat(firststate.getProcess().toString(), is("(recX:(a!.tau.X))\\{b}"));

    // ...second recursion...
    Assert.assertThat(firststate.getNextStates().size(), is(1));
    firststate = process.getNextStates().get(0);
    Assert.assertThat(firststate.getAction().toString(), is("a!"));
    Assert.assertThat(firststate.getProcess().toString(), is("(recX:(a!.tau.X))\\{b}"));
    Assert.assertThat(firststate.getNextStates().size(), is(1));

    // and the story repeat...

  }
  @Test
  public void test() {
    CCSProcess recProcess = makeProcessUnderTest();

    Assert.assertThat(recProcess.toString(), is("recX:((a!.tau + (b?.tau | c?.tau).X))"));
  }