public static void flattenNestedForallProposition(Proposition self) {
    { Cons iovariables = Stella.NIL;
      Stella_Object outerantecedent = (self.arguments.theArray)[0];
      Proposition nestedforall = ((Proposition)((self.arguments.theArray)[1]));
      Stella_Object innerantecedent = (nestedforall.arguments.theArray)[0];
      Stella_Object innerconsequent = (nestedforall.arguments.theArray)[1];

      { PatternVariable v = null;
        Vector vector000 = ((Vector)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null)));
        int index000 = 0;
        int length000 = vector000.length();

        for (;index000 < length000; index000 = index000 + 1) {
          v = ((PatternVariable)((vector000.theArray)[index000]));
          iovariables = Cons.cons(v, iovariables);
        }
      }
      { PatternVariable v = null;
        Vector vector001 = ((Vector)(KeyValueList.dynamicSlotValue(nestedforall.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null)));
        int index001 = 0;
        int length001 = vector001.length();

        for (;index001 < length001; index001 = index001 + 1) {
          v = ((PatternVariable)((vector001.theArray)[index001]));
          iovariables = Cons.cons(v, iovariables);
        }
      }
      KeyValueList.setDynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, Logic.copyConsListToVariablesVector(iovariables.reverse()), null);
      (self.arguments.theArray)[0] = (Proposition.conjoinTwoPropositions(((Proposition)(outerantecedent)), ((Proposition)(innerantecedent))));
      (self.arguments.theArray)[1] = innerconsequent;
      Proposition.normalizeProposition(((Proposition)((self.arguments.theArray)[0])));
    }
  }