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