rule(1): for_all(I : integer, index_range__first <= I and I <= fld_top_ptr(STATE) and
         (dictionary__is_null_symbol(fld_sym(element(fld_s(STATE), [I]))) <->
          fld_sym(element(fld_s(STATE), [I])) = dictionary__nullsymbol) ->
         fld_actualupperbound(fld_complete_adt(element(fld_s(STATE), [I]))) -
         fld_lowerbound(fld_complete_adt(element(fld_s(STATE), [I]))) < examinerconstants__completechecksize and
         (dictionary__is_null_symbol(fld_sym(element(fld_s(STATE), [I]))) or
          dictionary__istypemark(fld_sym(element(fld_s(STATE), [I])), dictionary__dict)))
         may_be_deduced_from [stack_is_valid(STATE)].

rule(2): stack_is_valid(STATE) may_be_deduced_from
         [for_all(I : integer, index_range__first <= I and I <= fld_top_ptr(STATE) and
          (dictionary__is_null_symbol(fld_sym(element(fld_s(STATE), [I]))) <->
           fld_sym(element(fld_s(STATE), [I])) = dictionary__nullsymbol) ->
          fld_actualupperbound(fld_complete_adt(element(fld_s(STATE), [I]))) -
          fld_lowerbound(fld_complete_adt(element(fld_s(STATE), [I]))) < examinerconstants__completechecksize and
          (dictionary__is_null_symbol(fld_sym(element(fld_s(STATE), [I]))) or
           dictionary__istypemark(fld_sym(element(fld_s(STATE), [I])), dictionary__dict)))].

rule(3): stack_is_valid(STATE) may_be_deduced_from
         [stack_is_valid(INITIAL_STATE),
          fld_s(INITIAL_STATE) = fld_s(STATE),
          INITIAL_TOP_PTR = fld_top_ptr(INITIAL_STATE),
          for_all(I : integer, index_range__first <= I and I <= fld_top_ptr(STATE) and
          (dictionary__is_null_symbol(fld_sym(element(fld_s(INITIAL_STATE), [I]))) <->
           fld_sym(element(fld_s(INITIAL_STATE), [I])) = dictionary__nullsymbol) ->
          fld_actualupperbound(fld_complete_adt(element(fld_s(INITIAL_STATE), [I]))) -
          fld_lowerbound(fld_complete_adt(element(fld_s(INITIAL_STATE), [I]))) < examinerconstants__completechecksize and
          (dictionary__is_null_symbol(fld_sym(element(fld_s(INITIAL_STATE), [I]))) or
           dictionary__istypemark(fld_sym(element(fld_s(INITIAL_STATE), [I])), dictionary__dict)))].

rule(4): for_all(I : integer, index_range__first <= I and I <= top_ptr + 1 and
          (dictionary__is_null_symbol(fld_sym(element(update(s, [top_ptr + 1], mk__stack_record(
           case_flags   := CASE_FLAGS,
           complete_adt := COMPLETE_ADT,
           sym          := SYM,
           lower_bound  := LOWER_BOUND,
           upper_bound  := UPPER_BOUND)), [I]))) <->
           fld_sym(element(update(s, [top_ptr + 1], mk__stack_record(
           case_flags   := CASE_FLAGS,
           complete_adt := COMPLETE_ADT,
           sym          := SYM,
           lower_bound  := LOWER_BOUND,
           upper_bound  := UPPER_BOUND)), [I])) = dictionary__nullsymbol) ->
          fld_actualupperbound(fld_complete_adt(element(update(s, [top_ptr + 1], mk__stack_record(
          case_flags   := CASE_FLAGS,
          complete_adt := COMPLETE_ADT,
          sym          := SYM,
          lower_bound  := LOWER_BOUND,
          upper_bound  := UPPER_BOUND)), [I]))) -
          fld_lowerbound(fld_complete_adt(element(update(s, [top_ptr + 1], mk__stack_record(
          case_flags   := CASE_FLAGS,
          complete_adt := COMPLETE_ADT,
          sym          := SYM,
          lower_bound  := LOWER_BOUND,
          upper_bound  := UPPER_BOUND)), [I]))) < examinerconstants__completechecksize and
          (dictionary__is_null_symbol(fld_sym(element(update(s, [top_ptr + 1], mk__stack_record(
           case_flags   := CASE_FLAGS,
           complete_adt := COMPLETE_ADT,
           sym          := SYM,
           lower_bound  := LOWER_BOUND,
           upper_bound  := UPPER_BOUND)), [I]))) or
           dictionary__istypemark(fld_sym(element(update(s, [top_ptr + 1], mk__stack_record(
           case_flags   := CASE_FLAGS,
           complete_adt := COMPLETE_ADT,
           sym          := SYM,
           lower_bound  := LOWER_BOUND,
           upper_bound  := UPPER_BOUND)), [I])), dictionary__dict))) may_be_deduced_from
          [for_all(I : integer, index_range__first <= I and I <= top_ptr and
           (dictionary__is_null_symbol(fld_sym(element(s, [I]))) <->
            fld_sym(element(s, [I])) = dictionary__nullsymbol) ->
           fld_actualupperbound(fld_complete_adt(element(s, [I]))) -
           fld_lowerbound(fld_complete_adt(element(s, [I]))) < examinerconstants__completechecksize and
           (dictionary__is_null_symbol(fld_sym(element(s, [I]))) or
            dictionary__istypemark(fld_sym(element(s, [I])), dictionary__dict))),
           fld_actualupperbound(COMPLETE_ADT) - fld_lowerbound(COMPLETE_ADT) < examinerconstants__completechecksize,
           dictionary__is_null_symbol(SYM) or dictionary__istypemark(SYM, dictionary__dict),
           dictionary__is_null_symbol(SYM) <-> SYM = dictionary__nullsymbol].