| m4 = n5 ∧ m0 < n1 ∧ n1 ≤ # ar ∧ (m0 < n3 ∧ n3 < n1 → ar[n3] ≠ ar[m0]) → ⦉m3 := m0, bv := false, ar0 := ar ; n4 := n2, m7 := m1 ; while n1 < # ar0 ∧ ¬ bv do if ar0[m3] = ar0[n1] then m7 := m3, n4 := n1, bv := true else n1 := n1 + 1⦊ ⦉m3 := m3 + 1⦊ ( (bv ⊃ (ar[m7] = ar[n4] ∧ m7 ≠ n4 ∧ m7 < # ar ∧ n4 < # ar); (∀ m1. m1 < m3 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]))) ∧ m3 ≤ # ar ∧ (∃ m, n. ar0[m] = ar0[n] ∧ m ≠ n ∧ m < # ar0 ∧ n < # ar0) ∧ ¬ m3 ≤ m0), ar1 = ar, m2 = m0, ¬ bv0, # ar = (m4 + 1) + n, ar[m] = ar[n0], n1 = n + 1, m ≠ n0, ar[m0] ≠ ar[n], n0 < # ar, m < # ar, m0 < n, n ≤ # ar, m0 < # ar, n0 ≤ m4 + n, m ≤ m4 + n, m0 ≤ m4 + n, ∀ m1. m1 < m0 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]), ∀ n0. m0 < n0 ∧ n0 < n → ar[n0] ≠ ar[m0], # ar = n5 + n1, n1 ≤ # ar ⊦ ⦉while n1 < # ar1 ∧ ¬ bv0 do if ar1[m2] = ar1[n1] then m1 := m2, n2 := n1, bv0 := true else n1 := n1 + 1⦊ ⦉m2 := m2 + 1⦊ ( (bv0 ⊃ (ar[m1] = ar[n2] ∧ m1 ≠ n2 ∧ m1 < # ar ∧ n2 < # ar); (∀ m1. m1 < m2 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]))) ∧ m2 ≤ # ar ∧ (∃ m, n. ar1[m] = ar1[n] ∧ m ≠ n ∧ m < # ar1 ∧ n < # ar1) ∧ ¬ m2 ≤ m0) |
m0 < n1 ∧ n1 ≤ # ar ∧ (m0 < n3 ∧ n3 < n1 → ar[n3] ≠ ar[m0]) → ⦉m3 := m0, bv := false, ar0 := ar ; n4 := n2, m7 := m1 ; while n1 < # ar0 ∧ ¬ bv do if ar0[m3] = ar0[n1] then m7 := m3, n4 := n1, bv := true else n1 := n1 + 1⦊ ⦉m3 := m3 + 1⦊ ( (bv ⊃ (ar[m7] = ar[n4] ∧ m7 ≠ n4 ∧ m7 < # ar ∧ n4 < # ar); (∀ m1. m1 < m3 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]))) ∧ m3 ≤ # ar ∧ (∃ m, n. ar0[m] = ar0[n] ∧ m ≠ n ∧ m < # ar0 ∧ n < # ar0) ∧ ¬ m3 ≤ m0), m2 = m0, n1 = n + 1, ar[m] = ar[n0], # ar = (n5 + 1) + n, ar1 = ar, ¬ bv0, ar[m0] ≠ ar[n], m ≠ n0, m0 < n5 + n, m ≤ n5 + n, n0 ≤ n5 + n, m0 < # ar, m0 < n, m < # ar, n0 < # ar, n < # ar, ∀ n0. m0 < n0 ∧ n0 < n → ar[n0] ≠ ar[m0], ∀ m1. m1 < m0 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]) ⊦ ⦉while n1 < # ar1 ∧ ¬ bv0 do if ar1[m2] = ar1[n1] then m1 := m2, n2 := n1, bv0 := true else n1 := n1 + 1⦊ ⦉m2 := m2 + 1⦊ ( (bv0 ⊃ (ar[m1] = ar[n2] ∧ m1 ≠ n2 ∧ m1 < # ar ∧ n2 < # ar); (∀ m1. m1 < m2 → (∀ n. m1 < n ∧ n < # ar → ar[m1] ≠ ar[n]))) ∧ m2 ≤ # ar ∧ (∃ m, n. ar1[m] = ar1[n] ∧ m ≠ n ∧ m < # ar1 ∧ n < # ar1) ∧ ¬ m2 ≤ m0)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ m < n → n ≠ 0], [CSIMPFORWARD : ⊦ m < n → n ≠ 0], [CSIMPFORWARD : ⊦ m < n ∧ m = n0 → n0 < n], [CSIMPSEQ : ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m], [CSIMPSEQ : ⊦ m + n < m + n0 ↔ n < n0], [CSIMPSEQ : ⊦ m +1 = m + 1], [CSIMPSEQ : ⊦ m ≤ n → (n < m ↔ false)], [CSIMPSEQ : ⊦ ¬ m + n < m], [CSIMPSEQ : ⊦ m < n + 1 ↔ ¬ n < m], [CSIMPFORWARD : ⊦ m < n ∧ n < n0 → m +1 < n0], [CSIMPFORWARD : ⊦ m < n ∧ n = n0 → m < n0], [CSIMPFORWARD : ⊦ m = n + 1 ∧ n < n0 → m ≤ n0], [CSIMPFORWARD : ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1], [CSIMPSEQ : ⊦ m < n → m ≤ n], [CSIMPSEQ : ⊦ m + 1 ≤ n ↔ m < n], [CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1])]]