95stepUser applied rule invariant righti0 = 0, ar1 = ar0, # ar0 = m0 + 1, n→i(m0) = j0
⊦
⟪while i0 ≤ j0 do if ¬ ar1[i→n(i0)]
then i0 := i0 + 1
else if ar1[i→n(j0)]
then j0 := j0 - 1
else {
swap#(i0, j0; ar1) ; i0 := i0 + 1 ; j0 := j0 - 1
}⟫ ((∀ m, n. m ≤ n ∧ n < # ar1 → ar1[n] ∨ ¬ ar1[m]) ∧ perm(arr2list(ar1, # ar1 - 1), arr2list(ar0, m0)))85i0 ≤ j0, # ar0 = m0 + 1, # ar0 = # ar1, i0 ≤ n→i(# ar1), j0 < n→i(# ar1), 0 ≤ i0, i0 ≤ j0 + 1, ∀ i. 0 ≤ i ∧ i < i0 → ¬ ar1[i→n(i)],
∀ i. j0 < i ∧ i < n→i(# ar1) → ar1[i→n(i)], perm(arr2list(ar0, # ar0 - 1), arr2list(ar1, # ar1 - 1)), j0 = j, i0 = i
⊦
⟪if ¬ ar1[i→n(i0)]
then i0 := i0 + 1
else if ar1[i→n(j0)]
then j0 := j0 - 1
else {
swap#(i0, j0; ar1) ; i0 := i0 + 1 ; j0 := j0 - 1
}⟫
( # ar0 = m0 + 1 ∧ # ar0 = # ar1 ∧ i0 ≤ n→i(# ar1) ∧ j0 < n→i(# ar1) ∧ 0 ≤ i0 ∧ i0 ≤ j0 + 1 ∧ (∀ i. 0 ≤ i ∧ i < i0 → ¬ ar1[i→n(i)])
∧ (∀ i. j0 < i ∧ i < n→i(# ar1) → ar1[i→n(i)]) ∧ perm(arr2list(ar0, # ar0 - 1), arr2list(ar1, # ar1 - 1))
∧ i→n(j0 + 1) - i→n(i0) < i→n(j + 1) - i→n(i))94¬ i0 ≤ j0, # ar0 = m0 + 1, # ar0 = # ar1, i0 ≤ n→i(# ar1), j0 < n→i(# ar1), 0 ≤ i0, i0 ≤ j0 + 1, ∀ i. 0 ≤ i ∧ i < i0 → ¬ ar1[i→n(i)],
∀ i. j0 < i ∧ i < n→i(# ar1) → ar1[i→n(i)], perm(arr2list(ar0, # ar0 - 1), arr2list(ar1, # ar1 - 1)),
(∃ m, n. ¬ (m ≤ n ∧ n < # ar1 → ar1[n] ∨ ¬ ar1[m])) ∨ ¬ perm(arr2list(ar1, # ar1 - 1), arr2list(ar0, m0))
⊦
[invariant-arg: i→n(j0 + 1) - i→n(i0)
, ( # ar0 = m0 + 1 ∧ # ar0 = # ar1 ∧ i0 ≤ n→i(# ar1)
∧ j0 < n→i(# ar1) ∧ 0 ≤ i0 ∧ i0 ≤ j0 + 1
∧ (∀ i. 0 ≤ i ∧ i < i0 → ¬ ar1[i→n(i)])
∧ (∀ i. j0 < i ∧ i < n→i(# ar1) → ar1[i→n(i)])
∧ perm(arr2list(ar0, # ar0 - 1), arr2list(ar1, # ar1 - 1)))
, pos: right 1
][[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ 0 ≤ n→i(n)],
[CSIMPSEQ : ⊦ n→i(m) < n→i(n) ↔ m < n],
[CSIMPSEQ : ⊦ ¬ m < n ↔ n ≤ m],
[CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1],
[CSIMPSEQ : ⊦ m + n = n + m],
[CSIMPSEQ : ⊦ m = n + 1 → ¬ m ≤ n],
[CSIMPSEQ : ⊦
((* j)) ≤ i0 + ((* j0))
↔ j - j0 ≤ i0],
[CSIMPSEQ : i < 0 ⊦ ((* i)) ≤ n→i(n)],
[CSIMPSEQ : ⊦ i + j + i0 = (i + j) + i0],
[CSIMPSEQ : ⊦ i + j = j + i],
[CSIMPSEQ : ⊦ i < j → (¬ ¬ j ≤ i ↔ false)],
[CSIMPSEQ : ⊦ perm(x, x)],
[CSIMPFORWARD : ⊦ n→i(m) < j → 0 < j],
[CSIMPSEQ : ⊦ n→i(m + n) = n→i(m) + n→i(n)],
[CSIMPSEQ : ⊦ i < j + 1 ↔ i ≤ j])],
[EXTRAFMAS : (( # ar0 = m0 + 1 ∧ # ar0 = # ar1 ∧ i0 ≤ n→i(# ar1)
∧ j0 < n→i(# ar1) ∧ 0 ≤ i0 ∧ i0 ≤ j0 + 1
∧ (∀ i. 0 ≤ i ∧ i < i0 → ¬ ar1[i→n(i)])
∧ (∀ i. j0 < i ∧ i < n→i(# ar1) → ar1[i→n(i)])
∧ perm
(arr2list(ar0, # ar0 - 1), arr2list(ar1, # ar1 - 1))),
i→n(j0 + 1) - i→n(i0) = i→n(j0 + 1) - i→n(i0))]]