| ⊦ (bag0 \ bag1).count(a) = (bag1.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag1.count(a);0) |
(bag0 \ bag1).count(a) ≠ (bag1.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag1.count(a);0) ⊦
| (bag0 \ bag1).count(a) ≠ (bag1.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag1.count(a);0) ⊦ |
(bag0 \ (bag ++ a0)).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦
Used simplifier rules: diff-empty: ⊦ bag0 \ ∅ = bag0; Bag[A] generated by ∅, ++; ⊦ 0 ≤ m; (s) ⊦ ∅.count(a) = 0; (s) ⊦ m - 0 = m; (s)
| (bag0 \ (bag ++ a0)).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦ |
((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦
Used simplifier rules: diff-rec: ⊦ bag0 \ (bag1 ++ a) = (bag0 -- a) \ bag1;
| ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦ |
⊦ bag.count(a) = 0 → bag -- a = bag
bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦
bag0.count(a0) = 0, (bag0 \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦
Used terms: bag0, a0
| ⊦ bag.count(a) = 0 → bag -- a = bag |
| bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦ |
((bag0 -- a0) \ bag).count(a) = (bag.count(a) ≤ (bag0 -- a0).count(a) ⊃ (bag0 -- a0).count(a) - bag.count(a);0), bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
Used terms: bag0 -- a0, a
| ((bag0 -- a0) \ bag).count(a) = (bag.count(a) ≤ (bag0 -- a0).count(a) ⊃ (bag0 -- a0).count(a) - bag.count(a);0), bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
((bag0 -- a0) \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0), bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
Used simplifier rules: count-del: ⊦ (bag -- b).count(a) = bag.count(a) - (a = b ∧ bag.count(a) ≠ 0 ⊃ 1;0);
| ((bag0 -- a0) \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0), bag0.count(a0) ≠ 0, ((bag0 -- a0) \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
bag0.count(a0) ≠ 0, (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
| bag0.count(a0) ≠ 0, (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
⊦ a ≠ b → (bag ++ b).count(a) = bag.count(a)
a = a0, bag0.count(a0) ≠ 0, (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
Used simplifier rules: ⊦ m - 0 = m; (s) Used terms: bag, a0, a
| ⊦ a ≠ b → (bag ++ b).count(a) = bag.count(a) |
| a = a0, bag0.count(a0) ≠ 0, (bag.count(a) ≤ bag0.count(a) - (a = a0 ⊃ 1;0) ⊃ bag0.count(a) - (a = a0 ⊃ 1;0) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
bag0.count(a0) ≠ 0, (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - 1 - bag.count(a0);0) ≠ (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - bag.count(a0) + 1;0) ⊦
Used simplifier rules: ⊦ (bag ++ a).count(a) = bag.count(a) + 1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s) n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| bag0.count(a0) ≠ 0, (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - 1 - bag.count(a0);0) ≠ (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - bag.count(a0) + 1;0) ⊦ |
bag0.count(a0) - 1 - bag.count(a0) ≠ (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - bag.count(a0) + 1;0), bag0.count(a0) ≠ 0, bag.count(a0) < bag0.count(a0) ⊦
| bag0.count(a0) - 1 - bag.count(a0) ≠ (bag.count(a0) < bag0.count(a0) ⊃ bag0.count(a0) - bag.count(a0) + 1;0), bag0.count(a0) ≠ 0, bag.count(a0) < bag0.count(a0) ⊦ |
bag0.count(a0) - 1 - bag.count(a0) ≠ bag0.count(a0) - bag.count(a0) + 1, bag.count(a0) < bag0.count(a0) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| bag0.count(a0) - 1 - bag.count(a0) ≠ bag0.count(a0) - bag.count(a0) + 1, bag.count(a0) < bag0.count(a0) ⊦ |
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m + n - n + n1 = m - n1; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: bag0.count(a0), n0
| bag0.count(a0) = 0, (bag0 \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0), ∀ bag0, a. (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ⊦ |
bag0.count(a0) = 0, (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0), (bag0 \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
Used terms: bag0, a
| bag0.count(a0) = 0, (bag0 \ bag).count(a) = (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0), (bag0 \ bag).count(a) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
bag0.count(a0) = 0, (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦
| bag0.count(a0) = 0, (bag.count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - bag.count(a);0) ≠ ((bag ++ a0).count(a) ≤ bag0.count(a) ⊃ bag0.count(a) - (bag ++ a0).count(a);0) ⊦ |
⊦ a ≠ b → (bag ++ b).count(a) = bag.count(a)
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ (bag ++ a).count(a) = bag.count(a) + 1; (s) ⊦ m ≤ 0 ↔ m = 0; (s) ⊦ ¬ n < 0; (s) Used terms: bag, a0, a
| ⊦ a ≠ b → (bag ++ b).count(a) = bag.count(a) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.