| Inv-first-inner(A, A0, x, y, i, j) ⊦ Inv-first-inner(A1, A2, x0, y0, i0, j0) ↔ # 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) → # A1 ≠ 0 ∧ # A1 = # A2 ∧ i0 ≤ # A1 ∧ j0 ≤ i0 ∧ y0 ≤ x0 ∧ (j0 ≠ i0 → x0 < A1[j0 + 2]) ∧ sorted(A1, 0, j0) ∧ sorted(A1, j0 + 2, i0 + 2) ∧ (j0 ≠ i0 ∧ j0 ≠ 0 → A1[j0 - 1] ≤ A1[j0 + 2]) ∧ perm(A1[j0, y0][j0 + 1, x0], A2) |
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);%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)%m ≤ m0 ⊦ sorted(A, m, n) → sorted(A, m0, n); (ss)% ⊦ x ≤ y ↔ ¬ y < x; (s)