| m ≤ n, n ≤ # a, ∀ n0. m ≤ n0 ∧ n0 < n ∧ odd(n0) → p(a[n0]) ⊦ countodd(a, m, n, p) = (odd(m) ⊃ (n + 1 - m) / 2;(n - m) / 2) |
countodd(a, m, n, p) ≠ (odd(m) ⊃ (n + 1 - m) / 2;(n - m) / 2), n ≤ # a, m ≤ n, ∀ n0. m ≤ n0 ∧ n0 < n ∧ odd(n0) → p(a[n0]) ⊦
| countodd(a, m, n, p) ≠ (odd(m) ⊃ (n + 1 - m) / 2;(n - m) / 2), n ≤ # a, m ≤ n, ∀ n0. m ≤ n0 ∧ n0 < n ∧ odd(n0) → p(a[n0]) ⊦ |
countodd(a, m, n, p) ≠ (odd(m) ⊃ ((n - m) + 1) / 2;(n - m) / 2), m ≤ n, n ≤ # a, m ≤ # a, ∀ n0. m ≤ n0 ∧ n0 < n ∧ odd(n0) → p(a[n0]) ⊦
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s)
| countodd(a, m, n, p) ≠ (odd(m) ⊃ ((n - m) + 1) / 2;(n - m) / 2), m ≤ n, n ≤ # a, m ≤ # a, ∀ n0. m ≤ n0 ∧ n0 < n ∧ odd(n0) → p(a[n0]) ⊦ |
countodd(a, m, n0 +1, p) ≠ (odd(m) ⊃ ((n0 +1 - m) + 1) / 2;(n0 +1 - m) / 2), m ≤ # a, n0 +1 ≤ # a, m ≤ n0 +1, ∀ n1. m ≤ n1 ∧ n1 < n0 +1 ∧ odd(n1) → p(a[n1]), ∀ a, m, p. ¬ ( countodd(a, m, n0, p) ≠ (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∧ m ≤ n0 ∧ n0 ≤ # a ∧ m ≤ # a ∧ (∀ n1. m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1]))) ⊦
Used simplifier rules: countodd-base: m ≤ # a ⊦ countodd(a, m, m, p) = 0; nat freely generated by 0, +1;; ⊦ m ≤ 0 ↔ m = 0; (s) ⊦ ¬ n < 0; (s) ⊦ 0 ≤ m; (s) ⊦ ¬ odd(0); (s)
| countodd(a, m, n0 +1, p) ≠ (odd(m) ⊃ ((n0 +1 - m) + 1) / 2;(n0 +1 - m) / 2), m ≤ # a, n0 +1 ≤ # a, m ≤ n0 +1, ∀ n1. m ≤ n1 ∧ n1 < n0 +1 ∧ odd(n1) → p(a[n1]), ∀ a, m, p. ¬ ( countodd(a, m, n0, p) ≠ (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∧ m ≤ n0 ∧ n0 ≤ # a ∧ m ≤ # a ∧ (∀ n1. m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1]))) ⊦ |
a ≠ [], countodd(a, m, n0 + 1, p) ≠ (odd(m) ⊃ ((n0 + 1 - m) + 1) / 2;(n0 + 1 - m) / 2), n0 < # a, m ≤ n0 + 1, m ≤ # a, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ m + 1 ≤ n ↔ m < n; (s)
| a ≠ [], countodd(a, m, n0 + 1, p) ≠ (odd(m) ⊃ ((n0 + 1 - m) + 1) / 2;(n0 + 1 - m) / 2), n0 < # a, m ≤ n0 + 1, m ≤ # a, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])) ⊦ |
m ≤ n, n ≤ # a ⊦ countodd(a, m, n + 1, p) = countodd(a, m, n, p) + (odd(n) ∧ p(a[n]) ⊃ 1;0)
countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ ((n0 + 1 - m) + 1) / 2;(n0 + 1 - m) / 2), a ≠ [], n0 < # a, m ≤ # a, m ≤ n0 + 1, m ≤ n0, n0 ≤ # a, ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: countodd-base: m ≤ # a ⊦ countodd(a, m, m, p) = 0; ⊦ m < n → m ≤ n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → (n ≤ m + 1 ↔ n = m + 1); (s) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ odd(n + 1) ↔ even(n); (s) ⊦ m + n - n + n1 = m - n1; (s) ⊦ m - m = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: a, m, n0, p
| m ≤ n, n ≤ # a ⊦ countodd(a, m, n + 1, p) = countodd(a, m, n, p) + (odd(n) ∧ p(a[n]) ⊃ 1;0) |
| countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ ((n0 + 1 - m) + 1) / 2;(n0 + 1 - m) / 2), a ≠ [], n0 < # a, m ≤ # a, m ≤ n0 + 1, m ≤ n0, n0 ≤ # a, ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ (m + 2) / 2 = m / 2 + 1; (s)
| countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, ∀ a0, m0, p0. countodd(a0, m0, n0, p0) = (odd(m0) ⊃ ((n0 - m0) + 1) / 2;(n0 - m0) / 2) ∨ ¬ m0 ≤ n0 ∨ ¬ n0 ≤ # a0 ∨ ¬ m0 ≤ # a0 ∨ ¬(∀ n1. m0 ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p0(a0[n1])), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬ m ≤ n0 ∨ ¬ n0 ≤ # a ∨ ¬ m ≤ # a ∨ ¬(∀ n1. m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦
Used terms: a, m, p
| countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬ m ≤ n0 ∨ ¬ n0 ≤ # a ∨ ¬ m ≤ # a ∨ ¬(∀ n1. m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦ |
countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬(m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s)
| countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬(m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦ |
countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬(m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦
Used terms: n1
| countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2) ∨ ¬(m ≤ n1 ∧ n1 < n0 ∧ odd(n1) → p(a[n1])) ⊦ |
countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2), countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: ⊦ m < n → ¬ n < m; (s)
| countodd(a, m, n0, p) = (odd(m) ⊃ ((n0 - m) + 1) / 2;(n0 - m) / 2), countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], m < # a, n0 < # a, m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) = ((n0 - m) + 1) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, odd(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
countodd(a, m, n0, p) = (n0 - m) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, ¬ odd(m), m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
| countodd(a, m, n0, p) = ((n0 - m) + 1) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, odd(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) = ((n0 - m) + 1) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (n0 - m) / 2 + 1, a ≠ [], m < # a, n0 < # a, odd(m), m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
| countodd(a, m, n0, p) = ((n0 - m) + 1) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (n0 - m) / 2 + 1, a ≠ [], m < # a, n0 < # a, odd(m), m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) = (n2 + 1) / 2, n0 = n2 + m, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], n0 < # a, m < # a, odd(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n0, m, n2
| countodd(a, m, n0, p) = (n2 + 1) / 2, n0 = n2 + m, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], n0 < # a, m < # a, odd(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + (odd(n2 + m) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], m < # a, n2 + m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
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; (s)
| countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + (odd(n2 + m) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], m < # a, n2 + m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
⊦ odd(m + n) ↔ odd(m) ∧ even(n) ∨ even(m) ∧ odd(n)
countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + ((odd(n2) ∧ even(m) ∨ even(n2) ∧ odd(m)) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], n2 + m < # a, m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used terms: n2, m
| ⊦ odd(m + n) ↔ odd(m) ∧ even(n) ∨ even(m) ∧ odd(n) |
| countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + ((odd(n2) ∧ even(m) ∨ even(n2) ∧ odd(m)) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], n2 + m < # a, m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + (even(n2) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], m < # a, n2 + m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: ⊦ odd(n) → ¬ even(n); (s)
| countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + (even(n2) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ n2 / 2 + 1, a ≠ [], m < # a, n2 + m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + 0 ≠ n2 / 2 + 1, a ≠ [], n2 + m < # a, m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ¬ even(n2) ∨ ¬ p(a[n2 + m]) ⊦
Used simplifier rules: ⊦ even(n) → (n + 1) / 2 = n / 2; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| countodd(a, m, n2 + m, p) = (n2 + 1) / 2, countodd(a, m, n2 + m, p) + 0 ≠ n2 / 2 + 1, a ≠ [], n2 + m < # a, m < # a, odd(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ¬ even(n2) ∨ ¬ p(a[n2 + m]) ⊦ |
countodd(a, m, n2 + m, p) = n2 / 2, a ≠ [], m < # a, n2 + m < # a, even(n2), odd(m), ¬ p(a[n2 + m]), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
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) ⊦ even(n) → (n + 1) / 2 = n / 2; (s) ⊦ odd(n) → (n + 1) / 2 = n / 2 + 1; (s) ⊦ even(n) ↔ ¬ odd(n); (ss) ⊦ n + 0 = n; (s)
| countodd(a, m, n2 + m, p) = n2 / 2, a ≠ [], m < # a, n2 + m < # a, even(n2), odd(m), ¬ p(a[n2 + m]), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
Used simplifier rules: ⊦ m ≤ m + n; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ¬ n < n; (s) ⊦ odd(n) ↔ ¬ even(n); (ss) ⊦ even(m) → (even(m + n) ↔ even(n)); (s) ⊦ odd(n) → ¬ even(n); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n2 + m
| countodd(a, m, n0, p) = (n0 - m) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (odd(m) ⊃ (n0 - m) / 2 + 1;((n0 - m) + 1) / 2), a ≠ [], n0 < # a, m < # a, m ≤ n0, m ≤ n0 + 1, ¬ odd(m), m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) = (n0 - m) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ ((n0 - m) + 1) / 2, a ≠ [], m < # a, n0 < # a, even(m), m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: ⊦ odd(n) ↔ ¬ even(n); (ss)
| countodd(a, m, n0, p) = (n0 - m) / 2, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ ((n0 - m) + 1) / 2, a ≠ [], m < # a, n0 < # a, even(m), m ≤ n0 + 1, m ≤ n0, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n0, p) = n2 / 2, n0 = n2 + m, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], n0 < # a, m < # a, even(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n0, m, n2
| countodd(a, m, n0, p) = n2 / 2, n0 = n2 + m, countodd(a, m, n0, p) + (odd(n0) ∧ p(a[n0]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], n0 < # a, m < # a, even(m), m ≤ n0, m ≤ n0 + 1, m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n0 < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + (odd(n2 + m) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], m < # a, n2 + m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
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; (s)
| countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + (odd(n2 + m) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], m < # a, n2 + m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
⊦ odd(m + n) ↔ odd(m) ∧ even(n) ∨ even(m) ∧ odd(n)
countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + ((odd(n2) ∧ even(m) ∨ even(n2) ∧ odd(m)) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], n2 + m < # a, m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used terms: n2, m
| ⊦ odd(m + n) ↔ odd(m) ∧ even(n) ∨ even(m) ∧ odd(n) |
| countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + ((odd(n2) ∧ even(m) ∨ even(n2) ∧ odd(m)) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], n2 + m < # a, m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + (odd(n2) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], m < # a, n2 + m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
Used simplifier rules: ⊦ even(n) → ¬ odd(n); (s)
| countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + (odd(n2) ∧ p(a[n2 + m]) ⊃ 1;0) ≠ (n2 + 1) / 2, a ≠ [], m < # a, n2 + m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + 0 ≠ (n2 + 1) / 2, a ≠ [], n2 + m < # a, m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ¬ odd(n2) ∨ ¬ p(a[n2 + m]) ⊦
Used simplifier rules: ⊦ odd(n) → (n + 1) / 2 = n / 2 + 1; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| countodd(a, m, n2 + m, p) = n2 / 2, n2 / 2 + 0 ≠ (n2 + 1) / 2, a ≠ [], n2 + m < # a, m < # a, even(m), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ¬ odd(n2) ∨ ¬ p(a[n2 + m]) ⊦ |
countodd(a, m, n2 + m, p) = n2 / 2, a ≠ [], n2 + m < # a, m < # a, even(m), odd(n2), ¬ p(a[n2 + m]), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦
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) ⊦ odd(n) → (n + 1) / 2 = n / 2 + 1; (s) ⊦ even(n) → (n + 1) / 2 = n / 2; (s) ⊦ odd(n) ↔ ¬ even(n); (ss) ⊦ n + 0 = n; (s)
| countodd(a, m, n2 + m, p) = n2 / 2, a ≠ [], n2 + m < # a, m < # a, even(m), odd(n2), ¬ p(a[n2 + m]), m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]), ∀ n1. m ≤ n1 ∧ ¬ n2 + m < n1 ∧ odd(n1) → p(a[n1]) ⊦ |
Used simplifier rules: ⊦ m ≤ m + n; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ¬ n < n; (s) ⊦ odd(n) ↔ ¬ even(n); (ss) ⊦ even(m) → (even(m + n) ↔ even(n)); (s) ⊦ odd(n) → ¬ even(n); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n2 + m
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.