| ∀ 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]) ∨ ¬(n + n0 < # ar → (ar[# ar - n0 + 1 := [].head])[n] = [].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]) ∨ ¬(n + n0 < # ar → (ar[# ar - n0 + 1 := [].head])[n] = [].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]) ∨ ¬(n + n0 < # ar → (ar[n1 := [].head])[n] = [].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]) ∨ ¬(n + n0 < # ar → (ar[n1 := [].head])[n] = [].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]) ∨ ¬(n + n0 < # ar → (ar[n1 := [].head])[n] = [].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]) ∨ ¬(n + n0 < # ar → (ar[n1 := [].head])[n] = [].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])[n] ≠ [].head, ar ≠ [], n + 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])[n] ≠ [].head, ar ≠ [], n + 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[n] ≠ [].head, ar ≠ [], n ≠ n1, n0 < # ar, n + 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, n
| ⊦ m ≠ n → (ar[n := a])[m] = ar[m] |
| # ar = n1 + n0 + 1, ar[n] ≠ [].head, ar ≠ [], n ≠ n1, n0 < # ar, n + 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: n
| ¬ 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 ∧ (∀ n0. n0 + n < # ar → ar[n0] = [].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 ∧ (∀ n0. n0 + n < # ar → ar[n0] = [].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.