| ⊦ jvmref = r, ( jvmref -- mkfs(class1, ty, fieldvar) ' ∈ addclass(class0, fis0, st) ↔ jvmref -- mkfs(class1, ty, fieldvar) ' ∈ addclass(class0, fis0, addobj(r, class, fis, st))) ∧ (addclass(class0, fis0, st)[jvmref -- mkfs(class1, ty, fieldvar) ']) = (addclass(class0, fis0, addobj(r, class, fis, st))[jvmref -- mkfs(class1, ty, fieldvar) ']), ¬ mkfs(class1, ty, fieldvar) ' ∈ fis0 ∧ (class1 ≠ class0 ∨ ty ≠ void_type ∨ fieldvar ≠ `initstate' .field) |
class1 ≠ class2 ⊦ (addclass(class2, fis, st)[jvmref -- mkfs(class1, ty, fieldvar) ']) = st[jvmref -- mkfs(class1, ty, fieldvar) ']
⊦ jvmref -- mkfs(class1, ty, fieldvar) ' ∈ addclass(class1, fis, st) ↔ ¬ ¬ ( mkfs(class1, ty, fieldvar) ' ∈ fis ∨ jvmref -- mkfs(class1, ty, fieldvar) ' ∈ st ∨ mkfs(class1, ty, fieldvar) = mkfs(class1, void_type, `initstate' .field))
⊦ r ≠ r0 → (r -- sk ∈ addobj(r0, class1, fis, st) ↔ r -- sk ∈ st)
mkfs(class1, ty, fieldvar) ' ∈ fis ⊦ (addclass(class1, fis, st)[jvmref -- mkfs(class1, ty, fieldvar) ']) = fis[mkfs(class1, ty, fieldvar) ']
¬ mkfs(class1, void_type, `initstate' .field) ' ∈ fis ⊦ (addclass(class1, fis, st)[jvmref -- mkfs(class1, void_type, `initstate' .field) ']) = initval(done)
class1 ≠ class2 ⊦ jvmref -- mkfs(class2, ty, fieldvar) ' ∈ addclass(class1, fis, st) ↔ jvmref -- mkfs(class2, ty, fieldvar) ' ∈ st
⊦ r ≠ r0 → (r -- sk ∈ addobj(r0, class1, fis, st) ↔ r -- sk ∈ st)
class1 ≠ class2 ⊦ (addclass(class2, fis, st)[jvmref -- mkfs(class1, ty, fieldvar) ']) = st[jvmref -- mkfs(class1, ty, fieldvar) ']
⊦ r ≠ r0 → (addobj(r, class1, fis, st)[r0 -- sk]) = st[r0 -- sk]
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ mkfs(class1, ty, fieldvar) = mkfs(class2, ty0, fieldvar0) ↔ ¬ ¬ ( class1 = class2 ∧ ty = ty0 ∧ fieldvar = fieldvar0)], [CSIMPSEQ : ⊦ initval(istate) = initval(istate0) ↔ istate = istate0])], [EXTRATERMS : (fieldvar, ty, class1, addobj(r, class, fis, st), fis0, class0)]]