| ⊦ writersOk(p, writers) → writersOk(p(l := p(l) -p n), writers) |
writersOk(p, writers), ¬ writersOk(p(l := p(l) -p n), writers) ⊦
| writersOk(p, writers), ¬ writersOk(p(l := p(l) -p n), writers) ⊦ |
∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ (t ∈ writers(l0) → l1 ≠ l0 → ¬ t ∈ writers(l1)) ∧ (¬ t ∈ writers(l0) → (l = l0 ⊃ p(l0) -p n;p(l0)).filter(.W?).filter(λ fow. fow.tid = t) = [])
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, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ (t ∈ writers(l0) → l1 ≠ l0 → ¬ t ∈ writers(l1)) ∧ (¬ t ∈ writers(l0) → (l = l0 ⊃ p(l0) -p n;p(l0)).filter(.W?).filter(λ fow. fow.tid = t) = []) |
l1 ≠ l0, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
(l = l0 ⊃ p(l0) -p n;p(l0)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
| l1 ≠ l0, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
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) ≠ ∅, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t ∈ writers(l0), t ∈ writers(l1), t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1)), ¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
Used terms: l0, t
| # writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t ∈ writers(l0), t ∈ writers(l1), t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1)), ¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
# writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []), ∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1) ⊦
| # writers(l1) ≠ 0, # writers(l0) ≠ 0, l1 ≠ l0, writers(l1) ≠ ∅, writers(l0) ≠ ∅, t ∈ writers(l1), t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []), ∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1) ⊦ |
Used terms: l1
| (l = l0 ⊃ p(l0) -p n;p(l0)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
l = l0, (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l ≠ l0, ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
| l = l0, (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
(p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦
| (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
(p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1)), ¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦
Used terms: l0, t
| (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1)), ¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [] ⊦ |
p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦
| p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦ |
p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∃ fowl. fowl = p(l0) ⊦
Used formulas: ∃ fowl. fowl = p(l0)
| p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∃ fowl. fowl = p(l0) ⊦ |
p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], fowl = p(l0), (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦
| p(l0).filter(.W?).filter(λ fow. fow.tid = t) = [], fowl = p(l0), (p(l0) -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦ |
fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦
| fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p n).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦ |
fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p 0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦
fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p n0 +1).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl, t, writers, l0. ¬(fowl.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ (fowl -p n0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [] ∧ ¬ t ∈ writers(l0)) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p 0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0) ⊦ |
Used simplifier rules: List('a) freely generated by [], +;; ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a + x = a ' + x; (s) ⊦ (a ' + x) -p 0 = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] -p n = []; (s) ⊦ [].filter(p) = []; (s)
| fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p n0 +1).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl, t, writers, l0. ¬(fowl.filter(.W?).filter(λ fow. fow.tid = t) = [] ∧ (fowl -p n0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [] ∧ ¬ t ∈ writers(l0)) ⊦ |
fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p (n0 + 1)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl -p (n0 + 1)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦ |
fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl = fow0 + fowl1, (fowl -p (n0 + 1)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ [] -p n = []; (s) ⊦ [].filter(p) = []; (s)
| fowl.filter(.W?).filter(λ fow. fow.tid = t) = [], fowl = fow0 + fowl1, (fowl -p (n0 + 1)).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦ |
(fow0.W? ⊃ fow0 ';[]).filter(λ fow. fow.tid = t) = [], fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl1 -p n0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦
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) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s)
| (fow0.W? ⊃ fow0 ';[]).filter(λ fow. fow.tid = t) = [], fowl1.filter(.W?).filter(λ fow. fow.tid = t) = [], (fowl1 -p n0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], ¬ t ∈ writers(l0), ∀ fowl0, t0, writers0, l. fowl0.filter(.W?).filter(λ fow. fow.tid = t0) ≠ [] ∨ (fowl0 -p n0).filter(.W?).filter(λ fow. fow.tid = t0) = [] ∨ t0 ∈ writers0(l) ⊦ |
Used terms: fowl1, t, writers, l0
| p(l0).filter(.W?).filter(λ fow. fow.tid = t) ≠ [], l ≠ l0, ¬ t ∈ writers(l0), ∀ l0, t. (t ∈ writers(l0) → (∀ l1. l1 ≠ l0 → ¬ t ∈ writers(l1))) ∧ (¬ t ∈ writers(l0) → p(l0).filter(.W?).filter(λ fow. fow.tid = t) = []) ⊦ |
Used terms: l0, t
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.