| zbrar[n0] = mkzentry(key, adr), n0 + nused0 + 1 < # zbrar, n0 + 1 < # zbrar, n0 < # zbrar, ∀ n, zbrar. n + nused0 < # zbrar → payload(copy(zbrar, n, zbrar, n + 1, nused0), n + 1, nused0) = payload(zbrar, n, nused0) ⊦ payload(copy(zbrar, n0 + 1, zbrar, 2 + n0, nused0)[n0 + 1, mkzentry(key, adr)], 2 + n0, nused0)[key, adr] = payload(copy(zbrar, n0 + 1, zbrar, 2 + n0, nused0), 2 + n0, nused0)[key, adr] |
n ≠ 0, m + n + nused ≤ # zbrar ⊦ payload(zbrar[m, zbr], m + n, nused) = payload(zbrar, m + n, nused)
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ # copy(zbrar, m, zbrar0, m0, n) = # zbrar0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%n < n0 ⊦ (* n) ≠ m0 + (* n0); (s)% ⊦ m +1 = m + 1; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s)% ⊦ m < m + n ↔ n ≠ 0; (s)% ⊦ ¬ n < n; (s) Used terms: 1, n0 + 1, nused0, copy(zbrar, n0 + 1, zbrar, 2 + n0, nused0), mkzentry(key, adr)