| # gndx = # lax, gstore ↓[@(n, m1, m2)] = mkgnode(nd0, m, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, n0), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) ')[pos(@(m1, m2), lax + ladr ')] = mkgnode(nd1, m4, boolvar3, boolvar4), n ∈ gstore, @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), @(m1, m2) ∈ prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), n0 ≤ m0 ⊦ nd0 = nd1, n ∈ ginval |
⊦ adr ∈ gstore → gstore[adr] = gstore[adr.lnum].gndlist[pos(@(adr.pos, adr.size), gstore[adr.lnum].ladrlist)]
# gndx = # lax, prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) ')[pos(@(m1, m2), lax + ladr ')] = mkgnode(nd1, m4, boolvar3, boolvar4), gstore[n] = groupblock(gndx, lax, n0), gstore ↓[@(n, m1, m2).lnum].gndlist[pos(@(@(n, m1, m2).pos, @(n, m1, m2).size), gstore ↓[@(n, m1, m2).lnum].ladrlist)] = mkgnode(nd0, m, boolvar1, boolvar2), @(m1, m2) ∈ prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), n ∈ gstore, @(n, m1, m2) ∈ gstore ↓, n0 ≤ m0 ⊦ nd0 = nd1, n ∈ ginval
Used simplifier rules: down-store-adr-in-explicit: ⊦ @(m0, m1, m2) ∈ gstore ↓ ↔ m0 ∈ gstore ∧ @(m1, m2) ∈ gstore ↓[m0].ladrlist;%down-store-at: ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓;%down-block-explicit: ⊦ groupblock(gndx, lax, m0) ↓ = groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0);% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ m < n → n ≠ 0; (s)%n ≤ # gndx ⊦ prefixn(n, gndx + gndx0) = prefixn(n, gndx); (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ # lax = 0 ↔ lax = []; (s)%# gndx ≤ m ⊦ prefixn(m, gndx) = gndx; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%n ≤ # lax ⊦ prefixn(n, lax + lax0) = prefixn(n, lax); (s)%# lax ≤ m ⊦ prefixn(m, lax) = lax; (s)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ ladr ∈ lax → pos(ladr, lax + lax0) = pos(ladr, lax); (s) Used terms: @(n, m1, m2), gstore ↓