| ∀ ar1, ar0. n ≤ # ar1 → (ar0 + ar1) elems (n + # ar0) = (ar0 elems # ar0) ∪ (ar1 elems n) ∨ # ar1 = 0 ∨ n = 0, n +1 ≤ # ar1 ⊦ (ar0 + ar1) elems (n +1 + # ar0) = (ar0 elems # ar0) ∪ (ar1 elems n +1), # ar1 = 0, n +1 = 0 |
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : elems-rec, , , n < # ar ⊦ ar elems (n + 1) = (ar elems n) ++ ar[n]], [CSIMPNAMEDFORWARD : nat-basic1, , f, ⊦ m < n → n ≠ 0], [CSIMPNAMEDSEQ : bag-basic, , insert-inj, ⊦ bag0 ++ a = bag1 ++ a ↔ bag0 = bag1], [CSIMPNAMEDSEQ : array-splice, , append-atp2, ⊦ n < # ar1 → (ar0 + ar1)[# ar0 + n] = ar1[n]], [CSIMPNAMEDSEQ : nat-basic1, , f, ⊦ m < n → n ≠ 0], [CSIMPNAMEDSEQ : bag-union, , union-com, ⊦ bag0 ∪ bag1 = bag1 ∪ bag0], [CSIMPNAMEDSEQ : bag-union, , union-ass, ⊦ bag0 ∪ bag1 ∪ bag2 = (bag0 ∪ bag1) ∪ bag2], [CSIMPNAMEDSEQ : bag-union, , union-rec, ⊦ (bag0 ++ a) ∪ bag1 = (bag0 ∪ bag1) ++ a], [CSIMPNAMEDSEQ : array-splice, , append-len, ⊦ # (ar0 + ar1) = # ar0 + # ar1], [CSIMPNAMEDSEQ : array-splice, , append-a, ⊦ (ar + ar0) + ar1 = ar + ar0 + ar1], [CSIMPNAMEDSEQ : nat-basic2, , l, ⊦ m + n < m + n0 ↔ n < n0], [CSIMPNAMEDSEQ : nat, , lels, ⊦ ¬ m < n ↔ n ≤ m], [CSIMPNAMEDSEQ : nat-basic2, , oz, ⊦ m + 1 ≠ 0], [CSIMPNAMEDSEQ : nat, , succ-01, ⊦ m + 1 ≤ n ↔ m < n], [CSIMPNAMEDSEQ : nat, , le-ls-simp, ⊦ m ≤ n → (n < m ↔ false)], [CSIMPNAMEDSEQ : nat-basic2, , a, ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPNAMEDSEQ : nat-basic2, , c, ⊦ m + n = n + m], [CSIMPNAMEDSEQ : nat-basic2, , succ, ⊦ m +1 = m + 1])]]