| @(n, m, m2) ' + lax1.to-adr(n) = lax.to-adr(n) + @(n, m0, m1) ', ∀ n, lax, m0, m1. lax1.to-adr(n) = lax.to-adr(n) + @(n, m0, m1) ' ∧ @(m0, m1) ∈ lax1 → lax1 = lax + @(m0, m1) ', @(n, m0, m1) = @(n, m, m2) ∨ @(n, m0, m1) ∈ lax1.to-adr(n), @(m0, m1) = @(m, m2) ∨ @(m0, m1) ∈ lax1, @(n, m, m2) ∈ lax.to-adr(n) ∨ @(n, m, m2) = @(n, m0, m1) ⊦ @(m, m2) ' + lax1 = lax + @(m0, m1) ' |
@(n, m, m2) ' + lax1.to-adr(n) = lax.to-adr(n) + @(n, m0, m1) ', lax = ladr + lax0, ∀ n, lax, m0, m1. lax1.to-adr(n) = lax.to-adr(n) + @(n, m0, m1) ' ∧ @(m0, m1) ∈ lax1 → lax1 = lax + @(m0, m1) ', @(n, m, m2) ∈ lax.to-adr(n) ∨ @(n, m, m2) = @(n, m0, m1), @(m0, m1) = @(m, m2) ∨ @(m0, m1) ∈ lax1, @(n, m0, m1) = @(n, m, m2) ∨ @(n, m0, m1) ∈ lax1.to-adr(n) ⊦ @(m, m2) ' + lax1 = lax + @(m0, m1) '
Used simplifier rules: adrs-empty: ⊦ ([]).to-adr(n) = [];%to-adrs-eq-empty: ⊦ lax.to-adr(n) = [] ↔ lax = [];%laddress-list freely generated by [], +;;% ⊦ [] + ax = ax; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ adr ' = adr0 ' + ax ↔ adr = adr0 ∧ ax = []; (ws)% ⊦ @(m, m0, m1) = @(m2, m3, m4) ↔ m = m2 ∧ m0 = m3 ∧ m1 = m4; (ws)% ⊦ [] + lax = lax; (s)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ ladr ' = ladr0 ' + lax ↔ ladr = ladr0 ∧ lax = []; (ws)% ⊦ @(m, m0) = @(m1, m2) ↔ m = m1 ∧ m0 = m2; (ws)