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

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

rule(3): for_all(I : integer, index_range__first <= I and I <= fld_top_ptr(STACK) + 1 and
         (dictionary__is_null_symbol(element(update(fld_s(STACK), [fld_top_ptr(STACK) + 1], X), [I])) <->
          element(update(fld_s(STACK), [fld_top_ptr(STACK) + 1], X), [I]) = dictionary__nullsymbol) ->
         dictionary__is_null_symbol(element(update(fld_s(STACK), [fld_top_ptr(STACK) + 1], X), [I])) or
         dictionary__istypemark(element(update(fld_s(STACK), [fld_top_ptr(STACK) + 1], X), [I]), dictionary__dict)) may_be_deduced_from
         [dictionary__is_null_symbol(X) or dictionary__istypemark(X, dictionary__dict),
          stack_is_valid(STACK)].
