| ⊦ relyp(t, p0, p1) ∧ pendingOk(p) ∧ onePendingW(t, l, p0) → onePendingW(t, l, p1) |
onePendingW(t, l, p0), pendingOk(p), relyp(t, p0, p1), ¬ onePendingW(t, l, p1) ⊦
| onePendingW(t, l, p0), pendingOk(p), relyp(t, p0, p1), ¬ onePendingW(t, l, p1) ⊦ |
p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, relyp(t, p0, p1), ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used simplifier rules: pendingOk: ⊦ pendingOk(p) ↔ (∀ l, t. #(p(l) |W | t) ≤ 1); onePendingW: ⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = []); filterwrites-def: ⊦ fowl |W = fowl.filter(λ fow. fow.W?); filtertid-def: ⊦ fowl | t = fowl.filter(λ fow. fow.tid = t); ⊦ # x.filter(p) = x.count(p); (s)
| p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, relyp(t, p0, p1), ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
⊦ relyp(t, p, p0) ↔ (∀ l. relyp(t, p(l), p0(l)))
p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l. relyp(t, p0(l), p1(l)) ⊦
Used terms: t, p0, p1
| ⊦ relyp(t, p, p0) ↔ (∀ l. relyp(t, p(l), p0(l))) |
| p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l. relyp(t, p0(l), p1(l)) ⊦ |
p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, relyp(t, p0(l0), p1(l0)), ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used terms: l0
| p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, relyp(t, p0(l0), p1(l0)), ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
⊦ relyp(t, fowl, fowl0) ↔ (∃ fowl1, fowl2. fowl ⊒ fowl1 ∧ fowl0 = fowl1 + fowl2 ∧ fowl2 | t = [])
p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ fowl1, fowl2. p0(l0) ⊒ fowl1 ∧ p1(l0) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦
Used terms: t, p0(l0), p1(l0)
| ⊦ relyp(t, fowl, fowl0) ↔ (∃ fowl1, fowl2. fowl ⊒ fowl1 ∧ fowl0 = fowl1 + fowl2 ∧ fowl2 | t = []) |
| p1(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ fowl1, fowl2. p0(l0) ⊒ fowl1 ∧ p1(l0) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦ |
fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, p0(l0) ⊒ fowl1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = []
Used simplifier rules: filtertid-def: ⊦ fowl | t = fowl.filter(λ fow. fow.tid = t); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s)
| fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, p0(l0) ⊒ fowl1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = [] |
⊦ x ⊒ y ↔ (∃ z. z + y = x)
fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∃ z. z + fowl1 = p0(l0) ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = []
Used terms: p0(l0), fowl1
| ⊦ x ⊒ y ↔ (∃ z. z + y = x) |
| fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∃ z. z + fowl1 = p0(l0) ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = [] |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = []
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = [] |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, fowl1.filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, fowl2.filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, fowl1.filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ a. a ∈ fowl1.filter(.W?).filter(λ fow. fow.tid = t) ⊦
Used terms: fowl1.filter(.W?).filter(λ fow. fow.tid = t)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ a. a ∈ fowl1.filter(.W?).filter(λ fow. fow.tid = t) ⊦ |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦
Used terms: l0
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s)
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l0), fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) ⊦
Used terms: fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| fowl + fowl1 = p0(l0), fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) ⊦ |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl1 ∨ ¬ a.W? ∨ a.tid ≠ fow.tid ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl1, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl1 ∨ ¬ a.W? ∨ a.tid ≠ fow.tid ⊦ |
Used terms: fow
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, fowl2.filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l0 ≠ l, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ a. a ∈ fowl2.filter(.W?).filter(λ fow. fow.tid = t) ⊦
Used terms: fowl2.filter(.W?).filter(λ fow. fow.tid = t)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow. fow.tid = t) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∃ a. a ∈ fowl2.filter(.W?).filter(λ fow. fow.tid = t) ⊦ |
fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l0), fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1 ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l0), p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ a. ¬ a ∈ fowl2.filter(λ fow0. fow0.tid = fow.tid) ⊦
Used terms: fowl2.filter(λ fow0. fow0.tid = fow.tid)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| fowl + fowl1 = p0(l0), p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ a. ¬ a ∈ fowl2.filter(λ fow0. fow0.tid = fow.tid) ⊦ |
fowl + fowl1 = p0(l0), p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl2 ∨ a.tid ≠ fow.tid ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l0), p1(l0) = fowl1 + fowl2, l0 ≠ l, fow.W?, fow ∈ fowl2, ∀ l0. l0 ≠ l → p0(l0).filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], ∀ l0, t0. p(l0).filter(.W?).count(λ fow. fow.tid = t0) ≤ 1, ∀ a. ¬ a ∈ fowl2 ∨ a.tid ≠ fow.tid ⊦ |
Used terms: fow
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.