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