| compat(str, val, ty, st), compatrefs(str, st), compatstatic(str, st), compatmode(str, st) ⊦ ∀ r0. r0 ≠ jvmref ∧ r0 -- _type ∈ st[r -- mkfs(class, ty, fieldvar) ', val] ∧ is_typevalue(st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) → ( is_classtype((st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) .type) ∧ class+∃(str, (st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) .type .class) → compatobj(str, r0, st[r -- mkfs(class, ty, fieldvar) ', val])) ∧ ( is_arraytype((st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) .type) ∧ ( ¬ has_classtype((st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) .type) ∨ tdname+∃(str, (st[r -- mkfs(class, ty, fieldvar) ', val][r0 -- _type]) .type .jtelemtype .class)) → compatarray(str, r0, st[r -- mkfs(class, ty, fieldvar) ', val])), ty = void_type, mkfs(class, ty, fieldvar) ' = _length |
compat(str, val, ty, st), compatrefs(str, st), compatstatic(str, st), compatmode(str, st), r0 -- _type ∈ st[r -- mkfs(class, ty, fieldvar) ', val], is_typevalue(st[r0 -- _type]), r0 ∈ st[r -- mkfs(class, ty, fieldvar) ', val] ⊦ r0 = jvmref, ty = void_type, mkfs(class, ty, fieldvar) ' = _length, (is_classtype(st[r0 -- _type] .type) ∧ class+∃(str, st[r0 -- _type] .type .class) → compatobj(str, r0, st[r -- mkfs(class, ty, fieldvar) ', val])) ∧ ( is_arraytype(st[r0 -- _type] .type) ∧ (¬ has_classtype(st[r0 -- _type] .type) ∨ tdname+∃(str, st[r0 -- _type] .type .type .jtelemtype .class)) → compatarray(str, r0, st[r -- mkfs(class, ty, fieldvar) ', val]))
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ is_arraytype(ty) → ty .jtelemtype = ty .type .jtelemtype], [CSIMPSEQ : ⊦ ty ≠ void_type → (st[ r -- mkfs (class, ty, fieldvar) ', val] [r0 -- _type ] ) = st[r0 -- _type]])]]