| A[n0] = A[m], m < # A, m ≤ n0, m < n0 → mkbag(A[m, a], n0) = (mkbag(A, n0) -- A[m]) ++ a, ∀ m, A, a. m < n0 ∧ m < # A → mkbag(A[m, a], n0) = (mkbag(A, n0) -- A[m]) ++ a ⊦ mkbag(A[m, a], n0) ++ A[m, a][n0] = mkbag(A, n0) ++ a |
A[n0] = A[m], mkbag(A[m, a], n0) = (mkbag(A, n0) -- A[m]) ++ a, m < # A, m ≤ n0, ∀ m, A, a. m < n0 ∧ m < # A → mkbag(A[m, a], n0) = (mkbag(A, n0) -- A[m]) ++ a ⊦ mkbag(A[m, a], n0) ++ A[m, a][n0] = mkbag(A, n0) ++ a
Used simplifier rules: mkbag-update-out-of-bound: ⊦ n ≤ m → mkbag(A[m, a], n) = mkbag(A, n);% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ m < # ar → ar[m, a][m] = a; (s)% ⊦ bag0 ++ a = bag1 ++ a ↔ bag0 = bag1; (s)