| gspmx = spmx ∧ y = mkvector(r) ∧ okspmx(spmx, r, # x) ∧ (∀ tid. ghostlspmxf(tid) = ∅) ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), gspmx) ∧ y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ gspmx ⊆ spmx ∧ # y = r ∧ okspmx(spmx, r, # x) |
gspmx = spmx, y = mkvector(r), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), gspmx) ∧ y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ gspmx ⊆ spmx ∧ # y = r ∧ okspmx(spmx, r, # x)
| gspmx = spmx, y = mkvector(r), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), gspmx) ∧ y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ gspmx ⊆ spmx ∧ # y = r ∧ okspmx(spmx, r, # x) |
okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used simplifier rules: ⊦ # mkvector(n) = n; (s)
| okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
okspmx(spmx, r, # x), ¬ alldisjointp(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used formulas: alldisjointp(alltids, ghostlspmxf)
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
U(alltids, ghostlspmxf) = ∅, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
U(alltids, ghostlspmxf) ≠ ∅, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used formulas: U(alltids, ghostlspmxf) = ∅
| U(alltids, ghostlspmxf) = ∅, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
U(alltids, ghostlspmxf) = ∅, mkvector(r) + spmx.toMatrix(r, # x) * x ≠ spmx.toMatrix(r, # x) * x, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦
Used simplifier rules: ⊦ st ⊆ st; (s) ⊦ ∅ ∪ spmx = spmx; (s) ⊦ disjointp(∅, spmx1); (s)
| U(alltids, ghostlspmxf) = ∅, mkvector(r) + spmx.toMatrix(r, # x) * x ≠ spmx.toMatrix(r, # x) * x, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ |
⊦ # x = n → mkvector(n) + x = x
U(alltids, ghostlspmxf) = ∅, #(spmx.toMatrix(r, # x) * x) ≠ r, mkvector(r) + spmx.toMatrix(r, # x) * x ≠ spmx.toMatrix(r, # x) * x, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦
Used terms: r, spmx.toMatrix(r, # x) * x
| ⊦ # x = n → mkvector(n) + x = x |
| U(alltids, ghostlspmxf) = ∅, #(spmx.toMatrix(r, # x) * x) ≠ r, mkvector(r) + spmx.toMatrix(r, # x) * x ≠ spmx.toMatrix(r, # x) * x, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ |
⊦ #c mx = # vec → #(mx * vec) = #r mx
Used simplifier rules: ⊦ #c spmx.toMatrix(r, c) = c; (s) ⊦ #r spmx.toMatrix(r, c) = r; (s) Used terms: spmx.toMatrix(r, # x), x
| ⊦ #c mx = # vec → #(mx * vec) = #r mx |
| U(alltids, ghostlspmxf) ≠ ∅, alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1[a] = st2[a])
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ np. ¬((np ∈ U(alltids, ghostlspmxf) ↔ np ∈ ∅) ∧ U(alltids, ghostlspmxf)[np] = ∅[np]) ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used terms: U(alltids, ghostlspmxf), ∅
| ⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1[a] = st2[a]) |
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ np. ¬((np ∈ U(alltids, ghostlspmxf) ↔ np ∈ ∅) ∧ U(alltids, ghostlspmxf)[np] = ∅[np]) ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), np ∈ U(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used simplifier rules: ⊦ ¬ a ∈ st → st[a] = ∅[a]; (s) ⊦ ¬ a ∈ ∅; (s)
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), np ∈ U(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
⊦ alldisjointp(ts, f) → (np ∈ U(ts, f) ↔ (∃ tid. tid ∈ ts ∧ np ∈ f(tid)))
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ tid. tid ∈ alltids ∧ np ∈ ghostlspmxf(tid) ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used terms: np, alltids, ghostlspmxf
| ⊦ alldisjointp(ts, f) → (np ∈ U(ts, f) ↔ (∃ tid. tid ∈ ts ∧ np ∈ f(tid))) |
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ tid. tid ∈ alltids ∧ np ∈ ghostlspmxf(tid) ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), np ∈ ghostlspmxf(tid), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx
Used simplifier rules: alltids-all: ⊦ tid ∈ alltids;
| alldisjointp(alltids, ghostlspmxf), okspmx(spmx, r, # x), np ∈ ghostlspmxf(tid), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: tid
| okspmx(spmx, r, # x), ¬ alldisjointp(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ alldisjointp(alltids, ghostlspmxf) ∧ disjointp(U(alltids, ghostlspmxf), spmx) ∧ mkvector(r) + (U(alltids, ghostlspmxf) ∪ spmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x ∧ U(alltids, ghostlspmxf) ∪ spmx ⊆ spmx |
okspmx(spmx, r, # x), ¬ alldisjointp(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦
| okspmx(spmx, r, # x), ¬ alldisjointp(alltids, ghostlspmxf), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ |
⊦ alldisjointp(ts, f) ↔ (∀ tid1, tid2, np. tid1 ∈ ts ∧ tid2 ∈ ts ∧ np ∈ f(tid1) ∧ tid1 ≠ tid2 → ¬ np ∈ f(tid2))
okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ tid1, tid2, np. ¬(tid1 ∈ alltids ∧ tid2 ∈ alltids ∧ np ∈ ghostlspmxf(tid1) ∧ tid1 ≠ tid2 → ¬ np ∈ ghostlspmxf(tid2)) ⊦
Used terms: alltids, ghostlspmxf
| ⊦ alldisjointp(ts, f) ↔ (∀ tid1, tid2, np. tid1 ∈ ts ∧ tid2 ∈ ts ∧ np ∈ f(tid1) ∧ tid1 ≠ tid2 → ¬ np ∈ f(tid2)) |
| okspmx(spmx, r, # x), ∀ tid. ghostlspmxf(tid) = ∅, ∃ tid1, tid2, np. ¬(tid1 ∈ alltids ∧ tid2 ∈ alltids ∧ np ∈ ghostlspmxf(tid1) ∧ tid1 ≠ tid2 → ¬ np ∈ ghostlspmxf(tid2)) ⊦ |
tid1 ≠ tid2, okspmx(spmx, r, # x), np ∈ ghostlspmxf(tid2), np ∈ ghostlspmxf(tid1), ∀ tid. ghostlspmxf(tid) = ∅ ⊦
Used simplifier rules: alltids-all: ⊦ tid ∈ alltids;
| tid1 ≠ tid2, okspmx(spmx, r, # x), np ∈ ghostlspmxf(tid2), np ∈ ghostlspmxf(tid1), ∀ tid. ghostlspmxf(tid) = ∅ ⊦ |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: tid1
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.