| ⊦ initdone(class, st) → initdone(class, st[jvmref -- mkfs(class0, void_type, `initstate' .field) ', initval(done)]) |
⊦ initdone(class1, st) ↔ ¬ initerror(class1, st) ∧ ¬ initundone(class1, st)
⊦ initerror(class1, st) ↔ (jvmref -- mkfs(class1, void_type, `initstate' .field) ') × initval(error) ∈ st
⊦ initundone(class1, st) ↔ (jvmref -- mkfs(class1, void_type, `initstate' .field) ') × initval(undone) ∈ st ∨ ¬ jvmref -- mkfs(class1, void_type, `initstate' .field) ' ∈ st ∧ _uninit ∈ st
⊦ initdone(class1, st) ↔ ¬ ¬ (¬ initerror(class1, st) ∧ ¬ initundone(class1, st))
⊦ initundone(class1, st) ↔ ¬ ¬ ( (jvmref -- mkfs(class1, void_type, `initstate' .field) ') × initval(undone) ∈ st ∨ ¬ jvmref -- mkfs(class1, void_type, `initstate' .field) ' ∈ st ∧ _uninit ∈ st)
¬ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∨ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] ≠ initval(error), ¬ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ class ≠ class0 ∧ _uninit ∈ st[jvmref -- mkfs(class0, void_type, `initstate' .field) ', initval(done)] ∨ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ ((class = class0 ⊃ initval(done); st[jvmref -- mkfs(class, void_type, `initstate' .field) '])) = initval(undone) ∨ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ ((class = class0 ⊃ initval(done); st[jvmref -- mkfs(class, void_type, `initstate' .field) '])) = initval(error) ⊦ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] = initval(undone), ¬ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ _uninit ∈ st
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st], [CSIMPSEQ : ⊦ done ≠ undone], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ st], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ mkfs(class1, ty, fieldvar) = mkfs(class2, ty0, fieldvar0) ↔ ¬ ¬ ( class1 = class2 ∧ ty = ty0 ∧ fieldvar = fieldvar0)], [CSIMPSEQ : ⊦ (st[rk0, val][rk]) = ((rk = rk0 ⊃ val; st[rk]))], [CSIMPSEQ : ⊦ initval(istate) = initval(istate0) ↔ istate = istate0], [CSIMPSEQ : ⊦ done ≠ error], [CSIMPSEQ : ⊦ rk × val ∈ st ↔ rk ∈ st ∧ st[rk] = val], [CSIMPSEQ : ⊦ rk × val ∈ st ↔ ¬ ¬ (rk ∈ st ∧ st[rk] = val)])]]