| ⊦ count(a, bag0 \ bag1) = (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) |
count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦
| count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦ |
count(a, bag0 \ bag1) = (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0), count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦
count(a, bag0 \ bag1) ≠ (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0), count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦
Used formulas: count(a, bag0 \ bag1) = (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0)
| count(a, bag0 \ bag1) = (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0), count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦ |
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m - m = 0; (s) ⊦ m < n → m ≤ n; (s)
| count(a, bag0 \ bag1) ≠ (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0), count(a, bag0 \ bag1) ≠ (count(a, bag1) ≤ count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦ |
count(a, bag0 \ bag1) ≠ (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦
| count(a, bag0 \ bag1) ≠ (count(a, bag1) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag1);0) ⊦ |
count(a, bag0 \ ∅) ≠ (count(a, ∅) < count(a, bag0) ⊃ count(a, bag0) - count(a, ∅);0) ⊦
count(a, bag0 \ (bag ++ a0)) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0), ∀ a, bag0. count(a, bag0 \ bag) = (count(a, bag) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag);0) ⊦
Used simplifier rules: bag generated by ∅, ++;;
| count(a, bag0 \ ∅) ≠ (count(a, ∅) < count(a, bag0) ⊃ count(a, bag0) - count(a, ∅);0) ⊦ |
count(a, bag0) ≠ (count(a, bag0) ≠ 0 ⊃ count(a, bag0);0) ⊦
Used simplifier rules: diff-empty: ⊦ bag0 \ ∅ = bag0; ⊦ m - 0 = m; (s) ⊦ count(a, ∅) = 0; (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| count(a, bag0) ≠ (count(a, bag0) ≠ 0 ⊃ count(a, bag0);0) ⊦ |
| count(a, bag0 \ (bag ++ a0)) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0), ∀ a, bag0. count(a, bag0 \ bag) = (count(a, bag) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag);0) ⊦ |
count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0), ∀ a, bag0. count(a, bag0 \ bag) = (count(a, bag) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag);0) ⊦
Used simplifier rules: diff-rec: ⊦ bag0 \ (bag1 ++ a) = (bag0 -- a) \ bag1;
| count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0), ∀ a, bag0. count(a, bag0 \ bag) = (count(a, bag) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag);0) ⊦ |
count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0 -- a0) ⊃ count(a, bag0 -- a0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦
Used terms: a, bag0 -- a0
| count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0 -- a0) ⊃ count(a, bag0 -- a0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦ |
count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦
Used simplifier rules: count-del: ⊦ count(a, bag -- b) = count(a, bag) - (a = b ∧ count(a, bag) ≠ 0 ⊃ 1;0);
| count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦ |
⊦ a ≠ b → count(a, bag ++ b) = count(a, bag)
a = a0, count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦
Used simplifier rules: ⊦ m - 0 = m; (s) Used terms: a0, bag, a
| ⊦ a ≠ b → count(a, bag ++ b) = count(a, bag) |
| a = a0, count(a, (bag0 -- a0) \ bag) = (count(a, bag) < count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a, bag0) - (a = a0 ∧ count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a, bag);0), count(a, (bag0 -- a0) \ bag) ≠ (count(a, bag ++ a0) < count(a, bag0) ⊃ count(a, bag0) - count(a, bag ++ a0);0) ⊦ |
count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ (count(a0, bag) + 1 < count(a0, bag0) ⊃ count(a0, bag0) - count(a0, bag) + 1;0) ⊦
Used simplifier rules: ⊦ count(a, bag ++ a) = count(a, bag) + 1; (s)
| count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ (count(a0, bag) + 1 < count(a0, bag0) ⊃ count(a0, bag0) - count(a0, bag) + 1;0) ⊦ |
count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ count(a0, bag0) - count(a0, bag) + 1, count(a0, bag) + 1 < count(a0, bag0) ⊦
count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ 0, ¬ count(a0, bag) + 1 < count(a0, bag0) ⊦
| count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ count(a0, bag0) - count(a0, bag) + 1, count(a0, bag) + 1 < count(a0, bag0) ⊦ |
count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - 1 - count(a0, bag), count(a0, bag0) - 1 - count(a0, bag) ≠ count(a0, bag0) - count(a0, bag) + 1, count(a0, bag) + 1 < count(a0, bag0) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic n0 ≤ n ⊦ m < n - n0 ↔ m + n0 < n; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - 1 - count(a0, bag), count(a0, bag0) - 1 - count(a0, bag) ≠ count(a0, bag0) - count(a0, bag) + 1, count(a0, bag) + 1 < count(a0, bag0) ⊦ |
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (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: count(a0, bag0), m
| count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ 0, ¬ count(a0, bag) + 1 < count(a0, bag0) ⊦ |
count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag0) ≤ count(a0, bag) + 1 ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| count(a0, (bag0 -- a0) \ bag) = (count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊃ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag);0), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag0) ≤ count(a0, bag) + 1 ⊦ |
count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦
| count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦ |
count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic le-one: ⊦ m ≤ n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| count(a0, (bag0 -- a0) \ bag) = count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) - count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦ |
count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) = n0 + count(a0, bag), count(a0, (bag0 -- a0) \ bag) = n0, count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1, count(a0, bag0) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag), n0
| count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) = n0 + count(a0, bag), count(a0, (bag0 -- a0) \ bag) = n0, count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag) < count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag0) ≤ count(a0, bag) + 1, count(a0, bag0) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0), count(a0, bag) ≤ count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) ⊦ |
count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) = count(a0, (bag0 -- a0) \ bag) + count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag0) ≤ count(a0, (bag0 -- a0) \ bag) + count(a0, bag), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦
Used simplifier rules: 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 < n → n ≠ 0; (s) le-one: ⊦ m ≤ n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| count(a0, bag0) - (count(a0, bag0) ≠ 0 ⊃ 1;0) = count(a0, (bag0 -- a0) \ bag) + count(a0, bag), count(a0, (bag0 -- a0) \ bag) ≠ 0, count(a0, bag0) ≤ count(a0, (bag0 -- a0) \ bag) + count(a0, bag), count(a0, bag0) ≤ count(a0, bag) + 1 ⊦ |
Used simplifier rules: del-notin: ⊦ count(a, bag) = 0 → bag -- a = bag; leprf: ⊦ m ≤ m - 1 → m = 0; (forward) from specification nat ⊦ m - 0 = m; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used formulas: count(a0, bag0) = 0
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.