public static IntervalCache getIntervalCache(LogicObject self) {
    { Stella_Object intervalcache = Logic.accessBinaryValue(self, PlKernelKb.SGT_PL_KERNEL_KB_INTERVAL_CACHE_OF);

      if ((intervalcache != null) &&
          (!Logic.skolemP(intervalcache))) {
        { IntervalCache thiscache = ((IntervalCache)(intervalcache));
          IntervalCache copycache = null;
          Proposition proposition = null;

          if (thiscache.homeContext == ((Context)(Stella.$CONTEXT$.get()))) {
            return (thiscache);
          }
          { IntervalCache self000 = IntervalCache.newIntervalCache();

            self000.homeContext = ((Context)(Stella.$CONTEXT$.get()));
            self000.intervalMember = self;
            self000.lowerBound = thiscache.lowerBound;
            self000.upperBound = thiscache.upperBound;
            self000.strictLowerBoundP = thiscache.strictLowerBoundP;
            self000.strictUpperBoundP = thiscache.strictUpperBoundP;
            copycache = self000;
          }
          { Proposition value000 = null;

            { Proposition p = null;
              Iterator iter000 = Logic.unfilteredDependentPropositions(self, PlKernelKb.SGT_PL_KERNEL_KB_INTERVAL_CACHE_OF).allocateIterator();

              loop000 : while (iter000.nextP()) {
                p = ((Proposition)(iter000.value));
                if (((Surrogate)(p.operator)) == PlKernelKb.SGT_PL_KERNEL_KB_INTERVAL_CACHE_OF) {
                  value000 = p;
                  break loop000;
                }
              }
            }
            proposition = value000;
          }
          Proposition.equateValues(proposition, Logic.valueOf((proposition.arguments.theArray)[(proposition.arguments.length() - 1)]), copycache);
          return (copycache);
        }
      }
      else {
        return (PlKernelKb.createIntervalCache(self));
      }
    }
  }