| ⊦ ordered≤(t.toList) → ordered≤(t) |
ordered≤(t.toList), ¬ ordered≤(t) ⊦
| ordered≤(t.toList), ¬ ordered≤(t) ⊦ |
ordered≤(branch(t0, a, t1).toList), ¬ ordered≤(branch(t0, a, t1)) ⊦ ordered≤(t0.toList) ∧ ¬ ordered≤(t0), ordered≤(t1.toList) ∧ ¬ ordered≤(t1)
Used simplifier rules: toList-base: ⊦ leaf.toList = []; ordered-base: ⊦ ordered≤(leaf); tree freely generated by leaf, branch;; ⊦ ordered≤([]); (s)
| ordered≤(branch(t0, a, t1).toList), ¬ ordered≤(branch(t0, a, t1)) ⊦ ordered≤(t0.toList) ∧ ¬ ordered≤(t0), ordered≤(t1.toList) ∧ ¬ ordered≤(t1) |
ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ¬ ordered≤(branch(t0, a, t1)) ⊦
Used simplifier rules: toList-rec: ⊦ branch(t0, a, t1).toList = t0.toList + (a + t1.toList); ⊦ ordered≤(x + y) → ordered≤(x); (s) ⊦ ordered≤(x + y) → ordered≤(y); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s)
| ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ¬ ordered≤(branch(t0, a, t1)) ⊦ |
⊦ ordered≤(branch(t0, a, t1)) ↔ ordered≤(t0) ∧ t0 ≤ a ∧ a ≤ t1 ∧ ordered≤(t1)
ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ ordered≤(t0) ∨ ¬ t0 ≤ a ∨ ¬ a ≤ t1 ∨ ¬ ordered≤(t1) ⊦
Used terms: t0, a, t1
| ⊦ ordered≤(branch(t0, a, t1)) ↔ ordered≤(t0) ∧ t0 ≤ a ∧ a ≤ t1 ∧ ordered≤(t1) |
| ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ ordered≤(t0) ∨ ¬ t0 ≤ a ∨ ¬ a ≤ t1 ∨ ¬ ordered≤(t1) ⊦ |
ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ¬ t0 ≤ a ∨ ¬ a ≤ t1 ⊦
| ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ¬ t0 ≤ a ∨ ¬ a ≤ t1 ⊦ |
ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ t0 ≤ a ⊦
ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ a ≤ t1 ⊦
| ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ t0 ≤ a ⊦ |
⊦ t ≤ a ↔ (∀ b. b ∈ t → ¬ a < b)
ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ∃ b. ¬(b ∈ t0 → ¬ a < b) ⊦
Used terms: t0, a
| ⊦ t ≤ a ↔ (∀ b. b ∈ t → ¬ a < b) |
| ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ∃ b. ¬(b ∈ t0 → ¬ a < b) ⊦ |
a < b, ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), b ∈ t0 ⊦
| a < b, ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), b ∈ t0 ⊦ |
⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m])
a < b, ordered≤(t1), ordered≤(t0), b ∈ t0, ∀ m, n. m ≤ n ∧ n < #(t0.toList + a ' + t1.toList) → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used terms: t0.toList + a ' + t1.toList
| ⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m]) |
| a < b, ordered≤(t1), ordered≤(t0), b ∈ t0, ∀ m, n. m ≤ n ∧ n < #(t0.toList + a ' + t1.toList) → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
a < b, ordered≤(t0), ordered≤(t1), b ∈ t0, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
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 + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ #(x + y) = # x + # y; (s)
| a < b, ordered≤(t0), ordered≤(t1), b ∈ t0, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
⊦ a ∈ t ↔ a ∈ t.toList
a < b, ordered≤(t1), ordered≤(t0), b ∈ t0.toList, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used terms: b, t0
| ⊦ a ∈ t ↔ a ∈ t.toList |
| a < b, ordered≤(t1), ordered≤(t0), b ∈ t0.toList, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
a < b, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m], ∃ n. n < # t0.toList ∧ t0.toList[n] = b ⊦
Used terms: b, t0.toList
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| a < b, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m], ∃ n. n < # t0.toList ∧ t0.toList[n] = b ⊦ |
t0.toList ≠ [], a < t0.toList[n], n < # t0.toList, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| t0.toList ≠ [], a < t0.toList[n], n < # t0.toList, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
Used simplifier rules: ⊦ m < n → m ≤ n; (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 ⊦ (x + a ' + y)[# x] = a; (s) ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n, # t0.toList
| ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), ¬ a ≤ t1 ⊦ |
⊦ a ≤ t ↔ (∀ b. b ∈ t → ¬ b < a)
ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ∃ b. ¬(b ∈ t1 → ¬ b < a) ⊦
Used terms: a, t1
| ⊦ a ≤ t ↔ (∀ b. b ∈ t → ¬ b < a) |
| ordered≤(t0.toList + a ' + t1.toList), ordered≤(t1), ordered≤(t0), ∃ b. ¬(b ∈ t1 → ¬ b < a) ⊦ |
b < a, ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), b ∈ t1 ⊦
| b < a, ordered≤(t0), ordered≤(t1), ordered≤(t0.toList + a ' + t1.toList), b ∈ t1 ⊦ |
⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m])
b < a, ordered≤(t1), ordered≤(t0), b ∈ t1, ∀ m, n. m ≤ n ∧ n < #(t0.toList + a ' + t1.toList) → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used terms: t0.toList + a ' + t1.toList
| ⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m]) |
| b < a, ordered≤(t1), ordered≤(t0), b ∈ t1, ∀ m, n. m ≤ n ∧ n < #(t0.toList + a ' + t1.toList) → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
b < a, ordered≤(t0), ordered≤(t1), b ∈ t1, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
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 + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ #(x + y) = # x + # y; (s)
| b < a, ordered≤(t0), ordered≤(t1), b ∈ t1, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
⊦ a ∈ t ↔ a ∈ t.toList
b < a, ordered≤(t1), ordered≤(t0), b ∈ t1.toList, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used terms: b, t1
| ⊦ a ∈ t ↔ a ∈ t.toList |
| b < a, ordered≤(t1), ordered≤(t0), b ∈ t1.toList, ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
b < a, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m], ∃ n. n < # t1.toList ∧ t1.toList[n] = b ⊦
Used terms: b, t1.toList
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| b < a, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m], ∃ n. n < # t1.toList ∧ t1.toList[n] = b ⊦ |
t1.toList ≠ [], t1.toList[n] < a, n < # t1.toList, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| t1.toList ≠ [], t1.toList[n] < a, n < # t1.toList, ordered≤(t0), ordered≤(t1), ∀ m, n. m ≤ n ∧ ¬ # t0.toList + # t1.toList < n → ¬ (t0.toList + a ' + t1.toList)[n] < (t0.toList + a ' + t1.toList)[m] ⊦ |
Used simplifier rules: ⊦ m ≤ m + n; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ (x + y)[n + # x] = y[n]; (s) ⊦ (a ' + x)[n + 1] = x[n]; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ (x + a ' + y)[# x] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: # t0.toList, # t0.toList + n +1
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.