| ¬ (¬ is_referencevalue(val) ∨ val .refval = jvmref), validfieldinits(str, fis0, st), validval(str, val, ty, st), type∃(str, ty), ∀ str, st. validfieldinits(str, fis0, st) → validreflist(str, mkjavavalues(fis0 .vals .nonnullrefs), mkclasstype(`java.lang.Object' .class), st) ⊦ validreflist(str, mkjavavalues((val ' + fis0 .vals) .nonnullrefs), mkclasstype(`java.lang.Object' .class), st) |
is_referencevalue(val), validfieldinits(str, fis0, st), validval(str, val, ty, st), type∃(str, ty), ∀ str, st. validfieldinits(str, fis0, st) → validreflist(str, mkjavavalues(fis0 .vals .nonnullrefs), mkclasstype(`java.lang.Object' .class), st) ⊦ val .refval = jvmref, validreflist(str, val ' + mkjavavalues(fis0 .vals .nonnullrefs), mkclasstype(`java.lang.Object' .class), st)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : list, references, a, ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1], [CSIMPNAMEDSEQ : javavalue, , refva-sel, ⊦ is_referencevalue(val) → refval(val .refval) = val], [CSIMPNAMEDSEQ : valuesfuns, , mkvalsr-rec, ⊦ mkjavavalues(r ' + refs) = refval(r) ' + mkjavavalues(refs)], [CSIMPNAMEDSEQ : list, javavalues, a, ⊦ (vals + vals0) + vals1 = vals + vals0 + vals1], [CSIMPNAMEDSEQ : list, references, c, ⊦ r + refs = r ' + refs], [CSIMPNAMEDSEQ : valuesfuns, , nonnullrefs-yes, ⊦ is_referencevalue(val) ∧ val .refval ≠ jvmref → (val ' + vals) .nonnullrefs = val .refval + vals .nonnullrefs])]]