!7

p {
  new Matches m;
  S base = "heise.de 2018/04/20 (raw)";
  for (S list : mechListsPlusNumber(barCombine(base, "Similar lines"))) {
    L<S> l = mechList(list);
    for (S s : mechList(barCombine(list, "Theories"))) {
      print_noNewLine("Theory " + s + ": ");
      if "all lines start with *"
        print(allStartWithIC(l, $1) ? "VERIFIED" : "failed");
      else if "all lines end with *"
        print(allEndWithIC(l, $1) ? "VERIFIED" : "failed");
      else if "All lines contain the characters * (possibly not in order)"
        print(allContainAllCharsIC(l, $1) ? "VERIFIED" : "failed");
      else if "All lines contain the characters * exactly once (possibly not in order)"
        print(isSuperSet(charactersAppearingExactlyOnceInEachString(allToUpper(l)), charsAsList($1)) ? "VERIFIED" : "failed");
      else
        print("Uninterpretable theory");
    }
  }
}