| ⊦ relyp(t, p0, p1) ∧ noPendingW(t, p0) → noPendingW(t, p1) |
noPendingW(t, p0), relyp(t, p0, p1), ¬ noPendingW(t, p1) ⊦
| noPendingW(t, p0), relyp(t, p0, p1), ¬ noPendingW(t, p1) ⊦ |
p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0, p1), ∀ l. p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used simplifier rules: 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);
| p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0, p1), ∀ l. p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0, p1) ⊦
Used terms: l
| p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0, p1) ⊦ |
⊦ relyp(t, p, p0) ↔ (∀ l. relyp(t, p(l), p0(l)))
p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ∀ l. relyp(t, p0(l), p1(l)) ⊦
Used terms: t, p0, p1
| ⊦ relyp(t, p, p0) ↔ (∀ l. relyp(t, p(l), p0(l))) |
| p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ∀ l. relyp(t, p0(l), p1(l)) ⊦ |
p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0(l), p1(l)) ⊦
Used terms: l
| p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], relyp(t, p0(l), p1(l)) ⊦ |
⊦ relyp(t, fowl, fowl0) ↔ (∃ fowl1, fowl2. fowl ⊒ fowl1 ∧ fowl0 = fowl1 + fowl2 ∧ fowl2 | t = [])
p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ∃ fowl1, fowl2. p0(l) ⊒ fowl1 ∧ p1(l) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦
Used terms: t, p0(l), p1(l)
| ⊦ relyp(t, fowl, fowl0) ↔ (∃ fowl1, fowl2. fowl ⊒ fowl1 ∧ fowl0 = fowl1 + fowl2 ∧ fowl2 | t = []) |
| p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ∃ fowl1, fowl2. p0(l) ⊒ fowl1 ∧ p1(l) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦ |
fowl2.filter(λ fow. fow.tid = t) = [], p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, p0(l) ⊒ fowl1 ⊦ 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) = [], p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, p0(l) ⊒ fowl1 ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = [] |
⊦ x ⊒ y ↔ (∃ z. z + y = x)
p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], fowl2.filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, ∃ z. z + fowl1 = p0(l) ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = []
Used terms: p0(l), fowl1
| ⊦ x ⊒ y ↔ (∃ z. z + y = x) |
| p0(l).filter(.W?).filter(λ fow. fow.tid = t) = [], fowl2.filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, ∃ z. z + fowl1 = p0(l) ⊦ fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ fowl2.filter(.W?).filter(λ fow. fow.tid = t) = [] |
fowl + fowl1 = p0(l), fowl2.filter(λ fow. fow.tid = t) = [], fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, fowl2.filter(.W?).filter(λ fow. fow.tid = t) ≠ [] ⊦
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(l), fowl2.filter(λ fow. fow.tid = t) = [], fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, fowl2.filter(.W?).filter(λ fow. fow.tid = t) ≠ [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l), fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl2.filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, ∃ 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(l), fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl2.filter(λ fow. fow.tid = t) = [], p1(l) = fowl1 + fowl2, ∃ a. a ∈ fowl2.filter(.W?).filter(λ fow. fow.tid = t) ⊦ |
fowl + fowl1 = p0(l), fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l), fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl2.filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2 ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl + fowl1 = p0(l), fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2, ∀ 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(l), fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2, ∀ a. ¬ a ∈ fowl2.filter(λ fow0. fow0.tid = fow.tid) ⊦ |
fowl + fowl1 = p0(l), fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2, ∀ a. ¬ a ∈ fowl2 ∨ a.tid ≠ fow.tid ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| fowl + fowl1 = p0(l), fowl1.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], fowl.filter(.W?).filter(λ fow0. fow0.tid = fow.tid) = [], p1(l) = fowl1 + fowl2, fow.W?, fow ∈ fowl2, ∀ 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.