| (@(m, m3, m4) ' + lax0.to-adr(m))[n] = @(m0, m1, m2), n ≤ # lax0, ∀ n, m, m0, m1, m2. n < # lax0 → (lax0.to-adr(m)[n] = @(m0, m1, m2) ↔ (∃ lax2, lax1. lax0 = lax2 + @(m1, m2) ' + lax1 ∧ m0 = m ∧ # lax2 = n)) ∨ lax0 = [] ⊦ ∃ lax, lax1. @(m3, m4) ' + lax0 = lax + @(m1, m2) ' + lax1 ∧ m0 = m ∧ # lax = n |
⊦ ¬ n < # ax → (ax + ax0)[n] = ax0[n - # ax]
lax0.to-adr(m)[n - # @(m, m3, m4) '] = @(m0, m1, m2), n ≤ # lax0, ∀ n, m, m0, m1, m2. n < # lax0 → (lax0.to-adr(m)[n] = @(m0, m1, m2) ↔ (∃ lax2, lax1. lax0 = lax2 + @(m1, m2) ' + lax1 ∧ m0 = m ∧ # lax2 = n)) ∨ lax0 = [] ⊦ n < # @(m, m3, m4) ', ∃ lax, lax1. @(m3, m4) ' + lax0 = lax + @(m1, m2) ' + lax1 ∧ m0 = m ∧ # lax = n
Used simplifier rules: ⊦ n < # ax → (ax + ax0)[n] = ax[n]; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ # adr ' = 0 +1; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ adr '[0] = adr; (s)% ⊦ @(m, m0, m1) = @(m2, m3, m4) ↔ m = m2 ∧ m0 = m3 ∧ m1 = m4; (ws)% ⊦ 0 ≤ m; (s)% ⊦ # lax = 0 ↔ lax = []; (s)% ⊦ [] + lax = lax; (s)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ ladr ' + lax = ladr ' + lax0 ↔ lax = lax0; (s) Used terms: n, lax0.to-adr(m), @(m, m3, m4) '