| dups(restn(n, a ' + x0)), n ≤ # x0 + 1, ∀ n0. ¬ dups(restn(n0, x0)) ∨ ¬ n0 ≤ # x0 ⊦ a ∈ x0, dups(x0) |
⊦ 0 < n → restn(n, x) = restn(n -1, x.rest)
0 < n, dups(restn(n -1, (a ' + x0).rest)), n ≤ # x0 + 1, ∀ n0. ¬ dups(restn(n0, x0)) ∨ ¬ n0 ≤ # x0 ⊦ a ∈ x0, dups(x0)
Used simplifier rules: restN-zero: ⊦ restn(0, x) = x;%zero: ⊦ 0 < m ↔ m ≠ 0; from specification nat-basic1%lez: ⊦ 0 ≤ m; from specification nat%rec: ⊦ dups(a ' + x) ↔ ¬ ¬(a ∈ x ∨ dups(x)); from specification list-dup%a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: a ' + x0, n