| ⊦ ¬ ( ( ls.lspmx ≠ ∅ ∧ ( alldisjointp(alltids, gs.ghostlspmxf) ∧ disjointp(U(alltids, gs.ghostlspmxf), gs.gspmx) ∧ gs.y + (U(alltids, gs.ghostlspmxf) ∪ gs.gspmx).toMatrix(gs.r, # gs.x) * gs.x = gs.spmx.toMatrix(gs.r, # gs.x) * gs.x ∧ U(alltids, gs.ghostlspmxf) ∪ gs.gspmx ⊆ gs.spmx ∧ # gs.y = gs.r ∧ okspmx(gs.spmx, gs.r, # gs.x)) ∧ gs.ghostlspmxf(ls.tid) = ls.lspmx) ∧ pre(gs, ls, L4, a) ∧ pcstepf(gs, ls, L4, a) = L0) |
# gs.y = gs.r, gs.y + (U(alltids, gs.ghostlspmxf) ∪ gs.gspmx).toMatrix(gs.r, # gs.x) * gs.x = gs.spmx.toMatrix(gs.r, # gs.x) * gs.x, gs.ghostlspmxf(ls.tid) = ls.lspmx, pcstepf(gs, ls, L4, a) = L0, ls.lspmx ≠ ∅, alldisjointp(alltids, gs.ghostlspmxf), disjointp(U(alltids, gs.ghostlspmxf), gs.gspmx), okspmx(gs.spmx, gs.r, # gs.x), pre(gs, ls, L4, a), U(alltids, gs.ghostlspmxf) ∪ gs.gspmx ⊆ gs.spmx ⊦
| # gs.y = gs.r, gs.y + (U(alltids, gs.ghostlspmxf) ∪ gs.gspmx).toMatrix(gs.r, # gs.x) * gs.x = gs.spmx.toMatrix(gs.r, # gs.x) * gs.x, gs.ghostlspmxf(ls.tid) = ls.lspmx, pcstepf(gs, ls, L4, a) = L0, ls.lspmx ≠ ∅, alldisjointp(alltids, gs.ghostlspmxf), disjointp(U(alltids, gs.ghostlspmxf), gs.gspmx), okspmx(gs.spmx, gs.r, # gs.x), pre(gs, ls, L4, a), U(alltids, gs.ghostlspmxf) ∪ gs.gspmx ⊆ gs.spmx ⊦ |
# gs.y = gs.r, gs.y + (U(alltids, gs.ghostlspmxf) ∪ gs.gspmx).toMatrix(gs.r, # gs.x) * gs.x = gs.spmx.toMatrix(gs.r, # gs.x) * gs.x, gs.ghostlspmxf(ls.tid) = ls.lspmx, ls.lspmx ≠ ∅, alldisjointp(alltids, gs.ghostlspmxf), disjointp(U(alltids, gs.ghostlspmxf), gs.gspmx), okspmx(gs.spmx, gs.r, # gs.x), U(alltids, gs.ghostlspmxf) ⊆ gs.spmx, gs.gspmx ⊆ gs.spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0)
Used simplifier rules: pcstepf-L4: ⊦ pcstepf(gs, ls, L4, a) = (∃ np0. a = chooseL4(np0) ⊃ L5;L0); disj-26: ⊦ L5 ≠ L0; pre-L4: ⊦ pre(gs, ls, L4, a) ↔ (∃ np0. np0 ∈ ls.lspmx ∧ a = chooseL4(np0)) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx); ⊦ disjointp(spmx1, spmx2) → (spmx1 ∪ spmx2 ⊆ spmx ↔ spmx1 ⊆ spmx ∧ spmx2 ⊆ spmx); (ws)
| # gs.y = gs.r, gs.y + (U(alltids, gs.ghostlspmxf) ∪ gs.gspmx).toMatrix(gs.r, # gs.x) * gs.x = gs.spmx.toMatrix(gs.r, # gs.x) * gs.x, gs.ghostlspmxf(ls.tid) = ls.lspmx, ls.lspmx ≠ ∅, alldisjointp(alltids, gs.ghostlspmxf), disjointp(U(alltids, gs.ghostlspmxf), gs.gspmx), okspmx(gs.spmx, gs.r, # gs.x), U(alltids, gs.ghostlspmxf) ⊆ gs.spmx, gs.gspmx ⊆ gs.spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0) |
⊦ ((((spmx = gs.spmx ∧ gspmx = gs.gspmx) ∧ r = gs.r) ∧ x = gs.x) ∧ y = gs.y) ∧ ghostlspmxf = gs.ghostlspmxf ↔ gs = mkgs(spmx, gspmx, r, x, y, ghostlspmxf)
# y = r, y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x, ghostlspmxf(ls.tid) = ls.lspmx, gs = mkgs(spmx, gspmx, r, x, y, ghostlspmxf), ls.lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, r, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0)
Used terms: y, gs, gspmx, ghostlspmxf, spmx, r, x
| ⊦ ((((spmx = gs.spmx ∧ gspmx = gs.gspmx) ∧ r = gs.r) ∧ x = gs.x) ∧ y = gs.y) ∧ ghostlspmxf = gs.ghostlspmxf ↔ gs = mkgs(spmx, gspmx, r, x, y, ghostlspmxf) |
| # y = r, y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(r, # x) * x = spmx.toMatrix(r, # x) * x, ghostlspmxf(ls.tid) = ls.lspmx, gs = mkgs(spmx, gspmx, r, x, y, ghostlspmxf), ls.lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, r, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0) |
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(ls.tid) = ls.lspmx, ls.lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0)
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(ls.tid) = ls.lspmx, ls.lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx, np0 ∈ ls.lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ls.lspmx) ⊦ ∃ np0. a = chooseL4(np0) |
⊦ ((tid = ls.tid ∧ lspmx = ls.lspmx) ∧ np = ls.np) ∧ val = ls.val ↔ ls = mkls(tid, lspmx, np, val)
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) = lspmx, ls = mkls(tid, lspmx, np, val), lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, np0 ∈ lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ lspmx) ⊦ ∃ np0. a = chooseL4(np0)
Used terms: val, lspmx, np, tid, ls
| ⊦ ((tid = ls.tid ∧ lspmx = ls.lspmx) ∧ np = ls.np) ∧ val = ls.val ↔ ls = mkls(tid, lspmx, np, val) |
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) = lspmx, ls = mkls(tid, lspmx, np, val), lspmx ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, np0 ∈ lspmx ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ lspmx) ⊦ ∃ np0. a = chooseL4(np0) |
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx, np0 ∈ ghostlspmxf(tid) ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ghostlspmxf(tid)) ⊦ ∃ np0. a = chooseL4(np0)
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx, np0 ∈ ghostlspmxf(tid) ∧ a = chooseL4(np0) ∨ a = τ ∧ ¬(∃ np0. np0 ∈ ghostlspmxf(tid)) ⊦ ∃ np0. a = chooseL4(np0) |
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, a = τ, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx ⊦ ∃ np0. a = chooseL4(np0), ∃ np0. np0 ∈ ghostlspmxf(tid)
Used simplifier rules: inj-03: ⊦ chooseL4(np) = chooseL4(np0) ↔ np = np0;
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, a = τ, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx ⊦ ∃ np0. a = chooseL4(np0), ∃ np0. np0 ∈ ghostlspmxf(tid) |
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid)
Used simplifier rules: disj-08: ⊦ τ ≠ chooseL4(np);
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, ghostlspmxf(tid) ≠ ∅, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid) |
⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1[a] = st2[a])
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, ∃ np. ¬((np ∈ ghostlspmxf(tid) ↔ np ∈ ∅) ∧ ghostlspmxf(tid)[np] = ∅[np]) ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid)
Used terms: ghostlspmxf(tid), ∅
| ⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1[a] = st2[a]) |
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), gspmx ⊆ spmx, U(alltids, ghostlspmxf) ⊆ spmx, ∃ np. ¬((np ∈ ghostlspmxf(tid) ↔ np ∈ ∅) ∧ ghostlspmxf(tid)[np] = ∅[np]) ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid) |
y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), np ∈ ghostlspmxf(tid), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid)
Used simplifier rules: ⊦ ¬ a ∈ st → st[a] = ∅[a]; (s) ⊦ ¬ a ∈ ∅; (s)
| y + (U(alltids, ghostlspmxf) ∪ gspmx).toMatrix(# y, # x) * x = spmx.toMatrix(# y, # x) * x, alldisjointp(alltids, ghostlspmxf), disjointp(U(alltids, ghostlspmxf), gspmx), okspmx(spmx, # y, # x), np ∈ ghostlspmxf(tid), U(alltids, ghostlspmxf) ⊆ spmx, gspmx ⊆ spmx ⊦ ∃ np0. np0 ∈ ghostlspmxf(tid) |
Used terms: np
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.