| ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ indhyp-array(ar) |
¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦
| ¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦
| ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ |
¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), ∃ n. n ≤ # ar ∧ (∀ m. m < # ar - n → ar(m) = [].head) ⊦
¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ ∃ n. n ≤ # ar ∧ (∀ m. m < # ar - n → ar(m) = [].head)
Used formulas: ∃ n. n ≤ # ar ∧ (∀ m. m < # ar - n → ar(m) = [].head)
| ¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), ∃ n. n ≤ # ar ∧ (∀ m. m < # ar - n → ar(m) = [].head) ⊦ |
n ≤ # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n < # ar → ar(m) = [].head ⊦
Used simplifier rules: n0 ≤ n ⊦ m < n - n0 ↔ m + n0 < n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| n ≤ # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n < # ar → ar(m) = [].head ⊦ |
0 ≤ # ar, ¬ indhyp-array(ar), ∀ m. m + 0 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦
n0.+1 ≤ # ar, ¬ indhyp-array(ar), ∀ m. m + n0.+1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, indhyp-array. ¬ ( n0 ≤ # ar ∧ ¬ indhyp-array(ar) ∧ (∀ m. indhyp-array(mklist([].head, m))) ∧ (∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a))) ∧ (∀ m. m + n0 < # ar → ar(m) = [].head)) ⊦
Used simplifier rules: Nat freely generated by 0, +1;
| 0 ≤ # ar, ¬ indhyp-array(ar), ∀ m. m + 0 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m < # ar → ar(m) = [].head ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ 0 ≤ m; (s)
| ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m < # ar → ar(m) = [].head ⊦ |
indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦
Used terms: # ar
| indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ |
ar ≠ mklist([].head, # ar), indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m < # ar → ar(m) = [].head ⊦
Used formulas: ar = mklist([].head, # ar)
| ar ≠ mklist([].head, # ar), indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m < # ar → ar(m) = [].head ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), # ar ≠ # mklist([].head, # ar) ∨ (∃ n. ¬(n < # ar → ar(n) = mklist([].head, # ar)(n))) ⊦
Used terms: ar, mklist([].head, # ar)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), # ar ≠ # mklist([].head, # ar) ∨ (∃ n. ¬(n < # ar → ar(n) = mklist([].head, # ar)(n))) ⊦ |
ar(n) ≠ [].head, ar ≠ [], n < # ar, indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦
Used simplifier rules: Size-mkarray: ⊦ # mklist([].head, n) = n; ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → mklist(a, n)(m) = a; (s)
| ar(n) ≠ [].head, ar ≠ [], n < # ar, indhyp-array(mklist([].head, # ar)), ¬ indhyp-array(ar), ∀ m. m < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ |
Used terms: n
| n0.+1 ≤ # ar, ¬ indhyp-array(ar), ∀ m. m + n0.+1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, indhyp-array. ¬ ( n0 ≤ # ar ∧ ¬ indhyp-array(ar) ∧ (∀ m. indhyp-array(mklist([].head, m))) ∧ (∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a))) ∧ (∀ m. m + n0 < # ar → ar(m) = [].head)) ⊦ |
ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar0, indhyp-array0. ¬ n0 ≤ # ar0 ∨ indhyp-array0(ar0) ∨ ¬(∀ m. indhyp-array0(mklist([].head, m))) ∨ ¬(∀ ar, m, a. indhyp-array0(ar) → indhyp-array0(ar(m := a))) ∨ ¬(∀ m. m + n0 < # ar0 → ar0(m) = [].head), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m.+1 = m + 1; (s) c: ⊦ m + n = n + m; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s)
| ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar0, indhyp-array0. ¬ n0 ≤ # ar0 ∨ indhyp-array0(ar0) ∨ ¬(∀ m. indhyp-array0(mklist([].head, m))) ∨ ¬(∀ ar, m, a. indhyp-array0(ar) → indhyp-array0(ar(m := a))) ∨ ¬(∀ m. m + n0 < # ar0 → ar0(m) = [].head), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ¬ n0 ≤ # ar(# ar - n0.+1 := [].head) ∨ indhyp-array(ar(# ar - n0.+1 := [].head)) ∨ ¬(∀ m. indhyp-array(mklist([].head, m))) ∨ ¬(∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a))) ∨ ¬(∀ m. m + n0 < # ar(# ar - n0.+1 := [].head) → ar(# ar - n0.+1 := [].head)(m) = [].head) ⊦
Used terms: ar(# ar - n0.+1 := [].head), indhyp-array
| ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ¬ n0 ≤ # ar(# ar - n0.+1 := [].head) ∨ indhyp-array(ar(# ar - n0.+1 := [].head)) ∨ ¬(∀ m. indhyp-array(mklist([].head, m))) ∨ ¬(∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a))) ∨ ¬(∀ m. m + n0 < # ar(# ar - n0.+1 := [].head) → ar(# ar - n0.+1 := [].head)(m) = [].head) ⊦ |
ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), indhyp-array(ar(# ar - n0 + 1 := [].head)) ∨ ¬(m + n0 < # ar → ar(# ar - n0 + 1 := [].head)(m) = [].head) ⊦
Used simplifier rules: Size-put: ⊦ # ar(n := a) = # ar; ⊦ m.+1 = m + 1; (s) ⊦ m < n → m ≤ n; (s)
| ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)), indhyp-array(ar(# ar - n0 + 1 := [].head)) ∨ ¬(m + n0 < # ar → ar(# ar - n0 + 1 := [].head)(m) = [].head) ⊦ |
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, n0 + 1 ≤ # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, indhyp-array(ar(n1 := [].head)) ∨ ¬(m + n0 < # ar → ar(n1 := [].head)(m) = [].head) ⊦
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # ar, n0 + 1, n1
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, n0 + 1 ≤ # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, indhyp-array(ar(n1 := [].head)) ∨ ¬(m + n0 < # ar → ar(n1 := [].head)(m) = [].head) ⊦ |
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, indhyp-array(ar(n1 := [].head)) ∨ ¬(m + n0 < # ar → ar(n1 := [].head)(m) = [].head) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s)
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, indhyp-array(ar(n1 := [].head)) ∨ ¬(m + n0 < # ar → ar(n1 := [].head)(m) = [].head) ⊦ |
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦
# ar = n1 + n0 + 1, ar(n1 := [].head)(m) ≠ [].head, ar ≠ [], m + n0 < # ar, n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), indhyp-array(ar(n1 := [].head)) → indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ∀ m. indhyp-array(mklist([].head, m)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦
Used terms: ar(n1 := [].head), n1, ar(n1)
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), indhyp-array(ar(n1 := [].head)) → indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ∀ m. indhyp-array(mklist([].head, m)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦ |
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)) ⊦
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
# ar = n1 + n0 + 1, ar(n1 := [].head)(n1 := ar(n1)) ≠ ar, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦
Used formulas: ar(n1 := [].head)(n1 := ar(n1)) = ar
| # ar = n1 + n0 + 1, ar(n1 := [].head)(n1 := ar(n1)) ≠ ar, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), indhyp-array(ar(n1 := [].head)), ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
# ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)), # ar(n1 := [].head)(n1 := ar(n1)) ≠ # ar ∨ (∃ n. ¬(n < # ar(n1 := [].head)(n1 := ar(n1)) → ar(n1 := [].head)(n1 := ar(n1))(n) = ar(n))) ⊦
Used terms: ar(n1 := [].head)(n1 := ar(n1)), ar
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| # ar = n1 + n0 + 1, ar ≠ [], n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)), # ar(n1 := [].head)(n1 := ar(n1)) ≠ # ar ∨ (∃ n. ¬(n < # ar(n1 := [].head)(n1 := ar(n1)) → ar(n1 := [].head)(n1 := ar(n1))(n) = ar(n))) ⊦ |
# ar = n1 + n0 + 1, ar(n1 := [].head)(n1 := ar(n1))(n) ≠ ar(n), ar ≠ [], n < # ar, n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), n ≤ n1 + n0, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)) ⊦
Used simplifier rules: Size-put: ⊦ # ar(n := a) = # ar; ⊦ m < n ↔ ¬ n ≤ m; (ss) 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) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| # ar = n1 + n0 + 1, ar(n1 := [].head)(n1 := ar(n1))(n) ≠ ar(n), ar ≠ [], n < # ar, n0 < # ar, indhyp-array(ar(n1 := [].head)), indhyp-array(ar(n1 := [].head)(n1 := ar(n1))), n ≤ n1 + n0, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
⊦ m ≠ n → ar(n := a)(m) = ar(m)
Used simplifier rules: Size-put: ⊦ # ar(n := a) = # ar; Put-other: ⊦ m ≠ n → ar(n := a)(m) = ar(m); ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) m < # x ⊦ x(m := a)(m) = a; (s) Used terms: ar(n1 := [].head), n1, ar(n1), n
| ⊦ m ≠ n → ar(n := a)(m) = ar(m) |
| # ar = n1 + n0 + 1, ar(n1 := [].head)(m) ≠ [].head, ar ≠ [], m + n0 < # ar, n0 < # ar, ¬ indhyp-array(ar), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head, ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ |
⊦ m ≠ n → ar(n := a)(m) = ar(m)
# ar = n1 + n0 + 1, ar(m) ≠ [].head, ar ≠ [], m ≠ n1, n0 < # ar, m + n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat 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 ≤ m; (s) ⊦ m + n < m0 → m + n < m0 + n0; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < # x ⊦ x(m := a)(m) = a; (s) Used terms: ar, n1, [].head, m
| ⊦ m ≠ n → ar(n := a)(m) = ar(m) |
| # ar = n1 + n0 + 1, ar(m) ≠ [].head, ar ≠ [], m ≠ n1, n0 < # ar, m + n0 < # ar, ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. m + n0 + 1 < # ar → ar(m) = [].head ⊦ |
Used simplifier rules: ⊦ 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 eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic Used terms: m
| ¬ indhyp-array(ar), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)), ∀ m. indhyp-array(mklist([].head, m)) ⊦ ∃ n. n ≤ # ar ∧ (∀ m. m < # ar - n → ar(m) = [].head) |
¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ ∃ n. n ≤ # ar ∧ (∀ m. m + n < # ar → ar(m) = [].head)
Used simplifier rules: n0 ≤ n ⊦ m < n - n0 ↔ m + n0 < n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| ¬ indhyp-array(ar), ∀ m. indhyp-array(mklist([].head, m)), ∀ ar, m, a. indhyp-array(ar) → indhyp-array(ar(m := a)) ⊦ ∃ n. n ≤ # ar ∧ (∀ m. m + n < # ar → ar(m) = [].head) |
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: # ar
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.