| ⊦ ( (# gs.ar ≠ 0 ∧ htok(gs.ar)) ∧ ls.n < # gs.ar ∧ ls.e ≠ ⊥ ∧ ls.sz = # gs.ar ∧ (ls.n0 < # gs.ar ∧ ls.n0 = get_hash(ls.e, ls.sz)) ∧ ¬ ls.b ∧ (ls.e0 ≠ ⊥ → ls.e0 = gs.ar[ls.n]) ∧ allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false)) ∧ pre(gs, ls, M7, a) ∧ pcstepf(gs, ls, M7, a) = M8 → (# gstepf(gs, ls, M7, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, M7, a).ar)) ∧ lstepf(gs, ls, M7, a).n < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).e ≠ ⊥ ∧ lstepf(gs, ls, M7, a).sz = # gstepf(gs, ls, M7, a).ar ∧ ( lstepf(gs, ls, M7, a).n0 < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).n0 = get_hash(lstepf(gs, ls, M7, a).e, lstepf(gs, ls, M7, a).sz)) ∧ (∃ n. n < # gstepf(gs, ls, M7, a).ar ∧ gstepf(gs, ls, M7, a).ar[n] = lstepf(gs, ls, M7, a).e) ∧ allslotsfull(gstepf(gs, ls, M7, a).ar, lstepf(gs, ls, M7, a).n0, lstepf(gs, ls, M7, a).n, lstepf(gs, ls, M7, a).e, false) |
ls.n0 = get_hash(ls.e, ls.sz), ls.sz = # gs.ar, pcstepf(gs, ls, M7, a) = M8, # gs.ar ≠ 0, ls.e ≠ ⊥, ls.n < # gs.ar, ls.n0 < # gs.ar, allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false), htok(gs.ar), pre(gs, ls, M7, a), ¬ ls.b, ls.e0 ≠ ⊥ → ls.e0 = gs.ar[ls.n] ⊦ (# gstepf(gs, ls, M7, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, M7, a).ar)) ∧ lstepf(gs, ls, M7, a).n < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).e ≠ ⊥ ∧ lstepf(gs, ls, M7, a).sz = # gstepf(gs, ls, M7, a).ar ∧ ( lstepf(gs, ls, M7, a).n0 < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).n0 = get_hash(lstepf(gs, ls, M7, a).e, lstepf(gs, ls, M7, a).sz)) ∧ (∃ n. n < # gstepf(gs, ls, M7, a).ar ∧ gstepf(gs, ls, M7, a).ar[n] = lstepf(gs, ls, M7, a).e) ∧ allslotsfull(gstepf(gs, ls, M7, a).ar, lstepf(gs, ls, M7, a).n0, lstepf(gs, ls, M7, a).n, lstepf(gs, ls, M7, a).e, false)
| ls.n0 = get_hash(ls.e, ls.sz), ls.sz = # gs.ar, pcstepf(gs, ls, M7, a) = M8, # gs.ar ≠ 0, ls.e ≠ ⊥, ls.n < # gs.ar, ls.n0 < # gs.ar, allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false), htok(gs.ar), pre(gs, ls, M7, a), ¬ ls.b, ls.e0 ≠ ⊥ → ls.e0 = gs.ar[ls.n] ⊦ (# gstepf(gs, ls, M7, a).ar ≠ 0 ∧ htok(gstepf(gs, ls, M7, a).ar)) ∧ lstepf(gs, ls, M7, a).n < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).e ≠ ⊥ ∧ lstepf(gs, ls, M7, a).sz = # gstepf(gs, ls, M7, a).ar ∧ ( lstepf(gs, ls, M7, a).n0 < # gstepf(gs, ls, M7, a).ar ∧ lstepf(gs, ls, M7, a).n0 = get_hash(lstepf(gs, ls, M7, a).e, lstepf(gs, ls, M7, a).sz)) ∧ (∃ n. n < # gstepf(gs, ls, M7, a).ar ∧ gstepf(gs, ls, M7, a).ar[n] = lstepf(gs, ls, M7, a).e) ∧ allslotsfull(gstepf(gs, ls, M7, a).ar, lstepf(gs, ls, M7, a).n0, lstepf(gs, ls, M7, a).n, lstepf(gs, ls, M7, a).e, false) |
ls.e = ls.e0, ls.e0 = gs.ar[ls.n], ls.n0 = get_hash(ls.e0, ls.sz), ls.sz = # gs.ar, ls.e0 ≠ ⊥, ls.n0 < ls.sz, ls.n < ls.sz, allslotsfull(gs.ar, ls.n0, ls.n, ls.e0, false), htok(gs.ar), ¬ ls.b ⊦ ∃ n. n < ls.sz ∧ gs.ar[n] = ls.e0
Used simplifier rules: ⊦ lstepf(gs, ls, M7, τ) = ls; (s) ⊦ gstepf(gs, ls, M7, τ) = gs; (s) ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ pre(gs, ls, M7, a) ↔ a = τ; (s) ⊦ M8 ≠ M10; (s) ⊦ pcstepf(gs, ls, M7, a) = (ls.e = ls.e0 ⊃ M8;M10); (s)
| ls.e = ls.e0, ls.e0 = gs.ar[ls.n], ls.n0 = get_hash(ls.e0, ls.sz), ls.sz = # gs.ar, ls.e0 ≠ ⊥, ls.n0 < ls.sz, ls.n < ls.sz, allslotsfull(gs.ar, ls.n0, ls.n, ls.e0, false), htok(gs.ar), ¬ ls.b ⊦ ∃ n. n < ls.sz ∧ gs.ar[n] = ls.e0 |
Used terms: ls.n
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.