| j = 0, i + 1 < # A, Inv-first-inner(A, A0, x, y, i, j) ⊦ Inv-last-inner(A[j + 1, x], A0, x, y, i, j) |
# A = # A0, i + 1 < # A0, perm(A[0, y][1, x], A0), sorted(A, 2, i + 2), i ≤ # A0, 0 ≠ i → x < A[2] ⊦ x < y, sorted(A[1, x], 1, i + 2) ∧ perm(A[1, x][0, y], A0)
Used simplifier rules: Inv-first-inner: ⊦ Inv-first-inner(A, A0, x, y, i, j) ↔ # A ≠ 0 ∧ # A = # A0 ∧ i ≤ # A ∧ j ≤ i ∧ y ≤ x ∧ (j ≠ i → x < A[j + 2]) ∧ sorted(A, 0, j) ∧ sorted(A, j + 2, i + 2) ∧ (j ≠ i ∧ j ≠ 0 → A[j - 1] ≤ A[j + 2]) ∧ perm(A[j, y][j + 1, x], A0);%Inv-last-inner: ⊦ Inv-last-inner(A, A0, x, y, i, j) ↔ # A ≠ 0 ∧ # A = # A0 ∧ i ≤ # A ∧ j ≤ i ∧ y ≤ x ∧ y ≤ A[j + 1] ∧ sorted(A, 0, j) ∧ sorted(A, j + 1, i + 2) ∧ (j ≠ 0 → A[j - 1] ≤ A[j + 1]) ∧ perm(A[j, y], A0);%m < # ar ⊦ ar[m, a][m] = a; (s)% ⊦ ¬ m < n → ¬ m + m0 < n; (s)% ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%m ≤ n0 ⊦ sorted(ar[n0, a], n, m) ↔ sorted(ar, n, m); (s)% ⊦ # ar[n, a] = # ar; (s)% ⊦ sorted(ar, 0, 0); (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ x ≤ y ↔ ¬ y < x; (s)% ⊦ 0 ≤ m; (s)% ⊦ m < n → n ≠ 0; (s)