public static Cons allPropositionsMatchingArguments(Cons arguments, Surrogate relation, boolean specializeP) {
    { Stella_Object backlinkedinstance = Logic.selectInstanceWithBacklinks(arguments, relation);

      if (backlinkedinstance == null) {
        return (Stella.NIL);
      }
      { Cons value000 = Stella.NIL;

        { Proposition prop = null;
          Iterator iter000 = Logic.allTrueDependentPropositions(backlinkedinstance, relation, specializeP);
          Cons collect000 = null;

          while (iter000.nextP()) {
            prop = ((Proposition)(iter000.value));
            { boolean alwaysP000 = true;

              { Stella_Object a1 = null;
                Cons iter001 = arguments;
                int i = Stella.NULL_INTEGER;
                int iter002 = 0;

                loop001 : for (;!(iter001 == Stella.NIL); iter001 = iter001.rest, iter002 = iter002 + 1) {
                  a1 = iter001.value;
                  i = iter002;
                  if (!Stella_Object.eqlP(Logic.valueOf(a1), Logic.valueOf((prop.arguments.theArray)[i]))) {
                    alwaysP000 = false;
                    break loop001;
                  }
                }
              }
              if (alwaysP000) {
                if (collect000 == null) {
                  {
                    collect000 = Cons.cons(prop, Stella.NIL);
                    if (value000 == Stella.NIL) {
                      value000 = collect000;
                    }
                    else {
                      Cons.addConsToEndOfConsList(value000, collect000);
                    }
                  }
                }
                else {
                  {
                    collect000.rest = Cons.cons(prop, Stella.NIL);
                    collect000 = collect000.rest;
                  }
                }
              }
            }
          }
        }
        { Cons value001 = value000;

          return (value001);
        }
      }
    }
  }