| ⊦ ( (# gs.ar ≠ 0 ∧ htok(gs.ar)) ∧ allslotsfull(gs.ar, ls.n0, ls.n0, ls.e, true) ∧ ls.n < # gs.ar ∧ ls.e ≠ ⊥ ∧ ls.sz = # gs.ar ∧ (ls.n0 < # gs.ar ∧ ls.n0 = get_hash(ls.e, ls.sz)) ∧ ¬ ls.b) ∧ pre(gs, ls, I18, a) ∧ pcstepf(gs, ls, I18, a) = I19 → (# gstepf(gs, ls, I18, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, I18, a).ar)) ∧ allslotsfull(gstepf(gs, ls, I18, a).ar, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).e, true) ∧ lstepf(gs, ls, I18, a).n < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).e ≠ ⊥ ∧ lstepf(gs, ls, I18, a).sz = # gstepf(gs, ls, I18, a).ar ∧ ( lstepf(gs, ls, I18, a).n0 < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).n0 = get_hash(lstepf(gs, ls, I18, a).e, lstepf(gs, ls, I18, a).sz)) ∧ ¬ lstepf(gs, ls, I18, a).b |
ls.n0 = get_hash(ls.e, ls.sz), ls.sz = # gs.ar, pcstepf(gs, ls, I18, a) = I19, # gs.ar ≠ 0, ls.e ≠ ⊥, ls.n < # gs.ar, ls.n0 < # gs.ar, allslotsfull(gs.ar, ls.n0, ls.n0, ls.e, true), htok(gs.ar), pre(gs, ls, I18, a), ¬ ls.b ⊦ (# gstepf(gs, ls, I18, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, I18, a).ar)) ∧ allslotsfull(gstepf(gs, ls, I18, a).ar, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).e, true) ∧ lstepf(gs, ls, I18, a).n < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).e ≠ ⊥ ∧ lstepf(gs, ls, I18, a).sz = # gstepf(gs, ls, I18, a).ar ∧ ( lstepf(gs, ls, I18, a).n0 < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).n0 = get_hash(lstepf(gs, ls, I18, a).e, lstepf(gs, ls, I18, a).sz)) ∧ ¬ lstepf(gs, ls, I18, a).b
| ls.n0 = get_hash(ls.e, ls.sz), ls.sz = # gs.ar, pcstepf(gs, ls, I18, a) = I19, # gs.ar ≠ 0, ls.e ≠ ⊥, ls.n < # gs.ar, ls.n0 < # gs.ar, allslotsfull(gs.ar, ls.n0, ls.n0, ls.e, true), htok(gs.ar), pre(gs, ls, I18, a), ¬ ls.b ⊦ (# gstepf(gs, ls, I18, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, I18, a).ar)) ∧ allslotsfull(gstepf(gs, ls, I18, a).ar, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).n0, lstepf(gs, ls, I18, a).e, true) ∧ lstepf(gs, ls, I18, a).n < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).e ≠ ⊥ ∧ lstepf(gs, ls, I18, a).sz = # gstepf(gs, ls, I18, a).ar ∧ ( lstepf(gs, ls, I18, a).n0 < # gstepf(gs, ls, I18, a).ar ∧ lstepf(gs, ls, I18, a).n0 = get_hash(lstepf(gs, ls, I18, a).e, lstepf(gs, ls, I18, a).sz)) ∧ ¬ lstepf(gs, ls, I18, a).b |
Used simplifier rules: ⊦ (ls.b:= b).b ↔ b; (s) ⊦ lstepf(gs, ls, I18, a) = ls.b:= false; (s) ⊦ (ls.b:= b).sz = ls.sz; (s) ⊦ (ls.b:= b).e = ls.e; (s) ⊦ (ls.b:= b).n0 = ls.n0; (s) ⊦ gstepf(gs, ls, I18, a) = gs; (s) ⊦ (ls.b:= b).n = ls.n; (s) ⊦ m < n → n ≠ 0; (s) ⊦ pre(gs, ls, I18, a) ↔ a = doINSERT(ls.tid, false); (s) ⊦ pcstepf(gs, ls, I18, a) = I19; (s)
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.