| is_obj(r, addobj(r, class, fis, st)), class+∃(str, class) ∧ ¬ is_abstract(class) ∨ type∃(str, (addobj(r, class, fis, st)[r -- _type]) .type) ∧ (addobj(r, class, fis, st)[r -- _type]) .type .jtelemtype ≠ void_type ∧ (addobj(r, class, fis, st)[r -- _type]) .type .jtelemtype ≠ abstract_type ∧ is_array(r, addobj(r, class, fis, st)) ⊦ _type ∈ fis, is_obj(str, r, addobj(r, class, fis, st)) |
¬ _type ∈ fis ⊦ (addobj(r, class1, fis, st)[r -- _type]) = typeval(mkclasstype(class1))
⊦ is_obj(r, st) → ¬ is_array(r, st)
is_obj(r, addobj(r, class, fis, st)), class+∃(str, class) ⊦ _type ∈ fis, is_obj(str, r, addobj(r, class, fis, st)), is_abstract(class)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkclasstype(class) ≠ abstract_type], [CSIMPSEQ : ⊦ mkclasstype(class) ≠ void_type], [CSIMPSEQ : ⊦ mkclasstype(class) .jtelemtype = mkclasstype(class)], [CSIMPSEQ : ⊦ type∃(str, mkclasstype(class)) ↔ tdname+∃(str, class)], [CSIMPSEQ : ⊦ typeval(ty) .type = ty])]]