| i < 0 ⊦ is_valid_ref(r0, st[r -- i ', val]) ∧ (class+∃(str, st[r0 -- _type] .type .class) ∧ ¬ is_abstract(st[r0 -- _type] .type .class) ∧ is_obj(r0, st) ∨ is_array(str, r0, st[r -- i ', val])) ↔ is_obj(str, r0, st) ∨ is_array(str, r0, st) |
⊦ r ≠ r0 → (is_valid_ref(r0, st[r -- sk, val]) ↔ is_valid_ref(r0, st))
¬ r ≠ r0, i < 0 ⊦ is_valid_ref(r0, st[r -- i ', val]) ∧ (class+∃(str, st[r0 -- _type] .type .class) ∧ ¬ is_abstract(st[r0 -- _type] .type .class) ∧ is_obj(r0, st) ∨ is_array(str, r0, st[r -- i ', val])) ↔ is_obj(str, r0, st) ∨ is_array(str, r0, st)
⊦ is_obj(r, st) → is_valid_ref(r, st)
⊦ is_obj(str, r, st) ↔ class+∃(str, st[r -- _type] .type .class) ∧ ¬ is_abstract(st[r -- _type] .type .class) ∧ is_obj(r, st)
⊦ ¬ is_valid_ref(r, st) → ¬ is_array(str, r, st)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : okfuns, , is_array-put-01, ⊦ r ≠ r0 → ( is_array (str, r0, st[r -- sk, val]) ↔ is_array(str, r0, st))])], [EXTRATERMS : (val, i ', r, st, r0)]]