| ⊦ onePendingW(t, l, p) ∧ FOFollowsW(t, p(l)) ∧ p(l) = FO(t) ' + fowl ∧ ¬ FO(t) ∈ fowl → noPendingW(t, p) |
p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), onePendingW(t, l, p), ¬ noPendingW(t, p), ¬ FO(t) ∈ fowl ⊦
| p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), onePendingW(t, l, p), ¬ noPendingW(t, p), ¬ FO(t) ∈ fowl ⊦ |
p(l) = FO(t) ' + fowl, p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used simplifier rules: onePendingW: ⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = []); noPendingW: ⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = []); filterwrites-def: ⊦ fowl |W = fowl.filter(λ fow. fow.W?); filtertid-def: ⊦ fowl | t = fowl.filter(λ fow. fow.tid = t); a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| p(l) = FO(t) ' + fowl, p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
p(l) = FO(t) ' + fowl, p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used terms: l0
| p(l) = FO(t) ' + fowl, p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
p(l) = FO(t) ' + fowl, p(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
| p(l) = FO(t) ' + fowl, p(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∃ a. a ∈ p(l).filter(.W?).filter(λ fow. fow.tid = t) ⊦
Used terms: p(l).filter(.W?).filter(λ fow. fow.tid = t)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∃ a. a ∈ p(l).filter(.W?).filter(λ fow. fow.tid = t) ⊦ |
p(l) = FO(fow.tid) ' + fowl, fow.W?, FOFollowsW(fow.tid, p(l)), fow ∈ p(l), FO(fow.tid) ∈ p(l), ¬ FO(fow.tid) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [] ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| p(l) = FO(fow.tid) ' + fowl, fow.W?, FOFollowsW(fow.tid, p(l)), fow ∈ p(l), FO(fow.tid) ∈ p(l), ¬ FO(fow.tid) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [] ⊦ |
fow = W(v, t), p(l) = FO(t) ' + fowl, fow.W?, FOFollowsW(t, p(l)), FO(t) ∈ p(l), fow ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: ⊦ fow.W? → (val = fow.val ∧ tid = fow.tid ↔ fow = W(val, tid)); (elim) Used terms: fow, v, t
| fow = W(v, t), p(l) = FO(t) ' + fowl, fow.W?, FOFollowsW(t, p(l)), FO(t) ∈ p(l), fow ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), W(v, t) ∈ p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(v, tid).W?; (s)
| p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), W(v, t) ∈ p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∃ n. n < # p(l) ∧ p(l)[n] = W(v, t) ⊦
Used terms: W(v, t), p(l)
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| p(l) = FO(t) ' + fowl, FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∃ n. n < # p(l) ∧ p(l)[n] = W(v, t) ⊦ |
p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FOFollowsW(t, p(l)), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t)))
p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n. n < # p(l) ∧ p(l)[n].W? ∧ p(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l) ∧ p(l)[n0] = FO(t)) ⊦
Used terms: t, p(l)
| ⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t))) |
| p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n. n < # p(l) ∧ p(l)[n].W? ∧ p(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l) ∧ p(l)[n0] = FO(t)) ⊦ |
p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. n0 < # p(l) ∧ p(l)[n0].W? ∧ p(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p(l) ∧ p(l)[n1] = FO(p(l)[n0].tid)) ⊦
| p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. n0 < # p(l) ∧ p(l)[n0].W? ∧ p(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p(l) ∧ p(l)[n1] = FO(p(l)[n0].tid)) ⊦ |
p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, n < # p(l) ∧ p(l)[n].W? ∧ p(l)[n].tid = t → (∃ n1. n < n1 ∧ n1 < # p(l) ∧ p(l)[n1] = FO(p(l)[n].tid)), ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used terms: n
| p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, n < # p(l) ∧ p(l)[n].W? ∧ p(l)[n].tid = t → (∃ n1. n < n1 ∧ n1 < # p(l) ∧ p(l)[n1] = FO(p(l)[n].tid)), ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
p(l)[n1] = FO(t), p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n1 < # p(l), n < n1, n < # p(l), n + 1 < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (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 f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(v, tid).tid = tid; (s) ⊦ W(v, tid).W?; (s)
| p(l)[n1] = FO(t), p(l)[n] = W(v, t), p(l) = FO(t) ' + fowl, p(l) ≠ [], n1 < # p(l), n < n1, n < # p(l), n + 1 < # p(l), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
(FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), FO(t) ' + fowl ≠ [], n + 1 < #(FO(t) ' + fowl), n < #(FO(t) ' + fowl), n < n1, n1 < #(FO(t) ' + fowl), FO(t) ∈ FO(t) ' + fowl, ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
| (FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), FO(t) ' + fowl ≠ [], n + 1 < #(FO(t) ' + fowl), n < #(FO(t) ' + fowl), n < n1, n1 < #(FO(t) ' + fowl), FO(t) ∈ FO(t) ' + fowl, ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
(FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), fowl ≠ [], n < # fowl, n < n1, n1 ≤ # fowl, ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) ⊦ 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 + n0 ↔ n < n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ a ∈ x → (a ∈ a0 ' + x ↔ a = a0); (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| (FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), fowl ≠ [], n < # fowl, n < n1, n1 ≤ # fowl, ¬ FO(t) ∈ fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
(FO(t) ' + fowl)[n1] = FO(t), (FO(t) ' + fowl)[n] = W(v, t), fowl ≠ [], n < n1, n < # fowl, n1 ≤ # fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n. ¬(n < # fowl ∧ fowl[n] = FO(t)) ⊦
Used terms: FO(t), fowl
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| (FO(t) ' + fowl)[n1] = FO(t), (FO(t) ' + fowl)[n] = W(v, t), fowl ≠ [], n < n1, n < # fowl, n1 ≤ # fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n. ¬(n < # fowl ∧ fowl[n] = FO(t)) ⊦ |
(FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), fowl ≠ [], n < # fowl, n < n1, n1 ≤ # fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t) ⊦
| (FO(t) ' + fowl)[n] = W(v, t), (FO(t) ' + fowl)[n1] = FO(t), fowl ≠ [], n < # fowl, n < n1, n1 ≤ # fowl, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t) ⊦ |
(FO(t) ' + fowl)[n1] = FO(t), (FO(t) ' + fowl)[n] = W(v, t), n1 = n2 +1, fowl ≠ [], n < n1, n < # fowl, n1 ≤ # fowl, ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t), ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(tid) = FO(tid0) ↔ tid = tid0; (s) ⊦ 0 ≤ m; (s) ⊦ ¬ n < 0; (s)
| (FO(t) ' + fowl)[n1] = FO(t), (FO(t) ' + fowl)[n] = W(v, t), n1 = n2 +1, fowl ≠ [], n < n1, n < # fowl, n1 ≤ # fowl, ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t), ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [] ⊦ |
(FO(t) ' + fowl)[n] = W(v, t), fowl[n2] = FO(t), fowl ≠ [], n2 < # fowl, n < # fowl, n ≤ n2, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t) ⊦
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 + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[n + 1] = x[n]; (s)
| (FO(t) ' + fowl)[n] = W(v, t), fowl[n2] = FO(t), fowl ≠ [], n2 < # fowl, n < # fowl, n ≤ n2, ∀ l0. l0 ≠ l → p(l0).filter(.W?).filter(λ fow0. fow0.tid = t) = [], ∀ n0. ¬ n0 < # fowl ∨ fowl[n0] ≠ FO(t) ⊦ |
Used terms: n2
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.