| (mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ A[m + 1] ++ b = mkbag(A0, # A0), m + 1 < # A, m + 2 < # A, m < # A ⊦ (mkbag(A, # A) -- A[m + 2] -- A[m]) ++ A[m] = (mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ A[m + 1], A[m + 1] = A[m + 2], b = A[m + 2] |
(mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ A[m + 1] ++ b = mkbag(A0, # A0), m < # A, m + 2 < # A, m + 1 < # A ⊦ mkbag(A, # A) -- A[m + 2] = (mkbag(A, # A) -- A[m + 1] -- A[m + 2]) ++ A[m + 1], A[m + 1] = A[m + 2], b = A[m + 2]
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;%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m = m + n ↔ n = 0; (s)% ⊦ m ≤ m; (s)