| ⊦ initdone(class, st[_uninit, val]) ↔ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] ≠ initval(undone) ∧ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] ≠ initval(error) |
⊦ 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
⊦ ( ¬ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∨ (st[_uninit, val][jvmref -- mkfs(class, void_type, `initstate' .field) ']) ≠ initval(error)) ∧ ( ¬ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∨ (st[_uninit, val][jvmref -- mkfs(class, void_type, `initstate' .field) ']) ≠ initval(undone)) ∧ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st[_uninit, val] ↔ jvmref -- mkfs(class, void_type, `initstate' .field) ' ∈ st ∧ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] ≠ initval(undone) ∧ st[jvmref -- mkfs(class, void_type, `initstate' .field) '] ≠ initval(error)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ stringvar .field = stringvar0 .field ↔ stringvar = stringvar0], [CSIMPSEQ : ⊦ mkfs(class1, ty, fieldvar) = mkfs(class2, ty0, fieldvar0) ↔ ¬ ¬ ( class1 = class2 ∧ ty = ty0 ∧ fieldvar = fieldvar0)], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ jvmref -- sk = _uninit ↔ sk = mkfs (`java.lang.Object' .class, void_type, `uninit' .field) '], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st], [CSIMPSEQ : ⊦ rk × val ∈ st ↔ ¬ ¬ (rk ∈ st ∧ st[rk] = val)])]]