| ∃ m, n. ar[m] = ar[n] ∧ m ≠ n ∧ m < # ar ∧ n < # ar ∧ ar[m] ≠ a ⊦ ⦉FINDDUPSND#(ar, a; m0, n0)⦊ (ar[m0] = ar[n0] ∧ ar[m0] ≠ a ∧ m0 ≠ n0 ∧ m0 < # ar ∧ n0 < # ar) |
⊦
∃ m, n. ar[m] = ar[n] ∧ m ≠ n ∧ m < # ar ∧ n < # ar ∧ ar[m] ≠ a ⊦ ⦉let m1 = 0, bv = false in { n := n0, m := m0, a0 := a, ar0 := ar ; while m1 < # ar0 ∧ ¬ bv do { let n1 = m1 + 1 in while n1 < # ar0 ∧ ¬ bv do if ar0[m1] = ar0[n1] ∧ ar0[m1] ≠ a0 then m := m1, n := n1, bv := true else n1 := n1 + 1 ; m1 := m1 + 1 } }⦊ (ar[m] = ar[n] ∧ ar[m] ≠ a ∧ m ≠ n ∧ m < # ar ∧ n < # ar)
[[CONCRETESIMPRULES : ()]]