| gnd = mkgnode(nd, m, boolvar, boolvar0), (boolvar0 ⊃ # gndx + 1;valid-group-nodes(gndx)) < # prefixn(n, gndx + gnd '), (boolvar0 ⊃ # gndx + 1;valid-group-nodes(gndx)) < valid-group-nodes(prefixn(n, gndx + gnd ')), # gndx < n0, n ≤ n0, ∀ n0, n1. valid-group-nodes(prefixn(n0, gndx)) < valid-group-nodes(prefixn(n1, gndx)) ∧ valid-group-nodes(prefixn(n0, gndx)) < # prefixn(n1, gndx) ∧ n1 ≤ n0 → gndx = [] ∨ n1 = 0 ⊦ n = 0 |
(boolvar0 ⊃ # gndx + 1;valid-group-nodes(gndx)) < # prefixn(n, gndx + mkgnode(nd, m, boolvar, boolvar0) '), (boolvar0 ⊃ # gndx + 1;valid-group-nodes(gndx)) < valid-group-nodes(prefixn(n, gndx + mkgnode(nd, m, boolvar, boolvar0) ')), # gndx < n0, n ≤ n0, ∀ n0, n1. valid-group-nodes(prefixn(n0, gndx)) < valid-group-nodes(prefixn(n1, gndx)) ∧ valid-group-nodes(prefixn(n0, gndx)) < # prefixn(n1, gndx) ∧ n1 ≤ n0 → gndx = [] ∨ n1 = 0 ⊦ n = 0
Used simplifier rules: valid-group-nodes-ls: ⊦ n < valid-group-nodes(gndx) → n < # gndx;% ⊦ m < n → n ≠ 0; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ gndx + gnd ' ≠ []; (s)% ⊦ prefixn(n, gndx) = [] ↔ n = 0 ∨ gndx = []; (ss)% ⊦ # gndx = 0 ↔ gndx = []; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic