| ⊦ writersOk(p, writers) → writersOk(p(l := p(l) + FO(t) '), writers) |
writersOk(p, writers), ¬ writersOk(p(l := p(l) + FO(t) '), writers) ⊦
| writersOk(p, writers), ¬ writersOk(p(l := p(l) + FO(t) '), writers) ⊦ |
∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ (t0 ∈ writers(l0) → l1 ≠ l0 → ¬ t0 ∈ writers(l1)) ∧ (¬ t0 ∈ writers(l0) → (l = l0 ⊃ p(l0) + FO(t) ';p(l0)).filter(.W?).filter(λ fow. fow.tid = t0) = [])
Used simplifier rules: writersOk: ⊦ writersOk(p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [])); filterwrites-def: ⊦ fowl |W = fowl.filter(λ fow. fow.W?); filtertid-def: ⊦ fowl | t = fowl.filter(λ fow. fow.tid = t);
| ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ (t0 ∈ writers(l0) → l1 ≠ l0 → ¬ t0 ∈ writers(l1)) ∧ (¬ t0 ∈ writers(l0) → (l = l0 ⊃ p(l0) + FO(t) ';p(l0)).filter(.W?).filter(λ fow. fow.tid = t0) = []) |
l1 ≠ l0, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
(l = l0 ⊃ p(l0) + FO(t) ';p(l0)).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
| l1 ≠ l0, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l0), t0 ∈ writers(l1), t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1)), ¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = [], ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
Used terms: l0, t0
| # writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l0), t0 ∈ writers(l1), t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1)), ¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = [], ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []), ∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1) ⊦
| # writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t0 ∈ writers(l1), t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []), ∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1) ⊦ |
Used terms: l1
| (l = l0 ⊃ p(l0) + FO(t) ';p(l0)).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
l = l0, (p(l0) + FO(t) ').filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
p(l0).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], l ≠ l0, ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
| l = l0, (p(l0) + FO(t) ').filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
p(l0).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ ¬ FO(tid).W?; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s)
| p(l0).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
Used terms: l0, t0
| p(l0).filter(.W?).filter(λ fow. fow.tid = t0) ≠ [], l ≠ l0, ¬ t0 ∈ writers(l0), ∀ l0, t0. (t0 ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t0 ∈ writers(l1))) ∧ (¬ t0 ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t0) = []) ⊦ |
Used terms: l0, t0
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.