| ⊦ ⟪persistence_encode_group_nodes#(gndx, n, n0; ; buf, ax, err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → (∃ lax. lax.to-adr(n) = ax ∧ # buf = gndx.flashsize ∧ abs-nodes(buf, n0, gndx, lax, false)))) |
m2 = n1, n = n0 ⊦ ⟪err := ESUCCESS; buf := mkbuf(gndx.flashsize); ax := []; let m1 = 0, m0 = 0 in while err = ESUCCESS ∧ m1 < # gndx do {/* (prepost-encode-group-nodes : invariant m1 ≤ # gndx ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → # buf = # buf` ∧ (∃ gndx0, gndx1. gndx = gndx0 + gndx1 ∧ # gndx0 = m1 ∧ m0 = gndx0.flashsize ∧ (∃ lax, buf0, buf1. lax.to-adr(m2) = ax ∧ buf = buf0 + buf1 ∧ # buf0 = m0 ∧ abs-nodes(buf0, n, gndx0, lax, false)))) wfbound # gndx - m1) */; let m = ? in {encode_group_node#(gndx[m1], m0; m, buf; err); ax := ax + @(m2, n + m0, m); m0 := m0 + m}; m1 := m1 + 1}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → (∃ lax. lax.to-adr(n1) = ax ∧ # buf = gndx.flashsize ∧ abs-nodes(buf, n0, gndx, lax, false))))
Used simplifier rules: encode-group-nodes: ⊦ ;