| (mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ a ++ A[m + 2] = mkbag(A0, # A0), m < # A, m + 2 < # A, m + 1 < # A ⊦ (mkbag(A, # A) -- A[m + 1] -- A[m]) ++ a ++ A[m] = (mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ a ++ A[m + 2], a = A[m + 1], a = A[m + 2] |
⊦ bag ++ a ++ b = bag ++ b ++ a
Used simplifier rules: in-mkbag-del: i ≤ # A, m < i, n < i, n ≠ m ⊦ A[m] ∈ mkbag(A, i) -- A[n];%bag-del-add: a ∈ bag ⊦ (bag -- a) ++ a = bag;% ⊦ m ≤ m; (s)% ⊦ m = m + n ↔ n = 0; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ bag0 ++ a ++ b = bag1 ++ a ↔ bag0 ++ b = bag1; (ss)% ⊦ m + n = m + n0 ↔ n = n0; (s) Used terms: A[m], a, mkbag(A, # A) -- A[m + 1] -- A[m]