| ∀ n, m. dropn(n, lax0.to-adr(m)) = dropn(n, lax0).to-adr(m) ⊦ dropn(n, @(m, m0, m1) ' + lax0.to-adr(m)) = dropn(n, @(m0, m1) ' + lax0).to-adr(m) |
⊦ n ≠ 0 → dropn(n, ax) = (ax = [] ⊃ [];dropn(n - 1, ax.tail))
∀ n, m. dropn(n, lax0.to-adr(m)) = dropn(n, lax0).to-adr(m) ⊦ (@(m, m0, m1) ' + lax0.to-adr(m) = [] ⊃ [];dropn(n - 1, (@(m, m0, m1) ' + lax0.to-adr(m)).tail)) = dropn(n, @(m0, m1) ' + lax0).to-adr(m), n = 0
Used simplifier rules: adrs-rec: ⊦ (ladr ' + lax).to-adr(n) = @(n, ladr.off, ladr.size) + lax.to-adr(n);% ⊦ dropn(0, ax) = ax; (s)% ⊦ dropn(0, lax) = lax; (s)% ⊦ @(m, m0).off = m; (s)% ⊦ @(m, m0).size = m0; (s)% ⊦ adr + ax = adr ' + ax; (s)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ adr ' + ax = adr ' + ax0 ↔ ax = ax0; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set] Used terms: @(m, m0, m1) ' + lax0.to-adr(m), n