public static KeyValueList inferVariableTypesInProposition(Proposition proposition, Cons visiblevariables) {
    { KeyValueList variabletypestable = KeyValueList.newKeyValueList();

      { Object old$AddednewtypeP$000 = Logic.$ADDEDNEWTYPEp$.get();

        try {
          Native.setBooleanSpecial(Logic.$ADDEDNEWTYPEp$, false);
          for (;;) {
            Native.setBooleanSpecial(Logic.$ADDEDNEWTYPEp$, false);
            Proposition.inferTypesFromPropositions(proposition, variabletypestable, visiblevariables);
            if (!((Boolean)(Logic.$ADDEDNEWTYPEp$.get())).booleanValue()) {
              return (variabletypestable);
            }
          }

        } finally {
          Logic.$ADDEDNEWTYPEp$.set(old$AddednewtypeP$000);
        }
      }
    }
  }