public static KeyValueList inferVariableTypesInDescription(Description description) {
    { Cons visiblevariables = Stella.NIL;

      { PatternVariable v = null;
        Vector vector000 = description.ioVariables;
        int index000 = 0;
        int length000 = vector000.length();

        for (;index000 < length000; index000 = index000 + 1) {
          v = ((PatternVariable)((vector000.theArray)[index000]));
          visiblevariables = Cons.cons(v, visiblevariables);
        }
      }
      { PatternVariable v = null;
        Cons iter000 = Description.topLevelExistentialVariables(description);

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          v = ((PatternVariable)(iter000.value));
          visiblevariables = Cons.cons(v, visiblevariables);
        }
      }
      return (Proposition.inferVariableTypesInProposition(description.proposition, visiblevariables));
    }
  }